系统参数
系统变量variables
- 数据库的配置信息,分为session级和global级别,可以动态或静态改变,也可以用--选项来在启动时设
置参数
- show global variables like '%slow%';
状态变量status
- 数据库运行状态的记录,揭示了数据库SQL数量,连接, I/O负载,缓存使用,文件FD等即时状态量。也分为session级和global级别,无法改变。
- show global status like 'com_select';
查看帮助详细信息
设置my.cnf进入数据库
创建参数文件进入数据库
[mysql@mysql5 ~]$ mysql_config_editor set --login-path=test --user=root --password --socket=/mysqldb/db_slave/mysql.sock
Enter password:
[mysql@mysql5 ~]$ mysql --login-path=test
默认读取配置文件的顺序
/etc/my.cnf
/etc/mysql/my.cnf
$basdir/etc/my.cnf
~./.my.cnf
针对拥有global session两个级别的变量,gloabl的改变只影响新增session,不映像现有的session,例如:autocommit。
日志文件
general log
- 记录数据库全部的SQL(包括错误的),连接信息,启动和关闭服务,按照时间顺序记录
- 数据量巨大
- 默认关闭,防止大量日志沾满空间
- mv之后要flush logs
参数
- general_log #控制是否开启,动态调整
- (默认关闭) {0-关闭,1-开启} 可以在线打开和关闭;
- set global general_log=‘ON’;
- general_log_file #控制日志路径,动态调整
- 默认路径为datadir/hostname.log
- log_output={TABLE | FILE | NONE}
- TABLE:便于统计,写入一个CSV引擎的表中。
- FILE:默认。
- NONE:任何地方都不写。
注意:如果log_output=NONE但是general_log为1,则默认不写常规日志。
格式
格式如下:
- Event_time每秒第一次query打印
- Query发出时记录
- 错误的,失败的,成功的均会记录
- 数据库的流量日志
关于表mysql.general_log表:
- select * from mysql.general_log;
- 表mysql.general_log不支持insert, update和delete;
- 表是不同步的(复制),不写binlog;
binlog
- 以“事件”的形式保存,描述数据的变更,包含关于每个更新数据库的语句的执行时间点。
- binlog只记录完整事务。
- 目的:最大可能地恢复数据库
- 启用该选项数据库性能降低1%,但保障数据库完整性,重要数据库必须启用。
- 主要用途:
- 主从复制
- 基于binlog的恢复
- 审计
参数
- log_bin
- (默认关闭) 不可以在线打开和关闭;
- 只能在my.cnf中的修改!需要重启mysqld
- log_bin_basename
- 不指定路径则为hostname-bin.00000N
- log_bin_index
- 不指定路径则为hostname-bin.index
注意:
- 文件路径需要在log_bin中设置,而不是log_bin_basename!
- 所有的日志都建议自己起名字,不要用默认
- binlog_checksum
- {CRC32|NONE}
- 写binlog时,会将内容生成校验位,之后存储在binlog中。
- 默认情况下,服务器记录事件的长度以及事件本身,并使用它来验证事件是否正确写入。 可以通过设置binlog_checksum系统变量来使服务器为事件写入校验和。
- master_verify_checksum
- 主库应用二进制日志时候,如果需要开启校验和,则打开此参数。
- slave_sql_verify_checksum
- 从库sql_thread读取relay log时使用checksum核对数据,如果需要开启校验和,则打开此参数。
- max_binlog_size: 二进制日志的大小。
- 记录binlog,在语句或事务完成之后立即执行(而不是在任何锁释放或任何提交完成之前写入),这确保日志以提交顺序登录。
- 对于不支持事务的表(MyISAM), 执行之后马上会被记录到binlog中。
- 对于未提交的事务中,更改事务表(例如InnoDB表)的所有更新(UPDATE, DELETE或INSERT)将被缓存,直到服务器收到COMMIT语句。 在这一点上, mysqld在执行COMMIT之后将整个事务写入二进制日志。
- 对非事务性表的修改无法回滚。 如果回滚的事务包括对非事务性表的修改,则会在最后使用ROLLBACK语句记录整个事务,但是非事务表无法回滚。
- binlog_cache_size:
- 内存中缓存二进制的缓冲区大小。
- 注意:对于大的事务,二进制日志会超过max_binlog_size设定的值。即该事务仅写入一个二进制日志。
- 当处理事务的线程开始时,它将给语句分配一个binlog_cache_size缓冲区。 如果一个语句大于这个值,线程将打开一个临时文件来存储事务文本。 当线程结束时,临时文件被删除。
- binlog_cache_use
- 状态变量, 显示用于存储语句的此缓冲区(可能还有一个临时文件)的事务数。
- binlog_cache_disk_use
- 状态变量, 显示有多少这些事务实际上必须使用临时文件。
- 根据这两个状态值,判断binlog_cache_size值设置是否合理,避免使用临时文件。
- max_binlog_cache_size
- 系统变量(默认为4GB,也是最大值)可用于限制用于缓存多语句事务的总大小。 如果一个事务大于这个多个字节,它将失败并回滚。 最小值为4096。
- sync_binlog: {0,1}
- 二进制内容从缓冲区flush到磁盘的触发点。
- 多少日志组,提交时,同步一次
- 5.7.7以后, sync_binlog参数被默认设置为1,减少了binlog中的不一致可能性。
- expire_logs_days:
- 日志过期时间,一定要和备份相结合。
- 8.0.3以后废弃,有binlog_expire_logs_seconds替代
格式
- binlog_format: STATEMENT, ROW, MIXED
- STATEMENT模式(SBR)
- 每一条变更数据的sql原语句记录到binlog。
- 缺点是在某些情况(如非确定函数)下会导致master-slave中的数据不一致(如sleep()函数,last_insert_id(),以及udf等会出现问题)
- ROW模式(RBR)
- 将原SQL语句等价转化为涉及数据变更的行的多条语句, 记录表中各个行如何被改变
- 不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。
- MIXED模式(MBR)
- 以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog, MySQL会根据执行的SQL语句选择日志保存方式。
管理
- Show binary logs; show master logs;
- 查看当前实例有哪些binlog文件
- Show master status;
- 查看当前实例最新的binlog点
- Flush logs;
- 生成一个新的binlog
- 关闭errlog,general log和slow log的fd重新打开fd
- reset master;
- 清理所有二进制日志,并从新开始记录二进制日志
- 写入binlog索引文件
- 清理指定编号之前的二进制日志:
- purge binary logs to ‘3306-bin.000005’;
- 清理指定时间前的二进制日志:
- purge binary logs before '2017-02-25 19:30:57';
- 不建议手动rm删除二进制日志,会造成index文件不一致。
slowlog
- 记录数据库中影响时间超过阀值的慢SQL(包括所有的select和更新)
- 不计算SQL执行前等待锁的时间,mysqld只从SQL等待的锁释放掉后,并开始执行时,开始计算时间(执行开始后的锁定时间会记录),所以慢查询日志中的语句顺序和语句的发出顺序或者general log的顺序不同
- mv之后要flush logs
参数
- slow_query_log #控制是否开启,动态调整
- (默认关闭) {0-关闭,1-开启} 可以在线打开和关闭;
- set global slow_query_log=‘ON’;
- slow_query_log_file #控制日志路径,动态调整
- 默认路径为datadir/hostname-slow.log
- long_query_time # SQL执行的阀值,默认为10s,动态
- log_queries_not_using_indexes 记录未用索引的慢查询
- log_throttle_queries_not_using_indexes: 记录没有使用索引查询的语句条数,
在一分钟内记录的条数
- min_examined_row_limit:
- 要检查的行数大于等于N时才记录为慢查询,前提是必须满足long_query_time和log-queries-notusing-indexes约束。
- log_slow_admin_statements:
- 管理语句是否记录
- ALTER TABLE, ANALYZE TABLE, CHECK TABLE, CREATE INDEX, DROP INDEX, OPTIMIZE TABLE, and REPAIR TABLE.
- log_slow_slave_statements:
- 从库的语句执行是否记录
error log
- 记录数据库启动,关闭, innodb加载,错误,告警信息, aborted connection
等信息
- 数据库的alert日志
参数
log_error=[path/[file_name]],如果不指定文件名,则默认hostname.err.
- 修改后重启生效
- 默认存放位置 datadir/hostname.err
log_error_verbosity(5.7.2被引入)
- Errors only
- Errors and warnings
- Errors, warnings, and notes (默认)
查看错误日志的位置
show variables like 'log_error’;
错误日志重建
[mysql@mysql5 log]$ mv mysql.err mysql.err'20180810';
mysql> flush logs;