mysql/数据库日志管理.md

3.0 KiB
Raw Permalink Blame History

数据库日志管理


一:日志管理

1. 日志分类

  • error log错误日志启动停止关闭失败报错。rpm安装日志位置 /var/log/mysqld.log
  • 通用查询日志:所有的查询都记下来
  • bin log二进制日志实现备份增量备份。只记录改变数据除了select都记
  • relay log中继日志读取主服务器的binlog在本地回放。保持一致
  • slow log慢查询日志指导调优定义某一个查询语句定义超时时间通过日志提供调优建议给开发人员
  • DDL log 定义语句的日志

2. Error log

log-error=/var/log/mysqld.log

3. Binary Log

产生binlog日志修改配置文件,添加如下配置

log-bin=/var/log/mysql-bin/slave2
server-id=2

[root@mysql ~]# mkdir /var/log/mysql-bin
[root@mysql ~]# chown mysql.mysql /var/log/mysql-bin/
[root@mysql ~]# systemctl restart mysqld

注:

1. 重启mysqld 会截断旧日志产生新的日志
2. 刷新日志会截断旧日志产生新的日志
    mysql> flush logs 
3. 删除所有binlog(禁用)
    mysql> reset master
4. 删除部分日志
    mysql> PURGE BINARY LOGS TO 'mysql-bin.010';
    mysql> PURGE BINARY LOGS BEFORE '2016-04-02 22:46:26';
5. 暂停binlog日志功能(仅对当前会话生效)
    mysql> SET SQL_LOG_BIN=0;
    mysql> SET SQL_LOG_BIN=1;

读取binlog日志

mysqlbinlog mysql.000001

按datetime读取

# mysqlbinlog mysql.000001 --start-datetime="2018-12-05 10:02:56"
# mysqlbinlog mysql.000001 --stop-datetime="2018-12-05 11:02:54"
# mysqlbinlog mysql.000001 --start-datetime="2018-12-05 10:02:56" --stop-datetime="2018-12-05 11:02:54" 

按position读取

# mysqlbinlog mysql.000001 --start-position=260
# mysqlbinlog mysql.000001 --stop-position=260
# mysqlbinlog mysql.000001 --start-position=260 --stop-position=930

4. Slow Query Log

开启慢查询日志:

[root@mysql ~]# vim /etc/my.cnf
slow_query_log=1
slow_query_log_file=/var/log/mysql-slow/slow.log
long_query_time=3   设置慢查询超时时间  单位是:秒

创建对应目录:

[root@mysql ~]# mkdir /var/log/mysql-slow
[root@mysql ~]# chown mysql.mysql /var/log/mysql-slow/

重启服务:

[root@mysql ~]# systemctl restart mysqld

验证:

[root@mysql ~]# mysql -uroot -p'Wdjsi@313'
mysql> select sleep(6);
+----------+
| sleep(6) |
+----------+
|        0 |
+----------+
1 row in set (6.00 sec)

mysql> exit
Bye

[root@mysql ~]# cat /var/log/mysql-slow/slow.log 
/usr/sbin/mysqld, Version: 5.7.30-log (MySQL Community Server (GPL)). started with:
Tcp port: 0  Unix socket: /var/lib/mysql/mysql.sock
Time                 Id Command    Argument
# Time: 2025-03-11T11:20:18.734540Z
# User@Host: root[root] @ localhost []  Id:     2
# Query_time: 6.001048  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0
SET timestamp=1741692018;
select sleep(6);