binary log 简介
二进制日志包含描述数据库更改的“事件”,例如表创建操作或表数据更改。它还包含可能已更改的语句的事件(例如:DELETE不匹配任何行),除非使用基于行的日志记录。二进制日志还包含有关每条语句使用更新数据多长时间的信息。二进制日志有两个重要用途:
环境准备
- Ubuntu 18.04.2 LTS
- mysql 5.7.28
更改配置
添加如下配置 开启binlog
[mysqld]
...
server-id=123123
log-bin=/var/lib/mysql/mysql-bin # 日志文件位置及前缀
binlog-format=ROW # 日志格式 [MIXED|STATEMENT|ROW]
操作数据
create database test_db
create database test2_db
CREATE TABLE `cms_help` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`category_id` bigint(20) DEFAULT NULL,
`icon` varchar(500) DEFAULT NULL,
`title` varchar(100) DEFAULT NULL,
`show_status` int(1) DEFAULT NULL,
`create_time` datetime DEFAULT NULL,
`read_count` int(1) DEFAULT NULL,
`content` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='帮助表';
INSERT INTO cms_help(category_id) VALUES (111),(222),(333),(444);
SELECT * FROM cms_help;
DELETE FROM cms_help WHERE id = 2;
DELETE FROM cms_help WHERE id = 2;
UPDATE cms_help SET show_status = 1 WHERE id = 3;
UPDATE cms_help SET show_status = 1 WHERE id = 2;
ALTER TABLE `cms_help` CHANGE COLUMN `title` `title_t` varchar(100);
drop table cms_help;
查看binlog信息
show binary logs;
查看binlog
我们采用官方提供的mysqlbinlog 对文件进行查看
mysqlbinlog /var/lib/mysql/mysql-bin.000001 --base64-output=decode-rows -vv --skip-gtids=true | grep -E "UPDATE cms_help|SELECT * FROM|INSERT INTO cms_help|DELETE FROM cms_help|CREATE TABLE \`cms_help\`|alter"
--base64-output=decode-rows : 声明二级制文件格式化格式 后面加上–verbose可将事件解码为带注释的伪SQL语句--verbose : -v 重组行事件之外的伪SQL语句, -vv重组包括行事件和statement事件的伪sql语句--skip-gtids=true : 不保留全局事务标识符,而是让服务器像执行新事务一样执行事务。
格式化查看结果如下:
由图中展示可知,binary log记录了对表的增删改以及数据行的增删改,且在删改行无匹配行时不进行记录,改表时无匹配行时有记录。
除此之外还有很多需要注意的点,比如--binlog-do-db=db_name 设置记录指定数据库时候的跨库记录问题,mysqlbinlog --database 指定数据库打印,是仅适用于没有基于行的事件的BINLOG等。
参考链接:https://dev.mysql.com/doc/refman/5.7/en/replication-options-binary-log.html
|