时间:2021-07-01 10:21:17 帮助过:18人阅读
DBMS
datebase management system 数据库管理系统
DML:date manapulate lanaguage 数据操作语言
INSERT,REPLACE,UPDATE,DELETE
DLL: Date Defination Lanauage 数据定义语言
CREATE,创建数据库 ALTER,修改数据库 DROP 删除数据库和表
DCL:Date Control Language 数据控制语言
常用数据库软件
Oracle 世界三大
Sybase
Infomix
SQL Server sybase和micrsoft共同开发
MySQL
PostgreSQL
pgsql
EnterpriseDB redhat注资
MySQL,SQL 瑞典 MySQL AB 作者女儿名字命名
MYSQL事务工作原理:
可以能保证你做的一系列动作,要么全部成功。如果有一个操作失败,就回退到修改前。
比如你要做下面几个操作:
1.删除表A中的某些记录;
2.向B添加一些记录;
3.修改C表中的一些数据;
-------------------------
使用事务,如果1,2都成功了,3却失败了。
就会回退到第1步执行前的样子,ABC表都没被修改。
表索引:相当于一个表的目录 可以加快速度访问
1) 普通索引
2) 唯一索引
3) 主索引
4) 外键索引
5) 复合索引
# 数据库文件路径
mysql> show variables link ‘%datadir%‘;
wget http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.63.tar.gz
tar xzf mysql-5.1.63.tar.gz ;cd mysql-5.1.63
./configure --prefix=/usr/local/mysql --enable-assembler && make -j8 && make -j8 install
--enable-assembler # 使用某些字符串的汇编器版本
安装报错: checkingfor termcap functions library... configure: error: No curses/termcap libraryfound
解决方法: yum install ncurses-devel -y
1. 设置服务
配置MYSQL服务为系统服务
cp/usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf
cp/usr/local/mysql/share/mysql/mysql.server /etc/rc.d/init.d/mysqld
2. 设置开机启动
chkconfig --add mysqld # 增加服务
chkconfig --level 345 mysqld on # 增加开机项
3. 建立系统账号
useradd mysql
4. 过入mysql安装目录
cd /usr/local/mysql
chown -R mysql.mysql/usr/local/mysql # 将安装目录所有者权限设为mysql用户
/usr/local/mysql/bin/mysql_install_db--user=mysql --datadir=/usr/local/mysql/var --basedir=/usr/local/mysql # 初始化数据库 --datadir=指定数据目录 --basedir=指定数据基础目录
chown -R mysql.mysql var # 修改var所有者
/usr/local/mysql/bin/mysqld_safe --user=mysql & # 服务后台启动
5.5以上版本安装方式:
rm -rf /data/mysql/*
scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql--user=mysql
bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql &
安装依赖:yum -yinstall gcc-c++ cmake ncurses-devel
useradd mysql
mkdir -p /data/mysql
chown -R mysql:mysql /data/mysql
cmake .-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DMYSQL_DATADIR=/data/mysql \
-DSYSCONFDIR=/etc \
-DMYSQL_USER=mysql \
-DMYSQL_TCP_PORT=3306 \
-DWITH_XTRADB_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EXTRA_CHARSETS=1 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DWITH_BIG_TABLES=1 \
-DWITH_DEBUG=0
&& make && make install
初始化
cd /usr/local/mysql
./scripts/mysql_install_db --user=mysql--basedir=/usr/local/mysql --datadir=/data/mysql
添加服务
cp ./support-files/mysql.server/etc/rc.d/init.d/mysqld
chmod 755 /etc/init.d/mysqld
chkconfig mysqld on
修改启动服务
vi /etc/rc.d/init.d/mysqld
basedir=/usr/local/mysql
datadir=/data/mysql
:wq!
修改配置文件
vim /etc/my.cnf
datadir=/data/mysql
:wq
service mysqld start
添加环境变量
vi /etc/profile
export PATH=$PATH:/usr/local/mysql/bin
:wq!
添加sock
source /etc/profile
ln -s /var/lib/mysql/mysql.sock /tmp/
安装报错:
Curses library not found. Please install appropriate package,
按照错误提示,Debian/Ubuntu下需要安装libncurses5-dev;Redhat下需要安装ncurses-devel ,检查是否安装了ncurses包,如下所示,已经安装了ncurses-5.5-24.20060715,但是缺少ncurses-devel包。
yum install ncurses-devel -y
安装了ncurses-devel包后,删除CMakeCache.txt,然后重新编译,编译成功,问题解决!
预编译:
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/webserver/mysql/-DMYSQL_DATADIR=/home/mysql/data/ -DEFAULT_CHARSET=utf8 -DMYSQL_TCP_PORT=3306-DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DWITH_DEBUG=0 -DWITH_INNOBASE_STORAGE_ENGINE=1-DMYSQL_USER=mysql
make && make install
这些参数的意思:
-DCMAKE_INSTALL_PREFIX=/data/mysql 准备安装到那里
-DEFAULT_CHARSET=utf8 默认的字符集
-DMYSQL_TCP_PORT=3306 数据库的监听端口
-DMYSQL_UNIX_ADDR=/tmp/mysql3306.sock 本机连回数据库的unix socket
-DWITH_DEBUG=0 关闭debug模式
-DWITH_INNOBASE_STORAGE_ENGINE=1 打开innodb引擎
项目删除:CMake 默认不提供uninstall 这个 target,想要的话,输入:
xargs rm < install_manifest.txt
yum install -y mysql mysql-devel mysql-server mysql-libs
安装依赖包
-----------------------------------------------------------------------------------------------------------------------------
Installing:
mysql-server i686 5.1.73-5.el6_7.1 updates 8.8 M
Installing for dependencies:
mysql i686 5.1.73-5.el6_7.1 updates 904 k
perl-DBD-MySQL i686 4.013-3.el6 base 134 k
perl-DBI i686 1.609-4.el6 base 705 k
Updating for dependencies:
mysql-libs i686 5.1.73-5.el6_7.1 updates 1.2 M
---------------------------------------------------------------------------------------------------------------------------------
二进制程序:mysql mysqld 可执行程序
RDBMS:
/var/lib/mysql/ 数据库默认路径
yum install mysql-server -y
初始化mysql: 首次安装会自动初始化
service mysql restart
service mysqld restart
# 重启和停止服务
/etc/init.d/mysqld stop
端口tcp:3306
/usr/local/mysql/share/mysql.server stop –socket=/var/lib/mysql/mysql.sock& 启动后台服务
/usr/loacl/mysql/bin/mysql/mysql.serverstop 停止源码mysql服务
[mysqld] // 服务器端配置
datadir=/data/mysql // 数据目录
socket=/var/lib/mysql/mysql.sock //socket // 通信设置
user=mysql // 使用mysql用户启动
symbolic-links=0 // 是否支持快捷方式
log-bin=mysql-bin // 开启bin-log日志
server-id = 1 // mysql服务ID
auto_increment_offset=1 // 1~65535 自增长字段
auto_increment_increment=2 // 1~65535 自增长字段每次递增的量 默认为1
(mysql中有自增长字段,在做数据库的主主同步时需要设置自增长的两个相关配置:
在主主同步配置时,需要将两台服务器的auto_increment_increment增长量都配置为2,而要把auto_increment_offset分别配置为1和2,这样才可以避免两台服务器同时做更新时自增长字段的值之间发生冲突。)
[mysqld_safe] // mysql服务安全启动配置
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
replicate-do-db =jfedu // 允许slave同步哪个库
key_buffer_size=16M 指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。一般为内存的50% show variables like ‘key_buffer_size‘;查询缓冲大小
max_connections = 3000 # 每个客户端连接最大的错误允许数量,如果达到了此限制,这个客户端将会被MySQL服务阻止直到执行了”FLUSH HOSTS”或者服务重启.
innodb_buffer_pool_size= 对于InnoDB表来说,innodb_buffer_pool_size的作用就相当于key_buffer_size对于MyISAM表的作用一样。InnoDB使用该参数指定大小的内存来缓冲数据和索引。
对于单独的MySQL数据库服务器,最大可以把该值设置成物理内存的80%。
内存32G,24G
根据MySQL手册,对于2G内存的机器,推荐值是1G(50%)。
basedir =path # 使用给定目录作为根目录(安装目录)。
datadir =path #从给定目录读取数据库文件。
pid-file = filename # 为mysqld程序指定一个存放进程ID的文件(仅适用于UNIX/Linux系统);
[mysqld]
socket = /tmp/mysql.sock # 为MySQL客户程序与服务器之间的本地通信指定一个套接字文件(Linux下默认是/var/lib/mysql/mysql.sock文件)
port = 3306 # 指定MsSQL侦听的端口
key_buffer = 384M # key_buffer是用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写)。索引块是缓冲的并且被所有的线程共享,key_buffer的大小视内存大小而定。
table_cache = 512 # 为所有线程打开表的数量。增加该值能增加mysqld要求的文件描述符的数量。可以避免频繁的打开数据表产生的开销
sort_buffer_size = 2M # 每个需要进行排序的线程分配该大小的一个缓冲区。增加这值加速ORDER BY或GROUP BY操作。注意:该参数对应的分配内存是每连接独占!如果有100个连接,那么实际分配的总共排序缓冲区大小为100×6=600MB
read_buffer_size = 2M # 读查询操作所能使用的缓冲区大小。和sort_buffer_size一样,该参数对应的分配内存也是每连接独享。
query_cache_size = 32M # 指定MySQL查询结果缓冲区的大小
read_rnd_buffer_size = 8M # 改参数在使用行指针排序之后,随机读用的。
myisam_sort_buffer_size = 64M # MyISAM表发生变化时重新排序所需的缓冲
thread_concurrency = 8 # 最大并发线程数,取值为服务器逻辑CPU数量×2,如果CPU支持H.T超线程,再×2
thread_cache = 8 # #缓存可重用的线程数
skip-locking # 避免MySQL的外部锁定,减少出错几率增强稳定性。
[mysqldump]
max_allowed_packet =16M # 服务器和客户端之间最大能发送的可能信息包
# 查询当前连接进程
showprocesslist;
访问mysql的命令格式:
mysql:
-u username 默认 root
-p 默认 空
-h myser_server 默认 loclhost本机
示例:mysql -uroot -p -h 192.168.1.254
退出 \q
连接方式:
linux socket server和clinet在同一台服务器
windows memory 共享内存
网络端 TCP
mysql 客户端:
交互式模式
批处理模式
交互式模式中的命令类别:
客户端命令 : \h 帮助菜单
服务器端命令
语句结束符: 默认为分号;
关系数据库对象:
库
表
索引
视图
键(约束)
存储过程
存储函数
触发器
游标
用户
权限
事务
表:
行row 列 field ,column
字段 数据类型 类型修饰(限制)
数值类型
整数类型 字节 范围(有符号) 范围(无符号) 用途
TINYINT 1字节 (-128,127) (0,255) 小整数值
SMALLINT 2字节 (-32 768,32 767) (0,65 535) 大整数值
MEDIUMINT 3字节 (-8 388608,8 388 607) (0,16 777 215) 大整数值
INT或INTEGER 4字节 (-2147 483 648,2 147 483 647) (0,4294 967 295) 大整数值
BIGINT 8字节 (-9 233 372 036854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值
FLOAT 4字节 (-3.402 823 466E+38,1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)0,(1.175 494 351 E-38,3.402 823466 E+38) 单精度浮点数值
DOUBLE 8字节 (1.797 693 134 862 3157 E+308,2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 双精度浮点数值
DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值
字符串类型
字符串类型 字节大小 描述及存储需求
CHAR 0-255字节 定长字符串
VARCHAR 0-255字节 变长字符串
TINYBLOB 0-255字节 不超过 255 个字符的二进制字符串
TINYTEXT 0-255字节 短文本字符串
BLOB 0-65535字节 二进制形式的长文本数据
TEXT 0-65535字节 长文本数据
MEDIUMBLOB 0-16 777215字节 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16 777215字节 中等长度文本数据
LOGNGBLOB 0-4294 967 295字节 二进制形式的极大文本数据
LONGTEXT 0-4294 967 295字节 极大文本数据
VARBINARY(M) 允许长度0-M个字节的定长字节符串,值的长度+1个字节
BINARY(M) M 允许长度0-M个字节的定长字节符串
日期和时间类型
类型 大小(字节) 范围 格式 用途
DATE 4 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
TIME 3 ‘-838:59:59‘/‘838:59:59‘ HH:MM:SS 时间值或持续时间
YEAR 1 1901/2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4 1970-01-01 00:00:00/2037 年某时 YYYYMMDD HHMMSS 混合日期和时间值,时间戳
show variables like "%char%"
在/etc/my.cnf对应如下配置段加入相应命令
[clinet]字段加入default-character-set=utf8 客户端生效
[mysqld]字段加入character-set-server=utf8
[mysql]字段里加入default-character-set=utf8 本地生效
然后重启mysql服务
MyISAM MySQL5.0 之前的默认数据库引擎,最为常用。拥有较高的插入,查询速度,但不支持事务,支持表锁不支持行锁;
InnoDB事务型数据库的首选引擎,支持ACID事务,支持行级锁定, MySQL 5.5 起成为默认数据库引擎;
BDB源自 Berkeley DB,事务型数据库的另一种选择,支持Commit 和Rollback 等其他事务特性;
Memory所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在 MySQL 重新启动时丢失;
Mysql常用的两大引擎有MyISAM和innoDB,那他们有什么明显的区别呢,什么场合使用什么引擎呢?
MyISAM 类型的表强调的是性能,其执行数度比InnoDB类型更快,但不提供事务支持,如果执行大量的SELECT(查询)操作,MyISAM是更好的选择,支持表锁。
InnoDB 提供事务支持事务,外部键等高级数据库功能,执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表,支持行锁。
表锁和行锁:表锁,指当你插入数据时,其它命令不能插入和操作
行锁,如果要插入一行数据时,会锁定当前行,其它行不影响
MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但不提供事务支持,如果执行大量的SELECT(查询)操作,MyISAM是更好的选择,支持表锁。
InnoDB提供事务支持事务,外部键等高级数据库功能,执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表,支持行锁。
设置InnoDB为默认引擎:在配置文件my.cnf中的 [mysqld] 下面加入
default-storage-engine=INNODB 然后重启mysqld服务即可。
修改表引擎方法如下:
altertable t1 engine=myisam;
alter table t1 engine=innodb;
如果添加innodb引擎报错,需要执行如下命令:
删除/mysql/data目录下的ib_logfile0,ib_logfile1文件即可。
Alter table用来创建普通索引、unique索引或primary key索引。(我这里以t1表为例来讲解)
alter table t1 add index index_name (name)
alter table t1 add unique (name)
alter table t1 add primary key (name)
或者使用create创建
create index index_name on t1 (name)
create unique index index_name on t1 (name)
删除索引
drop index index_name on talbe_name
alter table t1 drop index index_name
1) 查看当前mysql慢查询状态
show variables like "%slow%";
| log_slow_queries | OFF
| slow_launch_time | 2 | 超过2秒定义为慢查询。
| slow_query_log | OFF | 慢查询关闭状态。
| slow_query_log_file |/data/mysql/var/db-Test2-slow.log | 慢查询日志的文件。
2) 开启慢查询日志方法
临时开启:set globalslow_query_log=on;
永久开启: 在my.cnf中添加,如下:
log-slow-queries = /data/mysql/var/db-Test2-slow.log #日志目录。开启慢日志查询
long_query_time = 0.1 #记录下查询时间查过1秒。
log-queries-not-using-indexes #表示记录下没有使用索引的查询。
3) mysqldumpslow分析日志
可用mysql提供的mysqldumpslow,使用很简单,参数可-help查看 -s:排序方式。
c , t , l , r 表示记录次数、时间、查询时间的多少、返回的记录数排序;
# ac , at , al , ar 表示相应的倒叙;
# -t:返回前面多少条的数据;
# -g:包含什么,大小写不敏感的;
mysqldumpslow-s r -t 10 /data/mysql/var/db-Test2-slow.log
Mysql的优化:一般分为配置的优化、sql语句的优化、表结构的优化、索引的优化,而配置的优化:一般包括系统内核优化、mysql本身配置文件的优化。
l 硬件上的优化: