目录
binlog 就是binary log,二进制日志文件,这个文件记录了MySQL所有的DML操作。通过binlog日志我们可以做数据恢复,增量备份,主主复制和主从复制等等。
vi /etc/my.cnf
[mysqld]下增加如下配置
-
- log-bin=mysql-bin
- server-id=1
说明:log-bin指定了binlog的前缀名,server-id必须唯一且不同于其他MySQL服务器
centos重启示例
systemctl restart mysqld
往数据库中的某个表新增一条记录或者创建表都会往biglog文件中写入内容
- cd /var/lib/mysql/mysql-bin
- ll -la
可以看到会有类似mysql-bin.000001的文件生成
- drwxr-x--x. 6 mysql mysql 4096 3月 13 22:44 .
- drwxr-xr-x. 27 root root 4096 8月 29 2023 ..
- -rw-r-----. 1 mysql mysql 56 8月 29 2023 auto.cnf
- -rw-------. 1 mysql mysql 1680 8月 29 2023 ca-key.pem
- -rw-r--r--. 1 mysql mysql 1112 8月 29 2023 ca.pem
- -rw-r--r--. 1 mysql mysql 1112 8月 29 2023 client-cert.pem
- -rw-------. 1 mysql mysql 1680 8月 29 2023 client-key.pem
- -rw-r-----. 1 mysql mysql 283 3月 13 22:40 ib_buffer_pool
- -rw-r-----. 1 mysql mysql 12582912 3月 13 22:42 ibdata1
- -rw-r-----. 1 mysql mysql 50331648 3月 13 22:42 ib_logfile0
- -rw-r-----. 1 mysql mysql 50331648 8月 29 2023 ib_logfile1
- -rw-r-----. 1 mysql mysql 12582912 3月 13 22:42 ibtmp1
- drwxr-x---. 2 mysql mysql 4096 8月 29 2023 mysql
- -rw-r-----. 1 mysql mysql 962 3月 13 22:42 mysql-bin.000001
- -rw-r-----. 1 mysql mysql 19 3月 13 22:40 mysql-bin.index
- srwxrwxrwx. 1 mysql mysql 0 3月 13 22:40 mysql.sock
- -rw-------. 1 mysql mysql 5 3月 13 22:40 mysql.sock.lock
- drwxr-x---. 2 mysql mysql 8192 8月 29 2023 performance_schema
- -rw-------. 1 mysql mysql 1680 8月 29 2023 private_key.pem
- -rw-r--r--. 1 mysql mysql 452 8月 29 2023 public_key.pem
- -rw-r--r--. 1 mysql mysql 1112 8月 29 2023 server-cert.pem
- -rw-------. 1 mysql mysql 1680 8月 29 2023 server-key.pem
- drwxr-x---. 2 mysql mysql 8192 8月 29 2023 sys
- drwxr-x---. 2 mysql mysql 58 3月 13 22:41 test
直接查看binlog可以看到有很多乱码
正确查看方式是使用命令查看
mysqlbinlog -v /var/lib/mysql/mysql-bin.000001
也可以把内容写入到文件中
mysqlbinlog -v /var/lib/mysql/mysql-bin.000001 > /opt/mysql-bin-000001.txt
示例中将binlog写入了文件 /opt/mysql-bin-000001.txt中
此时,查看文件/opt/mysql-bin-000001.txt就没有乱码了,但是和执行sql还是有差异的
- #240313 22:41:55 server id 1 end_log_pos 667 CRC32 0x5b0f29d8 Query thread_id=3 exec_time=0 error_code=0
- use `test`/*!*/;
- SET TIMESTAMP=1710340915/*!*/;
- CREATE TABLE `test`.`t_table` (^M
- `id` int(0) NOT NULL,^M
- `name` varchar(255) NULL,^M
- `address` varchar(255) NULL,^M
- `create_time` datetime(0) NULL,^M
- `update_time` datetime(0) NULL,^M
- PRIMARY KEY (`id`)^M
- )
说明,第一行是时间戳,240313表示2024年3月13日
22:41:55表示具体时间
下面是创建表语句
- #240313 22:42:19 server id 1 end_log_pos 931 CRC32 0x038eed84 Write_rows: table id 101 flags: STMT_END_F
-
- BINLOG '
- S7vxZRMBAAAAPAAAAGADAAAAAGUAAAAAAAEABHRlc3QAB3RfdGFibGUABQMPDxISBv8A/wAAAB7D
- vV1G
- S7vxZR4BAAAAQwAAAKMDAAAAAGUAAAAAAAEAAgAF/+ABAAAACHpoYW5nc2FuB2JlaWppbmeZsttq
- jpmy22qRhO2OAw==
- '/*!*/;
- ### INSERT INTO `test`.`t_table`
- ### SET
- ### @1=1
- ### @2='zhangsan'
- ### @3='beijing'
- ### @4='2024-03-13 22:42:14'
- ### @5='2024-03-13 22:42:17'
- # at 931
- #240313 22:42:19 server id 1 end_log_pos 962 CRC32 0xb2c0a6e7 Xid = 62
- COMMIT/*!*/;
- #240313 23:04:34 server id 1 end_log_pos 1558 CRC32 0xfbe11994 Update_rows: table id 102 flags: STMT_END_F
-
- BINLOG '
- gsDxZRMBAAAAPAAAAKUFAAAAAGYAAAAAAAEABHRlc3QAB3RfdGFibGUABQMPDxISBv8A/wAAAB6l
- yfEH
- gsDxZR8BAAAAcQAAABYGAAAAAGYAAAAAAAEAAgAF///gAQAAAAh6aGFuZ3NhbgdiZWlqaW5nmbLb
- ao6ZsttqkeABAAAADHpoYW5nc2FuLTg4OBBiZWlqaW5nLWNoYW95YW5nmbLbao6ZsttxIpQZ4fs=
- '/*!*/;
- ### UPDATE `test`.`t_table`
- ### WHERE
- ### @1=1
- ### @2='zhangsan'
- ### @3='beijing'
- ### @4='2024-03-13 22:42:14'
- ### @5='2024-03-13 22:42:17'
- ### SET
- ### @1=1
- ### @2='zhangsan-888'
- ### @3='beijing-chaoyang'
- ### @4='2024-03-13 22:42:14'
- ### @5='2024-03-13 23:04:34'
特别说明:where与set之间都是原始值,set后面都是更新后的值