[TOC]
## 参数文件
MySQL数据库参数文件的作用和Oracle数据库的参数文件极其类似忙,不同的是,Oreacle启动没有知道参数文件就不能装载(mount)操作的。MySQL稍微不同,MySQL可以不需要参数文件。这时参数值取决于编译MySQL是的指定默认值喝源代码中指定参数的默认值。但是如果找不到mysql架构同样保存。
数据库参数可以看成一个键/值(key/value)对。
数据库参数类型分为两类:
(1)动态参数:意味执行中可以进行修改
(2)静态参数:静态不能够进行修改
可以通过set进行动态参数的设置语法:
![](https://box.kancloud.cn/ba59819476975be3460c71f2dc38b4a8_694x76.png)
这里可以看到global 和session关键字 它们表明是当前会话还是整个实例的生命周期。
如图:![](https://box.kancloud.cn/c8abc702eceaa9f7dc54abd16accf0ad_483x41.png) 设置全局值 对本次生命周期有效但参数文件本身没有修改。
![](https://box.kancloud.cn/b8e1125ecc6c612fdf1f9279152e1219_691x111.png)
*****
## 日志文件
mysql日志文件有:(1)错误日志(error log)、(2)二进制日志(binlog)、(3)慢查询日志(slow query log) (4) 查询日志(log)
****
### 错误日志
错误日志文件对MySQL的启动、运行、关闭过程进行了记录。 用户可以通过命令:` SHOW VARIABKES LIKE 'log_error'\G`
![](https://box.kancloud.cn/73da89baed33036243db5d499bc31aaa_534x90.png)
![](https://box.kancloud.cn/a3226b035df40c36e6568278222b4ab5_455x71.png)
查找错误日志文件名
通过命令[root@centos7-w data]# `tail -n 50 centos7-w.err`执行(我没有成功,显示没有找到这个文件)
### 慢查询日志
慢查询日志(slow log)可帮助DBA定位可能存在问题的SQL语句.从而进行SQL语句层面的优化。
参数long_query_time参数来设置sql语句的运行时间, 默认为10,代表十秒。
`show variables like 'long_query_time'\G`
![](https://box.kancloud.cn/c7125b70cd722766a451f7d764d4f9a5_590x101.png)
MySQL默认情况下并不启动慢查询日志,用户要启动则设置为:ON
查询慢查询是否开启:`show variables like 'log_slow_queries'\G` (我测试没有找到该差数)
参数:log_queries_not_using_indexes :表示如果运行的SQL语句没有使用索引,则MySQL数据库同意会将这条SQL语句记录到慢查询日志文件。
`show variables like 'log_queries_not_using_indexes'\G`
![](https://box.kancloud.cn/5b66c6f3d4ddc597d588f2299b40b1c9_620x87.png)
MySQL5.6.5版本开始新增log_throttle_querrottlequeries_not_using_indexes 表示每分钟允许记录到slow log且并未使用索引的sql语句次数。默认为0 表示没有限制。
`show variables like 'log_throttle_querrottlequeries_not_using_indexes'\G`
![](https://box.kancloud.cn/2ffc9c64dec30e76607d03a91fb96d09_764x92.png)
mysqldumpslow命令可以简单直观的查看:
`mysqldumpslow nh122-190-slow.log`
用户需要查询执行时间最长的10条sql语句:
`mysqldumpslow -s al -n 10 nh122-190-slow.log`
mysql5.1 可以将慢查询插入到数据表中 慢查询在mysql架构下,名为slow_log 表结构定义如下:
`show create table mysql.slow_log\G`
![](https://box.kancloud.cn/c2efa327996bf3995423bc87de8ea455_757x301.png)
参数log_output指定了慢查询输出的格式:
`show variables like 'log_output'\G`
![](https://box.kancloud.cn/1169acb47b2467d1caeab13597894c37_535x90.png)
设置慢查询日志表的输出格式:
`set global log_output='table'`;
之后就可以查询表的数据:
![](https://box.kancloud.cn/9a6ca543e22594fe9ec60dedf5b1ff63_800x337.png)
查看定义可以发现该表使用的是CSV引擎,所以查询效率并不高,用户可以把slow_log引擎转换成MyISAM。提高查询速度,如果已经启动慢查询,会提示错误。
`ALTER mysql.slow——log ENGINE=MyISAM;`
所以需要先关闭慢查询:
`SET GLOBAL slow_query_log=off`
再执行一遍:
`ALTER mysql.slow——log ENGINE=MyISAM;`
但是如果改成MyISAM会造成额外的开销。不过好在慢查询的参数是动态的 所以用户方便的尽心设置或修改。
### 查询日志
通过命令 tail 进行查询
tail 【文件名】; 默认名称是主机名.log
### 二进制日志
二进制日志记录的是数据库执行更改的所有操作,但是不包括select 和 show 这类操作。
查询命令
首页获取文件名 `show MASTER STATUS\G`
![](https://box.kancloud.cn/6148aeabfa547dd02685e2c621522f12_591x134.png)
查询:`SHOW BINLOG EVENTS IN 'mysql-bin.000005'\G`
![](https://box.kancloud.cn/abca9c1807529b0d81158a0fdff1e68c_837x365.png)
通过配置参数log-bin[=name]可以启动二进制日志。
影响二进制日志记录的信息和行为的参数:
(1) max_binlog_size:指定单个二进制日志的最大值,如果超过,产生新的二进制日志文件。mysql5.0默认1G(之前的版本默认1.1G)
(2)binlog_cache_size:该事务提交(committed)时直接将缓冲中的二进制日志写入二进制日志文件,改缓冲大写有该参数决定。默认为32K,不能设置过大。通过show global status 可以查看 binlog_cache_use、binlog_cache_disk_use的状态。
(3)sync_binlog:该参数表示每写缓冲多少次就同步到磁盘。 如果将N设为1 即 sync_binlog=1表示同步写磁盘的方式来写二进制日志,这时写操作不使用操作系统缓冲来写二进制日志。值为0 如果InnoDB引擎进行复制,可以得到最大的高可用性。不过IO系统会带来一定的影响。但是该参数值为1,在事务发出COMMIT动作之前,由于该参数值为1,因此会将二进制日志立即写入磁盘。如果已经写入二进制日志但是提交没有发生,此时就会发生宕机,那么下次启动时,COMMIT操作并没有发生这个事务就会被回滚掉。但是二进制日志已经记录了该事务信息,不能被回滚。 这个问题通过参数innodb_support_xa设为1来解决,虽然innodb_support_xa与XA事务有关,但他同事也确保了二进制日志和数据文件的同步
(4)binlog-do-db:
(5)binlog-ignore-db:
参数binlog-do-db和binlog-ignore-db表示需要写入或者忽略写入哪些库的日志。默认为空,表示需要同步所有库的日志到二进制日志,
(6)log-slave-update:如果当前户数看是复制slave角色,它将不会从master取得并执行二进制日志到自己的二进制日志中去,这时候需要写入的话 需要设置该参数。 如果搭建master=>slave=>slave架构的复制,则必须设置该参数。
(7)binlog-format:该参数是设置二进制日志的格式。mysql5.1版本之后才有的。该参数可设:
1.STATEMENT格式:记录的是逻辑SQL语句
2.ROW格式:记录表的行更改情况。如果该参数设置该格式,可以将InnoDB的事务隔离基本设为READ COMMITTED ,以获得更好的并发性。但是会对磁盘空间要求有一定的增加。
3.MIXED格式:该格式下默认采用STATEMENT格式进行二进制记录,但是在存储引擎为NDB做DML操作或者使用了UUID()、USER()、CURRENT_USER()、FOUND_ROWS()、ROW_COUNT()等不确定函数或者使用了INSERT DELAY语句或者用户定义函数(UDF)或使用临时表。
此外还有存储以前的限制如表:
![](https://box.kancloud.cn/1ea0911f99960ac8c1a0ac286cdb071c_828x316.png)
binlog-format是动态参数可以在数据库运行环境下更改。 `SET @@session.binlog_format='ROW';`
也可以全局设置 `SET GLOBAL binlog_format='ROW';`
使用mysqlbinlog查看日志。
![](https://box.kancloud.cn/f71e7eeb6bf6c02abd6576ed2c1fc156_635x34.png)提示错误可以根据以下方法解决问题:
一是在MySQL的配置/etc/my.cnf中将default-character-set=utf8 修改为 character-set-server = utf8,但是这需要重启MySQL服务,如果你的MySQL服务正在忙,那这样的代价会比较大。
二是用mysqlbinlog --no-defaults mysql-bin.000004 命令打开
*****
## 套接字文件
用UNIX域套接字方式链接就需要一个套接字文件.该文件可由socket控制。一般在/tmp目录下 名为 mysql.sock
*****
## pid文件
MySQL启动时,会将自己的进程ID吸入pid文件。 参数pid——file哦控制 默认位于数据库目录下。文件名为主机名.pid
` show variables like 'pid_file'\G`
![](https://box.kancloud.cn/0d052318a01dad2ebca92754c853b0fd_618x93.png)
*****
## 表结构定义文件
frm 为后缀名的文件,这个文件记录了该表的表结构定义。 frm还用来存放视图定义。 可以直接用cat命令进行查看`cat 文件名.frm`
*****
## InnoDB存储引擎文件
### 表空间文件
InnoDB采用存储数据按表空间进行存放的设计。默认初始大小为10MB,名为ibdata1的文件。该文件就是表空间文件(tablepace file),参数innodb_data_file_path对其进行设置。
格式如下: `innodb_data_file_path=datafile_spec1[;datafile_spec2].....`
![](https://box.kancloud.cn/e1740ba9f9a235c5af4294cd88e8d876_844x71.png)
如果用多文件来组成表空间。 如果表位于不同的磁盘,磁盘负载被平均,因此可以听数据库整体性能。同时文件名后面跟了属性,表示文件代表为2000M 文件2用完可以制动增长(autoextend)。
设置innodb_data_file_path数之后所有InnoDB存储引擎表的数据会记录!共享表空间中。 若设置了参数 innodb_file_per_tabel。则用户基于InnoDB存储引擎产生独立表空间。命名规则为:表名.ibd。
`SHOW VARIABLES LIKE 'innodb_file_per_tabel'\G`
如果innodb_file_per_tabel=NO 则会产生单独的.ibd独立表空间文件。 改文件仅存表数据、索引和插入缓冲BITMAP等信息。
文件存储方式:
![](https://box.kancloud.cn/8d39fd43289883c45527e2c1638d83b8_750x350.png)
## 重做日志文件
在I你弄DB目录下有ib_logfile0和ib_logfile1的文件。官方称为日志文件,这个日志文件记录对于InnoDB存储引擎单独事务日志。运行方式是 日志文件1达到最后是会回到日志文件2,如果写满在切换日志文件1。
![](https://box.kancloud.cn/95020a242006deade598ce4abee54486_472x285.png)
参数影响重做日志文件的属性
(1)innodb_log_file_size 指定日志文件大小 InnoDB 1.2.x总文件大小不得大于4GB,而1.2.x版本扩大512GB。
(2)innodb_log_files_in_group 指定了日志文件组中重做日志文件的数量 默认为2
(3)innodb_mirrored_log_groups指定日志镜像文件组的数量 默认为1 只表示一个日志文件组没有镜像。
(4)innodb_log_group_home_dir 指定了日志文件组所在的路径 默认./
显示配置`SHOW VARIABLES LIKE 'innodb%log%'\G`
![](https://box.kancloud.cn/3846fd673525d93938e096dbea0eed36_550x184.png)
重做日志有一个capacity变量该值代表最后检查点不能超过这个值,如果超过则必须将缓冲池的脏页列表的部分藏独数据页写回磁盘,这时会导致用户线程的阻塞。
![](https://box.kancloud.cn/6e092e1c847e4aa6a757c4030c3b83db_850x444.png)
![](https://box.kancloud.cn/24a3a168c4e62a1af682a8a4e0ed297d_808x315.png)
![](https://box.kancloud.cn/23e7a54dc3ce7585783fc5736c0d088a_647x220.png)