首先需要明确的是, 错误日志中记录的未必都是错误日志,在Mysql的错误日志中,存储以下日志信息
1. 服务器启动和关闭过程中的信息
2. 服务器运行过程中的错误信息
3. 事件调度器运行一个事件时产生的信息
4. 在从服务器上启动从服务器进程时产生的信息
日志参数变量都是全局
定义的,会话级别是没有的.
datadir=/dir/to/mysql/datadir
hotname.log
log_error = on|文件路径
是否启用错误日志,on
表示开启,文件路径
表示指定自定义日志路径
log_warnings = 1|0
是否记录warnings信息到错误日志中
log = on|off
是否开启日志功能, 这个设置包含了查询日志
和慢查询日志
general_log = on|off
是否开启查询日志
general_log_file = /path/to/file
指定查询日志的位置
log_output = FILE|table
日志输出的位置, 这个指令对慢查询日志也起作用
建议开启,可以定位服务器性能问题
slow_query_log = on|off
开启慢查询
slow_query_log_file = /path/to/file
指定保存慢查询文件的位置
long_query_time=5(s)
超过多长时间表示慢查询 可精确到微妙
, 从语句开始到结束,所有时间都算, 哪怕阻塞时间也算
需要开启profiling
- 事务日志是被轮转的,一启动就分配完毕了, 并且是连续的存储空间,默认每个文件的大小为
5M
主要功能:
将随机I/O转换为顺序I/Oib_logfile0
,ib_logfile1
, 这两个文件如果坏了那么对于mysql来说是致命的, 所以建议事务log使用raid
innodb_log_group_home_dir
一般事务日志都要求两个以上,一个使用满了,在使用另一个,如此往复循环交替使用
innodb_log_file_in_group
日志组中的日志文件个数,默认2个
innodb_log_file_size
每个日志文件的大小, 默认5M
, 太大了会导致恢复起来比较慢
innodb_log_buffer_size
innodb日志内存
缓冲区大小, 日志是先写入到程序的内存缓冲区中,然后才同步到事务日志文件中的
innodb_flush_log_at_trx_commit
在事务提交的时候,innodb是否同步刷新日志从缓冲区到事务日志文件中去的 (0,1,2)三种可选
- 设置为
1
最靠谱- 这个参数是提高innodb性能的参数
innodb_mirrored_log_groups=1
日志组的镜像备份, 备份一定要放到不同的磁盘上
log_bin = on|文件路径
是否启用二进制日志,on
表示开启,文件路径
表示指定自定义日志路径, 默认路径在datadir
指定的路径下,
- 只要重启了服务, binlog二进制日志就会自己滚动一个新的, 或者使用
flush logs
手动滚动日志记录的信息
主要是记录修改数据或有可能引起数据改变的MySql语句, 记录时间,操作时长,等等信息- 日志格式: 基于(
语句
,row
,mixed
) 默认mixed
- 每一个二进制日志叫做一个
Binary log event(二进制日志事件)
, 每一个二进制日志事件都有自己的元数据(meta data
)信息, 时间,操作时长….- 每个二进制日志的上限是
1G
binlog_cache_size
默认启动的时候二进制的大小
binlog_format = (statement|row|mixed)
binlog_stmt_cache_size
基于语句格式的二进制日志缓存的大小
expire_logs_days=100
表示100天之前的日志自动清理掉建议别设置,还是自己手动purge最好
sql_log_bin
会话级别临时关闭或开启二进制日志的控制选项 set session sql_log_bin=0
sync_binlog=1
同步binlog的时机, 每执行一次事务提交,就同步二进制日志从内存中到磁盘中去, 建议开启
max_binlog_cache_size
最大二进制缓存大小
max_binlog_size
最大二进制日志大小,默认1G
,当达到这个值以后会自动滚动的
max_binlog_stmt_cache_size
最大基于语句二进制缓存大小
mysql> PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetime_expr }
PURGE BINARY LOGS TO ‘mysql-bin.010’;
PURGE BINARY LOGS BEFORE ‘2008-04-02 22:46:26’;
purge binary logs to 'mysql-bin.000009'
删除000009
之前的日志文件
mysqlbinlog mysql-bin.000015
--start-datetime=#
--stop-datetime=#
--start-position=#
--stop-position=#
-u
,-p
,-h
去读取其他主机上的二进制日志
show binary logs
show master logs
SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
- 在复制过程中产生的日志
- 一个线程读取别人的二进制日志,存到本地叫做
中继日志
,然后本地在开启一个线程去读取中继日志在本地做回放
,就完成了数据的同步
max_relay_log_size
最大中继日志大小
relay_log_info_file=relay-log.info
中继日志存放的文件