在oracle和mysql这类关系型数据库中,遵循‘日志先行策略’,即在插入数据之前,先有一条日志记录。
进入正题,大家都知道,mysql的二进制文件十分重要;
- 其一:主从复制,MySQL Replication在Master端开启binlog,Mster把它的二进制日志传递给slaves来达到master-slave数据一致的目的。
- 其二:数据备份,通过使用mysqlbinlog工具来使恢复数据。
一、开启binlog日志:
vi编辑打开mysql配置文件
# vim /etc/my.cnf
在[mysqld] 区块
设置/添加 log-bin=mysql-bin
确认是打开状态(值 mysql-bin 是日志的基本名或前缀名);
重启mysqld服务使配置生效
mysql.server restart
还需注意 生产环境单个日志文件大小设置为 256M,缓存设置1~4M。
之后登录服务器
# mysql -uroot -p
mysql> show variables like 'log_bin%';
+----------------------------------------+---------------------------------------+
| Variable_name | Value |
+----------------------------------------+---------------------------------------+
| log_bin | ON | ------> ON表示已经开启binlog日志
| log_bin_basename | /usr/local/mysql/data/mysql-bin |
| log_bin_index | /usr/local/mysql/data/mysql-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
+----------------------------------------+---------------------------------------+
还可以查看master状态,即最后(最新)一个binlog日志的编号名称,及其最后一个操作事件pos结束点(Position)值
mysql> show master status; #主从复制时的依据
建议设置 bingo_format = ROW
,这样日志记录的是DML语句更改前后的内容;由于binlog是二进制文件,普通文件查看器cat more vi等都无法打开,必须使用自带的 mysqlbinlog 命令查看
mysqlbinlog --base64-output=decode-rows -v --start-date="2017-08-12 15:00:19" --stop-date="2017-08-12 15:30:19" mysql-bin.000055
慢查询日志:当查询超过一定的时间没有返回结果的时候,才会记录到慢查询日志中。默认不开启。需要的时候手工开启。可以帮助找出执行慢的SQL语句
同样在etc/my.cnf添加
slow_query_log=off|on --是否开启慢查询日志
slow_query_log_file=filename --指定保存路径及文件名,默认为数据文件目录,hostname-slow.log
long_query_time=0.5 --指定多少秒返回查询的结果为慢查询
建议慢查询分析工具使用percona-toolkit中的pt-query-digest。