参考文章:
https://blog.csdn.net/weixin_43944305/article/details/108620849
binlog常用命令
-- 查看binlog是否开启
SHOW VARIABLES LIKE 'log_bin';
-- 查看binlog的模式
show global variables like "binlog%";
-- 查看所有binlog日志列表
show master logs;
-- 查看最新一个binlog日志的编号名称,及其最后一个操作事件结束点
show master status;
-- 刷新log日志,立刻产生一个新编号的binlog日志文件,跟重启一个效果
flush logs;
-- 清空所有binlog日志
reset master;
-- 删除mysql-bin.010之前所有日志
PURGE MASTER LOGS TO 'mysql-bin.010';
-- 删除2003-04-02 22:46:26之前产生的所有日志
PURGE MASTER LOGS BEFORE '2003-04-02 22:46:26';
开启binlog
打开my.cnf配置文件,添加如下配置,修改完成后,重启MySQL即可
#此一行等同于上面log_bin三行,这里可以写绝对路径,也可以直接写mysql-bin(后者默认就是在/var/lib/mysql目录下)
log-bin=/var/lib/mysql/mysql-bin
#配置serverid
server-id=1
#设置日志三种格式:STATEMENT、ROW、MIXED 。
binlog_format = mixed
#设置binlog清理时间
expire_logs_days = 7
#binlog每个日志文件大小
max_binlog_size = 100m
#binlog缓存大小
binlog_cache_size = 4m
#最大binlog缓存大小
max_binlog_cache_size = 512m
binlog的各种模式
默认的模式是
STATEMENT,每一条会修改数据的sql语句会被记录到binlog中,优点:不需要记录每一条SQL语句与每行的数据变化,这样子binlog的日志也会比较少,减少了磁盘IO,提高性能
ROW,基于行的复制,优点:不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。 缺点:会产生大量的日志,尤其是alter table的时候会让日志暴涨。
MIXED,以上两种模式的混合使用
查看binlog
登录MySQL查看binlog日志
语法:
show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];
log_name是文件名,pos是起始下标,offet是偏移量,row_count是查询总条数例:
show binlog events in 'mysql-bin.000009' limit 10,20
通过binlog恢复数据
语法格式
mysqlbinlog mysql-bin.0000xx | mysql -u用户名 -p密码 数据库名
常用参数选项解释:
–start-position=875 起始pos点 –stop-position=954 结束pos点 –start-datetime=“2016-9-25 22:01:08” 起始时间点 –stop-datetime=“2019-9-25 22:09:46” 结束时间点 –database=xxx指定只恢复xxx数据库
例子:
mysqlbinlog --start-position=882 --stop-position=995 --database=zgcl /var/lib/mysql/mysql-bin.000003 | mysql -uroot -p123456 -v zgcl
-- mysql8.0的
mysqlbinlog --start-position=619 --stop-position=1210 --database=test /var/lib/mysql/binlog.000001 | mysql -uroot -proot@test -v test