一、日志简介
1、启动和设置二进制日志
2、查看二进制日志
3、删除二进制日志
4、使用二进制日志恢复数据库
5、暂时停止二进制日志功能
二、二进制日志
1、启动和设置错误日志
2、查看错误日志
3、删除错误日志
三、错误日志
1、启动和设置错误日志
2、查看错误日志
3、删除错误日志
四、通用查询日志
1、启动通用查询日志
2、查看通用查询日志
3、删除通用查询日志
五、慢查询日志
1、启动和设置慢查询日志
2、查看慢查询日志
3、删除慢查询日志
六、MySQL 8.0 的新特性——日志分类更详细
一、日志简介
MySQL 日志主要分为四类:
- 错误日志:记录MySQL 服务的启动、运行或停止 MySQL 服务器出现的问题。
- 查询日志:记录建立的客户端连接和执行的语句。
- 二进制日志:记录所有更改数据语句,可以用于数据复制。
- 慢查询日志:记录所有执行时间查过 long_query_time 的所有查询或不使用索引的查询。
刷新日志语句:
flush logs
或者
mysqladmin flush-logs
或者
mysqladmin refresh
如果正使用过 mysql 复制功能,在复制服务器上可以维护更多日志文件,这种日志称为阶梯日志。
二、二进制日志
使用二进制日志的主要目的是最大可能的恢复数据库。
1、启动和设置二进制日志
默认情况下,二进制日志是开启的,可以通过修改配置文件来启动和设置二进制日志:/etc/my.cnf
log-bin [ =path/[ filename ] ]
案例1:设置二进制日志
[mysqld]
log-bin
expire_logs_day = 10
max_binlog_size = 100M
- log-bin 定义开启二进制日志。
- paht 表明日志文件所在的目录路径,默认存放:/var/lib/mysql/ 下。
- filename 指定了日志文件名称,如果文件的全名为 filename.000001、filename.000002 等,除了上述文件之外,还有一个名称为filename.index 的文件,文件内容为所有日志的清单,可以使用记事本打开文件,比如 /var/lib/mysql/*-bin.0000001。
- expire_logs_days 定义了 MySQL 清除过期日志的时间,即二进制日志自动删除的天数。默认值为0,表示“没有自动删除”。当MySQL启动或刷新二进制日志时可能删除该文件。
- max_binlog_size 定义了单个文件的的大小限制,如果二进制日志写入的内容大小超出给定值,日志就会发生滚动(关闭当前文件,重新打开一个新的日志文件)。不能将该变量设置为大于1GB或者小于4096B,默认是1GB。
如果正在使用大的事务,二进制日志大小还可能超过 max_binlog_size 定义的大小。
案例二:使用show variables 语句查询日志设置
mysql> show variables like 'log_%';
+----------------------------------------+----------------------------------------+
| Variable_name | Value |
+----------------------------------------+----------------------------------------+
| log_bin | ON |
| log_bin_basename | /var/lib/mysql/192-bin |
| log_bin_index | /var/lib/mysql/192-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| log_error | /var/log/mysqld.log |
| log_error_services | log_filter_internal; log_sink_internal |
| log_error_suppression_list | |
| log_error_verbosity | 2 |
| log_output | FILE |
| log_queries_not_using_indexes | OFF |
| log_raw | OFF |
| log_replica_updates | ON |
| log_slave_updates | ON |
| log_slow_admin_statements | OFF |
| log_slow_extra | OFF |
| log_slow_replica_statements | OFF |
| log_slow_slave_statements | OFF |
| log_statements_unsafe_for_binlog | ON |
| log_throttle_queries_not_using_indexes | 0 |
| log_timestamps | UTC |
+----------------------------------------+----------------------------------------+
21 rows in set (0.00 sec)
- log_bin 为 ON 表明二进制文件已经打开
2、查看二进制日志
1)查看当前的二进制日志文件个数以及其文件名。
show binary logs;
2)查看二进制日志内容
[root@192 mysql]# mysqlbinlog 192-bin.000003 | more
3)案例
(1)查看二进制文件个数以及其名称
mysql> show binary logs;
+----------------+-----------+-----------+
| Log_name | File_size | Encrypted |
+----------------+-----------+-----------+
| 192-bin.000001 | 179 | No |
| 192-bin.000002 | 179 | No |
| 192-bin.000003 | 179 | No |
| 192-bin.000004 | 179 | No |
| 192-bin.000005 | 2881 | No |
| 192-bin.000006 | 156 | No |
+----------------+-----------+-----------+
6 rows in set (0.01 sec)
(2)查看二进制日志内容
[root@192 mysql]# mysqlbinlog 192-bin.000003 | more
# The proper term is pseudo_replica_mode, but we use this compatibility alias
# to make the statement usable on server versions 8.0.24 and older.
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#230106 3:13:35 server id 1 end_log_pos 125 CRC32 0xa2add542 Start: binlog v 4, server v 8.0.27 created 230106 3:13:35 at startup
ROLLBACK/*!*/;
BINLOG '
L9i3Yw8BAAAAeQAAAH0AAAAAAAQAOC4wLjI3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAv2LdjEwANAAgAAAAABAAEAAAAYQAEGggAAAAICAgCAAAACgoKKioAEjQA
CigBQtWtog==
'/*!*/;
# at 125
#230106 3:13:35 server id 1 end_log_pos 156 CRC32 0x4632a60c Previous-GTIDs
# [empty]
# at 156
#230106 3:13:36 server id 1 end_log_pos 179 CRC32 0xa4e1b590 Stop
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
3、删除二进制日志
除了配置自动删除二进制文件外,还有手动删除二进制文件。
1)使用 reset master 语句删除所有二进制日志文件
reset master;
执行玩该语句后,所有二进制日志将被删除,mysql 会重新创建二进制日志,新的日志文件扩展名将会从 000001 开始重新生成。
2)使用purge master logs 语句删除指定日志文件
purge { master | binary } logs to 'log_name'
purge { master | binary } logs before 'date'
- 第一种删除方式,将会删除文件名编号比指定文件名编号小的所有日志文件。
- 第二种删除方式,将会删除指定日期以前的所有日志文件。
案例1:删除000003 之前的文件
mysql> purge master logs to "192-bin.000003" ;
Query OK, 0 rows affected (0.01 sec)
案例2:删除 20190130号之前的文件
mysql> purge master logs to "20190130";
4、使用二进制日志恢复数据库
使用 mysqlbinlog 恢复数据的语法:
,mysqlbinlog [ option ] filename | mysql -uuser -ppass
- option 是一些可选的选项,比如 --start-date、–stop-date 和 --start-position、–stop-position。其中 --start-date、–stop-date 可以指定恢复数据库的起始时间点和结束时间点。 --start-position、–stop-position 可以指定恢复数据的开始位置和结束位置。
- filename 是日志文件名。
案例:恢复mysql 数据库到 2019 年1月30日15:27:48时的状态:
[root@192 mysql]# mysqlbinlog --start-date="2019-01-30 15:27:48 " 192-bin.000004 | mysql -uuser -ppass
5、暂时停止二进制日志功能
set sql_log_bin 可以暂时停止或启动二进制日志
set sql_log_bin = { 0 | 1 }
案例一:暂停记录二进制日志:
mysql> set sql_log_bin = 0 ;
Query OK, 0 rows affected (0.00 sec)
案例二:恢复记录二进制日志:
mysql> set sql_log_bin = 1;
Query OK, 0 rows affected (0.00 sec)
三、错误日志
1、启动和设置错误日志
可以通过修改配置文件来启动和设置二进制日志:/etc/my.cnf
[ mysqld]
log-error=[ path / [ file_name ] ]
- path 为日志文件在的目录路径。
- file_name 为日志文件名。
- 默认存储位置为/var/log/ 下,默认名字为 *.err 。
2、查看错误日志
使用 show variables 查看错误日志的存储路径,用记事本打开可以查看内容
show variables like 'log_error';
案例:查看错误日志
mysql> show variables like 'log_error';
+---------------+---------------------+
| Variable_name | Value |
+---------------+---------------------+
| log_error | /var/log/mysqld.log |
+---------------+---------------------+
1 row in set (0.00 sec)
3、删除错误日志
MySQL 的错误日志是以文件的形式存储在文件系统中,可以直接删除。
对于 MySQL 5.5.7 以前的版本 ,flush logs 可以将错误日志文件重命名为 filename.err_old,并创建新的日志文件。但是从 MySQL 5.5.7 开始,flush logs 只是重新打开日志文件,并不左日志备份和创建操作。如果日志不存在,MySQL 启动或者执行 flush logs 时会创建新的日志文件。
在运行状态下删除错误日志文件后,MySQL 并不会自动创建日志文件。flush logs 在重新加载日志的时候,如果文件不存在,则会自动创建。所以在删除错误日志之后,如果需要创建日志文件,需要在服务器端指定以下命令:
mysqladmin -u user -p flush-logs
或者在客户端执行:
mysql> flush logs;
四、通用查询日志
通用查询日志记录了,所有用户操作,包括启动和关闭服务、执行查询和更新语句等。
1、启动通用查询日志
1)查看当前通用日志状态
mysql> show variables like '%general%';
+------------------+------------------------+
| Variable_name | Value |
+------------------+------------------------+
| general_log | OFF |
| general_log_file | /var/lib/mysql/192.log |
+------------------+------------------------+
2 rows in set (0.00 sec)
2)开启通用查询日志
mysql> set @@global.general_log=1;
Query OK, 0 rows affected (0.01 sec)
3)查看通用查询日志状态
mysql> show variables like '%general%';
+------------------+------------------------+
| Variable_name | Value |
+------------------+------------------------+
| general_log | ON |
| general_log_file | /var/lib/mysql/192.log |
+------------------+------------------------+
2 rows in set (0.00 sec)
4)关闭通用查询日志状态
mysql> set @@global.general_log=0;
Query OK, 0 rows affected (0.00 sec)
2、查看通用查询日志
可以用记事本或者vim打开,位置默认/var/lib/mysql/192.log
3、删除通用查询日志
1)直接用rm删除日志
2)flush-logs 刷新日志
五、慢查询日志
1、启动和设置慢查询日志
可以通过修改配置文件来启动和设置二进制日志:/etc/my.cnf
[ mysqld ]
log-slow-queries [ =path / [ filename ] ]
log_query_time = n
- path 为日志文件所在的目录
- filename 为日志文件名。如果不指定目录和文件名称,默认存储在数据目录中,文件名为 hostname-slow.log
- n 是秒数,默认10秒单位。
2、查看慢查询日志
可以用vim打开
3、删除慢查询日志
1)直接用rm删除日志
2)flush-logs 刷新日志