mysql的日志类型及作用


  当服务起不来或者报错的时候,我们第一时间想到的就是日志,日志这个东西记载了许多重要的信息,有利于我们排除故障。当然,mysql也有日志。

  先来说说,mysql日志的作用,当数据库遭到意外损坏,服务起不来等等,可以通过日志文件来拍错。

还可以利用日志文件来进行数据恢复。


一、日志的分类

1、错误日志:记录了mysql服务的启动,关闭和运行时发生的错误;

2、通用查询日志:记录用户的所有操作,包括启动、关闭服务,插入、查询等语句;

3、二进制日志:以二进制的形式记录了数据库中的操作,但不记录查询语句;

4、慢日志:记录了mysql 所有查询超时的语句


二、日志设置
1、除了二进制日志,其他都是文本文件
2、日志文件通常存储在Mysql数据目录下
3、默认只启动了错误日志功能,其他需要手工启动
4、但启动日志功能会降低Mysql的执行速度,因为一条操作写进日志中是要花时间的

  

二进制日志

  以二进制文件的形式记录了数据库的操作,但是不记录查询语句,也叫变更日志

  启动与设置二进制日志,在mysql配置文件中添加

[root@localhost data]# cat /etc/my.cnf
log-bin = /data/mysql-bin


启动与设置二进制日志:在Mysql的配置文件中,log-bin=DIR/filename
DIR是存放二进制日志的目录;
每启动一次Mysql,该目录下就会生成一个filename.00000x的文件;
目录下还有一个filename.index的文件,用于存储所有二进制文件清单;
如果我们没有设置DIR和filename,则默认在数据目录下以hostname-bin.00000x命名


去到/data目录下查看是否有文件生成

[root@localhost ~]# cd /data/

[root@localhost data]# ls

aria_log.00000001  ibdata1      ib_logfile1  mysql-bin.000001  performance_schema  xhk

aria_log_control   ib_logfile0  mysql        mysql-bin.index   test


临时停止与启动二进制日志

MariaDB [(none)]>  set sql_log_bin=0; 停止
MariaDB [(none)]>  set sql_log_bin=1; 启动

注意:二进制日志文件与数据库数据文件最好不要放在同一块硬盘上,如果存放数据文件的硬盘坏了,可以用另一块硬盘的二进制日志来恢复数据


查看二进制日志

[root@localhost data]# mysqlbinlog mysql-bin.000001


删除二进制日志

删除所有

MariaDB [(none)]> reset master;


删除00004之前的所有

MariaDB [(none)]> purge master logs to 'mysql-bin.000004';


删除指定日期时间之前的所有

MariaDB [(none)]> purge master logs to '2016-08-10 15:00:00';


使用二进制日志还原数据库

[root@localhost data]# mysqlbinlog mysql-bin.000001 | mysql -u root -p

[root@localhost data]# mysqlbinlog mysql-bin.000002 | mysql -u root -p

这条命令可以理解为:使用mysqlbinlog读取二进制日志文件然后使用mysql命令还原到数据库中

注意还原时必须是编号小的先还原


还可以制定你想恢复的时间点

[root@localhost data]# mysqlbinlog --start-position="213" sstop-position="456" mysql-bin.000001 | mysql -u root -p

数值为二进制文件中的pos号


========================================================================

错误日志

主要用于记录Mysql服务的开启、关闭和错误信息,若服务启动不成功第一件事应该就是去看这个错误日志

错误日志是默认开启的,且错误日志无法被关闭

设置错误日志:在配置文件中,log-error=DIR/filename

[root@localhost ~]# cat /etc/my.cnf
log-error = /data/mysql-error.log


======================================================================

通用查询日志

用来记录用户的所有操作:启动和关闭mysql、更新语句、查询语句

启用和设置通用查询日志:配置文件中,log=DIR/filename


============================================================================

慢查询日志

记录执行时间超过指定时间的执行语句

启动和设置慢查询日志:在配置文件中

log-slow-queries=DIR/filename

long_query_time=n   #设置时间为n秒,默认为10s


删除日志

mysqladmin -u root -p flush-logs