MySQL binlog简介
binlog是MySQL日志中非常重要的日志,今天结合MySQL的官方文档系统学习一下binlog的知识。
目录
binlog介绍
binlog记录了使数据库发生变化的操作,比如创建表,更新表(create ,update,delete,insert)等,同时也会记录这些操作花费的时间。二进制日志不会记录select 和 show操作,如果你想要查看这类的操作,可以开启全量日志查看。开启binlog会是数据库性能有轻微的损耗,但是相比于开启日志后带来的好处,这些性能损耗可以忽略。
MySQL 8.0.14开始,二进制日志和中继日志可以加密。保护日志的敏感信息,防止外部攻击者获取泄露。相关参数binlog_encryption
binlog的作用
1 主从复制
2 恢复数据库
如何开启binlog
开启参数 log_bin
一般我们都是通过指定配置文件启动MySQL实例,所以可以将该参数写入到配置文件中。
可以直接写改参数 ,后面不加路径和文件,数据库和会根据参数datadir路径和服务器主机名生成binlog。
在配置文件中添加参数如下,不加任何选项
生成的binlog文件路径和格式如下,Master 为主机名
路径为datadir路径
也可以通过以下方式参看
建议的开启方式为该参数后指定路径和文件名,这样在主机名称改变后binlog还能继续使用相同的文件名。
log-bin = /server/mysql_data/mysql-bin
注意 开启binlog必须制定server_id 参数 ,如果没有server_id参数报错如下
Starting MySQL.. ERROR! The server quit without updating PID file (/server/mysql_data/mysql.pid).
何时生成新的日志文件
MySQL服务在以下三种情况下会生成新的二进制文件,新生成的二进制文件名会使用base name之后数字递增的方式命名,另外为了跟踪使用了哪些二进制日志文件,还会生成一个以.index结尾的索引文件,索引文件中记录实际的日志文件名。
1 在服务启动或者重启
2 数据库执行flush logs;
3 当日志的大小超过设置的大小 。max_binlog_size
注意:如果数据库中有大事务,二进制日志文件可能会比max_binlog_size更大,因为事务是完整地写入文件的,而不是在文件之间分割。
二进制日志三种格式
1 row-based logging,
2 statement-based logging
3 mixed-base logging.
如何查看二进制日志内容
可以使用工具mysqlbinlog查看二进制日志的内容。另外还可以利用该工具进行恢复,此功能很有用。例如
shell> mysqlbinlog log_file | mysql -h server_name
mysqlbinlog还可以查看中继日志内容, 因为它们使用与二进制日志文件相同的格式编写
关于binlog的操作 与参数
删除 :https://www.cnblogs.com/xu-xiao/p/8026586.html
purge binary logs to 'mysql-bin.000003';
直接删除文件后 元数据中还有记录 会出现文件不存在但是在元数据还记录,但是文件的大小为0
rm -rf mysql-bin.000002
恢复多个文件的小技巧
可以使用正则去匹配多个文件恢复
官方文档 https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html
官方文档 https://dev.mysql.com/doc/refman/8.0/en/binary-log.html