赞
踩
MySQL 日志主要分为四类:
刷新日志语句:
flush logs
或者
mysqladmin flush-logs
或者
mysqladmin refresh
如果正使用过 mysql 复制功能,在复制服务器上可以维护更多日志文件,这种日志称为阶梯日志。
使用二进制日志的主要目的是最大可能的恢复数据库。
默认情况下,二进制日志是开启的,可以通过修改配置文件来启动和设置二进制日志:/etc/my.cnf
log-bin [ =path/[ filename ] ]
案例1:设置二进制日志
[mysqld]
log-bin
expire_logs_day = 10
max_binlog_size = 100M
如果正在使用大的事务,二进制日志大小还可能超过 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)
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*/;
除了配置自动删除二进制文件外,还有手动删除二进制文件。
reset master;
执行玩该语句后,所有二进制日志将被删除,mysql 会重新创建二进制日志,新的日志文件扩展名将会从 000001 开始重新生成。
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";
使用 mysqlbinlog 恢复数据的语法:
,mysqlbinlog [ option ] filename | mysql -uuser -ppass
案例:恢复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
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)
可以通过修改配置文件来启动和设置二进制日志:/etc/my.cnf
[ mysqld]
log-error=[ path / [ file_name ] ]
使用 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)
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)查看当前通用日志状态
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)
可以用记事本或者vim打开,位置默认/var/lib/mysql/192.log
1)直接用rm删除日志
2)flush-logs 刷新日志
可以通过修改配置文件来启动和设置二进制日志:/etc/my.cnf
[ mysqld ]
log-slow-queries [ =path / [ filename ] ]
log_query_time = n
可以用vim打开
1)直接用rm删除日志
2)flush-logs 刷新日志
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。