计算机网络/计算机科学与应用/系统/运维/开发

MySQL 二进制日志

MySQL日志分为4类:

错误日志:记录MySQL服务的启动、运行或停止时出现的问题

查询日志:记录建立客户端连接和执行语句

二进制日志:记录所有要更改数据

慢查询日志: 记录所有支线时间超过long_query_time的所有查询或不使用索引的查询


一、开启二进制日志

作用:记录MySQL数据库的变化,包含了所有更新数据或者已经潜在更新数据


1、启动和设置二进制日志

默认是开启,修改mysql配置文件启动和设置二进制日志

my.ini [mysqld] 组下面的二进制日志设置

   log-bin [=path/ [filename] ]
     expire_logs_days = 10
     maxbinlogsize = 1OOM

log-bin定义开启二进制日志

path表明日志文件所在的目录路径

filename指定了日志文件的名称,如文件的全名为filename.000001、filename.000002等

除之外,还有一个名称为filename.index的文件,

文件内容为所有日志的清单,

可以使用记事本打开该文件


expire_logs_days 定义mysql清除过期日志的时间,二进制日志自动删除前的保留天数,默认为0,表示没有自动删除


max_binlog_size定义了单个文件的大小限制,

如果二进制日志写入的内容大小超出给定值,

日志就会发生滚动(关闭当前文件,重新打开一个新的日志文件)

不能将该变量设置为大于1GB或小于4096B,默认值是1GB


my.ini 配置文件中 [mysqld]组下

 [mysqld]
     log-bin
     expire_logs_days = 10
     max_binlog_size = 100M

填加完成后,关闭并重新启动mysql服务进程,就可以打开二进制日志。

通过 show variables语句查询日志设置

mysql> SHOW VARIABLES LIKE 'log_%';
+----------------------------------------+----------------------------------------+
| Variable_name                          | Value                                  |
+----------------------------------------+----------------------------------------+
| log_bin                                | ON                                     |
| log_bin_basename                       | /usr/local/mysql/data/binlog           |
| log_bin_index                          | /usr/local/mysql/data/binlog.index     |
| log_bin_trust_function_creators        | OFF                                    |
| log_bin_use_v1_row_events              | OFF                                    |
| log_error                              | /usr/local/mysql/data/error.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.01 sec)


log_bin 为 ON 表示二进制日志已经打开

MySQL重新启动之后,在机器上的MySQL数据文件夹下面看到新生成的文件后缀为.000001和.index的两个文件,文件名称为默认主机名称


提示:数据库文件最好不要与日志文件放在同一个磁盘上,这样当数据库文件所在的磁盘发生故障时,可以使用日志文件恢复数据


二、查看二进制日志

mysql服务重新启动一次,以.000001为后缀的文件都会增加一个,并且后缀名加1递增

日志长度超过max_binlog_size 上限,默认是1GB,会创建新的日志文件


SHOW BINARY LOGS 查看二进制日志文件个数及文件名

mysql> SHOW BINARY LOGS;
+---------------+-----------+-----------+
| Log_name      | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000001 |      1171 | No        |
+---------------+-----------+-----------+
1 row in set (0.00 sec)

通过mysqlbinlog查看二进制日志:

> mysqlbinlog D:/mysql/log/binglog.000001


三、删除二进制日志

RESET MASTER 删除所有二进制日志文件

PURGE MASTER LOGS只删除部分二进制日志文件


1、使用RESET MASTER 语句删除所有二进制日志文件

RESET MASTER;


重新生成的二进制日志,新的日志文件扩展名重新从000001开始编号

2、使用PURGE MASTER LOGS 语句删除指定日志文件

     PURGE {MASTER | BINARY} LOGS TO 'log_name'
     PURGE {MASTER | BINARY} LOGS BEFORE 'date'

第1种方法指定文件名,执行该命令将删除文件名编号比指定文件名编号小的所有日志文件

第2种方法指定日期,执行该命令将删除指定日期以前的所有日志文件


四、二进制日志恢复数据库

数据意外丢失时,可以通过mysqlbinlog工具从指定的时间开始到现在

从二进制日志恢复数据,需要知道当前二进制日志文件的路径和文件名,一般可以从配置文件(my.cnf或者my.ini,文件名取决于MySQL服务器的操作系统)中找到路径

mysqlbinlog [option] filename |mysql –uuser -ppass

 option选项

 filename是日志文件名

比较重要的两对option参数是--start-date、与--stop-date、--start-position与--stop-position

--start-date与--stop-date可以指定恢复数据库的起始时间点和结束时间点

--start-position与--stop-position可以指定恢复数据的开始位置和结束位置


实例:使用mysqlbinlog恢复MySQL数据库到2022年1月30日15:27:48时的状态,执行命令及结果如下

mysqlbinlog --stop-date="2022-01-30 15:27:48" D:\mysql\log\binlog\ X0NHUNO7YDZVSSI-bin.000003
     | mysql –uuser –ppass

五、暂时停止二进制日志功能

语法:

 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)


再长的路,一步步也能走完,再短的路,不迈开双脚也无法到达

评论

image

43 2023-09-25 05:09:10

MySQL3大日志 https://zhuanlan.zhihu.com/p/609972086

回复 删除

^