VPS测评 VPS推荐 VPS优惠
Linux运维

MYSQL binlog 配置和相关命令

什么是二进制日志

二进制日志记录导致数据改变的SQL语句,记录已提交的日志,不依赖于存储引擎类型。 二进制日志不但可以记录语句,还能够通过”重放“日志文件中的事件来生成数据副本,以实现备份的功能。在生产环境中建议将二进制日志和数据文件分开存放。

查看二进制日志是否开启

SELECT @@sql_log_bin;#值为1或者ON就表示已经开启

如果没有开启,可以在配置文件中添加此选项(注意使用横线而不是下划线)

[mysqld]
log-bin

开启二进制日志,并修改二进制日志的路径(存放日志的文件夹所有者必须改成mysql否则会提示权限不够)

[mysqld]
log-bin=/data/binlog/binlog

如果你的系统是ubuntu,配置文件语法正确,文件夹也有访问权限,修改了二进制日志的存放路径后服务启动不了,提示配置错误。可以尝试以下解决方法:

修改文件

vim /etc/apparmor.d/usr.sbin.mysqld

找到# Allow log file access这个配置块,在后面添加以下配置,路径(这里是/data/binlog)替换成你存放二进制日志的文件夹。

/data/binlog/ r,
/data/binlog/** rw,

最后重读配置生效

/etc/init.d/apparmor reload

临时禁用二进制日志(还原时常用)

set sql_log_bin=0;

二进制日志格式

二进制日志的格式有三种,分别是STATEMENT、ROW、MIXED。可以通过binlog_format来配置,在官方文档里,它既是配置文件选项又是系统变量(BOTH)。如果需要实现备份功能,建议使用ROW格式,更加安全可靠。(STATEMENT的缺点:记录数据不全,在不同的时间执行结果可能会不同,还原的时间点一定是未来某个时间,起不到备份效果)

方法一:修改配置文件

[mysqld]
binlog_format=ROW

方法二:设置全局变量

SET GLOBAL binlog_format=ROW;#退出重新登录MYSQL后生效

二进制日志相关命令

查看二进制日志文件列表和大小

SHOW MASTER LOGS;
SHOW BINARY LOGS;

查看使用中的二进制日志文件

SHOW MASTER STATUS;

查看二进制文件中的指定内容

SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]

范例

show binlog events in 'binlog.000001' from 125;#查看binlog.000001中的从125开始的日志

刷新日志

每次重启MYSQL服务会自动刷新,生成新的二进制日志文件

FLUSH LOGS;

删除二进制日志

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

范例

PURGE MASTER LOGS TO 'binlog.000003';#删除binlog.000003之前的日志
PURGE MASTER LOGS BEFORE '2022-06-28 10:38:00';#删除某个时间点之前的日志

删除所有二进制日志,重新计数

RESET MASTER [TO #];删除所有日志,并从#开始计数,默认从1开始

MYSQLBINLOG

mysqlbinlog是二进制日志的客户端命令工具,支持离线查看二进制日志。

mysqlbinlog [OPTIONS] log_file

选项

--start-position= #开始位置
--stop-position= #结束位置
--start-datetime= #时间格式:YYYY-MM-DD hh:mm:ss
--stop-datetime=
--base64-output[=name]
-v -vvv

范例

mysqlbinlog /var/lib/mysql/binlog.000001 -v #查看更详细的日志
mysqlbinlog /var/lib/mysql/binlog.000001 --stop-position=313 #从头查看日志到Pos 313为止
未经允许不得转载:青蛙主机 » MYSQL binlog 配置和相关命令

VPS相关常用工具

PING测试工具自用毛子接码站