ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[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)