记录mysql启动、关闭、运行期间发生的错误及警告相关信息,当mysql出现问题时可通过排查错误日志定位具体问题。
查看错误日志位置:show global variables like 'log_error';
修改错误日志位置:修改my.cnf中log-error路径
记录服务端收到的每个命令,由于会记录所有命令,开启会对性能造成影响,默认关闭。可通过以下方式配置使用
使用命令
show global variables like '%general%'; 查看通用日志相关参数
general_log :是否开启通用日志
general_log_file 通用日志文件位置
set global general_log=on; -- 开启
set global general_log=off; -- 关闭
set global general_log_file='/data/mysql/log/general.log' -- 设置日志路径
show variables like 'log_output'; -- 查看通用日志记录格式,分为file,与table两种
set global log_output='file'; -- 使用文件方式保存日志
set global log_output='table'; -- 使用表方式保存日志,会保存到mysql库的general_log表中
使用配置文件
[mysqld]
general_log = 1 默认为0不开启,1开启
general_log_file = /data/mysql/log/general.log
开启后会记录超过long_query_time查询时间的sql语句,可通过如下方式使用
使用命令
show global variables like '%slow%'; -- 查看慢查询日志相关配置
log_slow_admin_statements :ddl慢查询是否开启
log_slow_slave_statements :从库慢查询是否开启
slow_launch_time :创建线程的阈值,超过该时间slow_launch_time+1
slow_query_log :慢查询是否开启
slow_query_log_file:慢查询日志位置
show global variables like 'long_query_time'; -- 查看慢查询时间
set global long_query_time=3; -- 设置慢查询时间
set global slow_query_log=on; -- 开启
set global slow_query_log=off; -- 关闭
set global slow_query_log_file='/data/mysql/log/slow.log' -- 设置日志路径
show variables like 'log_output'; -- 查看日志记录格式,分为file,与table两种
set global log_output='file'; -- 使用文件方式保存日志
set global log_output='table'; -- 使用表方式保存日志,会保存到mysql库的slow_log表中
使用配置文件
[mysqld]
slow_query_log = 1 0不开启,1开启
slow_query_log_file = /data/mysql/log/slow.log
long_query_time = 3
用于主从同步,从库读取主库二进制日志并且保存到本地,然后从库线程读取relay log日志内容在从库中执行。日志格式与binlog相同可通过mysqlbinlog读取
使用命令
show global variables like '%relay%'; -- 查看中继日志相关配置
max_relay_log_size :日志最大值,为0时等于max_binlog_size,不为0时,当日志超过此大小循环写入。
relay_log:中继日志名称,为空是在数据文件目录下,文件名为host_name-relay-bin
relay_log_basename:中继日志文件的基本名称和完整路径
relay_log_index:中继日志索引文件的名称
relay_log_info_file :设置relay-log.info的位置和名称
relay_log_info_repository :中继日志类型table或file
relay_log_purge:是否自动清空中继日志,默认开启
relay_log_recovery :从库宕机,relay log损坏,导致一部分中继日志没处理,则放弃所有未执行的relay log,重新从主库获取,使用时需要开启relay_log_purge
relay_log_space_limit :中继日志的最大空间量
sync_relay_log:刷盘策略,为0时不主动刷盘,依赖操作系统定期刷盘,为1时表示每次写入都刷盘
sync_relay_log_info:与sync_relay_log类似,刷盘时机取决于是否有事务
可通过 set global修改对应参数
set global sync_relay_log=1; -- 修改刷盘策略
set global relay_log_purge=off; -- 关闭
使用配置文件
[mysqld]
relay_log_purge= 1 0不开启,1开启
sync_relay_log= 1
innodb 特有,在数据变动时,将对变动进行逆向记录,用来保证事务原子性以及实现mvcc。
show global variables like '%undo%';
innodb_max_undo_log_size :日志最大值,默认1G,开启innodb_undo_log_truncate后会进行自动回收
innodb_undo_directory:日志位置,默认数据目录(datadir)下
innodb_undo_log_truncate:是否开启自动回收。开启后需要innodb_undo_tablespaces大于2才可以回收。
innodb_undo_logs:回滚段数量默认为128,innodb_undo_logs>=35,32个给临时表空间使用,1个给系统表空间使用,2个给自动回收表空间使用,由于每个回滚段由1024个undo segment组成,该值为128则最大事务为 93*1024
innodb_undo_tablespaces:表示undolog对应的表空间文件的个数
innodb 特有的引擎层物理日志,用来保证事务持久性,redo log 包括内存缓冲区(innodb_log_buffer_size)与磁盘日志文件(innodb_log_file_size ),在写磁盘日志文件时采用循环写入方式,当写到结尾时,会回到文件头覆盖写入。由于磁盘日志为顺序写入,可以提高性能。
show global variables like '%innodb_flush_log_at_trx_commit%'; -- 查看redo log 刷盘策略,
为0时表示每次事务提交都把写入redo log buffer中
为1时每次事务提交都写入 redo log file中进行刷盘,保证数据一致性
为2时每次提交事务都写入redo log file中但是不进行刷盘,此时数据在磁盘缓存(page chche)中
show global variables like '%innodb_flush_log_at_timeout%';
日志刷盘时间,默认1秒
show global variables like '%innodb_log%';
innodb_log_buffer_size:redo log内存区大小
innodb_log_checksums:是否启用重做日志的校验
innodb_log_compressed_pages:是否启用压缩
innodb_log_file_size:每个日志文件大小
innodb_log_files_in_group:日志文件数量,可在innodb_log_group_home_dir下查看,默认两个ib_logfile0,ib_logfile1
innodb_log_group_home_dir:日志文件路径
innodb_log_write_ahead_size:预写块大小,以字节为单位。避免read-on-write
server层逻辑日志,记录sql语句的逻辑,在事务执行过程中,先写入到binlog cache,事务提交时再把binlog cache写入到binlog文件中,之后删除binglog cache中内容,当binlog cache不够大时,会先写入磁盘临时文件。binlog文件为追加写入,当文件写到一定大小写下一个文件。
SHOW GLOBAL VARIABLES LIKE "%binlog%"
binlog_cache_size:每个线程binlog cache 大小,必须是4096倍数
binlog_checksum:验证算法,默认为crc32,为每一个binlog event写一个校验码,设置为none时只校验长度,不生成校验码。
binlog_direct_non_transactional_updates:对非事务表操作是否记入binlog,个人理解用处不大,此参数只在binlog_format为statement时生效。
binlog_error_action:默认为ABORT_SERVER写入binlog失败时主动关闭实例,重启时恢复,也可设置为IGNORE_ERROR写入binlog失败时不写入,继续对外提供服务
binlog_format:分为statement,row,mixed格式,
statement记录sql不保证数据一致性。
row记录行记录,但比较费空间,保证数据 一致性。
mixed为混合模式,由mysql判断存储sql还是行记录。
binlog_group_commit_sync_delay:组提交延迟时间。
binlog_group_commit_sync_no_delay_count:组提交延迟数量,累计到延迟数量忽略组提交延迟时间设置。
binlog_gtid_simple_recovery:是否开启gtid简单恢复。
binlog_order_commits:binlog记录顺序是否与事务顺序相同。
binlog_row_image:控制binlog记录详细程度,binglog记录为row格式下生效
full :记录一行数据所有列信息。
minimal :只记录该行唯一表示和被修改的信息
noblob :记录一行数据所有列信息BLOB 和 TEXT类型除外
binlog_rows_query_log_events:对于row格式的binlog模式,是否记录binlog对应的SQL
binlog_stmt_cache_size:线程私有,控制事务里有非事务语句缓存区大小。
binlog_transaction_dependency_history_size:保存事务哈希值上限
max_binlog_cache_size:与binlog_cache_size类似,每个线程binglog cache超过max_binlog_cache_size设置会抛异常。
max_binlog_size:binlog日志文件大小,超过此值会打开新文件继续写入。
max_binlog_stmt_cache_size:与binlog_stmt_cache_size类似,超过会抛异常
sync_binlog:binlog:刷盘策略
sync_binlog=0,禁止binlog刷盘,依赖操作系统刷盘。
sync_binlog=1,每次提交事务都进行刷盘。
sync_binlog=N,写入N次进行刷盘。
SHOW GLOBAL VARIABLES LIKE "%log_bin%"
log_bin:是否开启binglog
log_bin_basename:binlog文件路径名称
log_bin_index: binglog:索引文件路径名称
log_bin_trust_function_creators:是否可以信任存储函数创建者,不会创建写入二进制日志引起不安全事件的存储函数。
log_bin_use_v1_row_events:是否启用版本2日志记录,mysql5.6.6以前使用版本1
set global设置参数到内存中,重启失效,并且有些不能通过set global修改,需要修改my.cnf文件