一、mysql bin-log简介
1.1 什么是bin-log?
MySQL bin-log是二进制日志文件,用于记录MySQL数据库中所有更改操作(如插入、更新、删除等)的详细信息。bin-log文件由MySQL服务器自动创建和维护,并记录了每个更改操作的时间戳、执行的SQL语句等信息。这些信息可以被用于备份和恢复数据、实现主从复制等。bin-log文件通常以二进制格式存储,但也可以使用mysqlbinlog工具将其转换为可读的文本格式。
1.2 什么情况下可以用bin-log导出数据?
可以在以下情况下使用MySQL bin-log导出数据:
- 当你需要恢复数据时,可以通过binlog文件来实现。例如,如果数据库出现故障或数据丢失,可以使用binlog文件来恢复数据。
- 当你想要将指定位置的binlog文件中的内容导出时,可以使用mysqlbinlog工具。具体操作命令为:
mysqlbinlog --start-position=xxxxx /path/to/binlog/file > binlog.txt
。其中,xxxxx为要导出的binlog起始位置,/path/to/binlog/file为binlog文件的完整路径,binlog.txt为导出的文件名。 - 在进行主从复制的过程中,从服务器会读取主服务器上的bin-log文件,并将其中的数据写入到自己的数据库中。
二、mysql bin-log导出及相关指令
2.1、查询 BINLOG 是否开启
show VARIABLES like 'binlog_%';
2.2、查询 BINLOG 格式
show VARIABLES like 'binlog_format';
2.3、MySQL的binlog格式区别
MySQL的binlog日志有三种格式,分别为Statement、Row和Mixed。
- Statement格式:在此模式下,每一条会修改数据的SQL语句都会被记录在binlog中。这种格式的优点在于不需要记录每一行的变化,因此减少了binlog日志量,节约了IO,从而提高了性能。然而,由于SQL的执行是有上下文的,所以在保存的时候需要保存相关的信息。此外,一些使用了函数之类的语句无法被记录复制,这可能会导致主从数据库之间存在数据不一致的问题。
- Row格式:与Statement格式不同,Row格式记录的是被修改的每一行数据的变化。这意味着当从主库复制到从库时,从库会重新执行相同的更新操作。显然,这种模式能够保证主从数据库的数据一致性,但可能会增加binlog日志量和IO消耗。
- Mixed格式:此模式是Statement和Row两种格式的结合体。在某些情况下,MySQL会根据具体的SQL语句选择使用Statement或Row格式进行记录。
2.4、查询 BINLOG 位置
show VARIABLES like 'datadir';
2.5、查看 master 正在写入的 BINLOG 信息
show master status;
2.6、查询当前数据库中 BINLOG 名称及大小
show binary logs;
2.7、开始一个新的binlog
2.8、cmd进入mysql安装目录bin文件夹,执行导出
mysqlbinlog --no-defaults --base64-output=decode-rows -v --start-datetime="2022-12-29 00:00:00" --stop-datetime="2023-01-08 00:00:00" /bin-log日志位置/mysql-bin.000047 -r /tmp/binlog-export12-30.sql
注:
–no-defaults 可以解决utf8mb4编码警告问题;
–base64-output可以将日志中base64文本解码;