MYSQL日志
我这里把MYSQL分三种日志,分别介绍。
一:MYSQL普通日志,普通日志包错误日志和普通查询日志。
1:错误日志:包括MYSQL运行期间出现的警告、错误信息,以及每次启动、停止的详细信息。
2:普通查询日志:普通查询日志记录了MYSQL所有的操作,包括增删查改等等。
3:开启方式,修改MYSQL配置文件my.cnf,添加以下两行分别是错误日志,和普通查询日志。
log-error=/usr/local/mysql/log/error.log //普通查询日志,生产环境不要开启,这个就是general_log日志 general_log = on general_log_file = /var/log/mysql/general.log
注意:一般情况下,普通查询日志不建议开启,大量的日志操作会占用磁盘I/O,影响性能。
普通查询日志一般通过手动设置来调试,下面是控制台设置方法:
show variables like 'general_log'; -- 查看日志是否开启 show variables like 'log_output'; -- 看看日志输出类型 table或file show variables like 'general_log_file'; -- 看看日志文件保存位置 set global general_log_file='tmp/general.lg'; -- 设置日志文件保存位置 set global general_log=on; -- 开启日志功能 set global log_output='table'; -- 设置输出类型为 table 或者为file //如果设置 table,那么日志保存在general_log表中,可以通过此表查看 set global general_log=off; --调试完后一定记得关闭,切记
二:慢日志:
1:在MYSQL设置一个SQL运行时间,如果SQL运行超过了设定时间,SQL就会保存下来,这就叫慢日志,慢日志在性能优化中很关键,可以很方便的检测SQL使用是否合理。
2:开启方式,修改MYSQL配置文件my.cnf,添加即可
[mysqld] slow_query_log = ON long_query_time = 2 #超过2秒的sql保存慢日志 slow_query_log_file = /tmp/mysql-slow.log #慢日志语句
三:binlog日志(二进制日志)
1:二进制日志是mysql非常重要的日志,不仅记录了MYSQL操作的全部过程,而且还能使用二进制日志恢复数据,以及主从同步都依赖二进制日志。
mysql> show variables like 'log_bin'; #查询是否启用了日志 mysql> show master status; #查看当前使用的日志: mysql> show master logs; #显示所有日志 mysql> show variables like '%datadir%'; #查看binlog位置 mysql> flush logs; #刷新binlog日志,刷新后生成新的binlog日志文件2:启用binlog日志:修改my.cnf
MYSQL5.7以下的版本:
[mysqld] log-bin=mysql-bin log-bin=my-bin #默认在data目录下,也可以修改bin-log
如果要修改log-bin目录,必须要mysql权限。假设要放在/var/log/mysql下;
mkdir /var/log/mysql #首先新建binlog目录 chown mysql /var/log/mysql #权限
log-bin=/var/log/mysql/my-bin
MYSQL5.7以及5.7以上的版本还需要指定一个唯一值
server-id=123454
3:查看binlog日志
(1):使用binlog命令查看
mysql> show binlog events in 'mysql-bin.000002';(2):使用mysql工具 mysqlbinlog ,这个工具在mysql/bin目录下
$ mysqlbinlog -no defaults mysql-bin.000002mysqlbinlog还有很多种用法,可以根据时间等精确查找查看日志。
注意查看正在写入的binlog日志,建议用show binlog,不要使用mysqlbinlog
4:安全删除binlog日志,生产环境中如果不定期清理,日志会变的非常庞大,甚至撑爆磁盘。
a:配置文件设置
[mysqld] expire_logs_days=5 #保留5天的日志数据
b:清空所有binlog
mysql> reset master;
c:purge删除日志
mysql> purge master logs to 'my-bin.000003'; //删除指定日志:my-bin.000003之前的日志,不删除my-bin.000003 mysql> purge master logs before '2017-10-18 00:00:00'; # 将 binlog 删除指定时间点之前的binlog日志
四:Binlog的格式(转自互联网)
Binlog的日志格式有3种,分别为Statement、Row和Mixed,可在启动时通过参数--binlog-format进行设置。
Statement:日志中记录的是语句,每一条对数据修改的SQL语句都会记录在日志中,通过mysqlbinlog工具,可以看到每条语句的内容。主从复制时,从库将日志解析为原文本,并在从库重新执行一次。优点是日志记录清晰易读、日志量少,对I/O影响小;缺点是在某些情况下,从库复制会出错;比如now() rand()等函数时,会造成主从不一致的情况。
ROW:将每一行的变更记录到日志中,而不是记录SQL语句,优点是会记录每一行数据的变化细节,不会出现某些情况下无法复制的情况;缺点是日志量大,对I/O影响较大;
MIXED:组合了Statement和Row两种日志,默认是statement,但在一些特殊情况下采用Row来记录,Mixed格式利用了两种模式的优点,避开了它们的缺点。