道者编程

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.000002
 mysqlbinlog还有很多种用法,可以根据时间等精确查找查看日志。

注意查看正在写入的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格式利用了两种模式的优点,避开了它们的缺点。


最新评论:
我要评论:

看不清楚