二进制日志由包含 "事件" 的文件组成, 这些 事件描述了对数据库内容的修改. 服务器以二进制格式写入这些文件.
1. 查看 binlog 文件名列表
show binary logs;
2. 查看 binlog 文件内容
show binlog events in 'mysql-bin.000001' limit 10;
3. 查看 binlog 当前位置点
show master status;
4. 查看 binlog 格式
日志格式: statement,row,
row: 优点: 日志比较清楚, 会记录每行数据修改细节 缺点: 会产生大量的日志
statement: 优点: 只记录 sql 语句, 解决了 row 格式的缺点, 减少了日志量, 节省 I/O 及存储资源, 提高了性能. 缺点: 有些 sql 语句不能复制到 slava, 导致主从不一致, 存在一些 bug, 语句执行错误不易恢复.
mixed: 处于 row 与 statement 格式之间, 很好的处理了其优缺点.
SELECT @@binlog_format;
5. 刷新日志
flush logs;
6. 清除日志
reset master;
7. 用 mysqlbinlog 工具查看
mysqlbinlog -v --base64-output=decode-rows /usr/App/mysqllog/mysql_bin.000001
基于开始 / 结束时间
mysqlbinlog --start-datetime='2018-12-13 00:00:00' --stop-datetime='2018-12-14 15:01:01' -d hadoop /usr/App/mysqllog/MySQL-bin.000001
基于 pos 值输出到压缩文件 , 注: test 是库名,/var/lib/MySQL/MySQL-bin.000001 是二进制文件路径
mysqlbinlog --start-position=2098 --stop-position=2205 -d test /usr/App/mysqllog/MySQL-bin.000001 |gzip>test.sql.gz
提取指定位置的多个 binlog 日志文件
mysqlbinlog --start-position="120" --stop-position="332" /usr/App/mysqllog/MySQL-bin.000001 /usr/App/mysqllog/MySQL-bin.000002|more
提取指定数据库 binlog 并转换字符集到 UTF8
mysqlbinlog --database=test --set-charset=utf8 /usr/App/mysqllog/MySQL-bin.000001 /usr/App/mysqllog/MySQL-bin.000002>test.sql
恢复数据
mysqlbinlog --start-position="120" --stop-position="332" /usr/App/mysqllog/MySQL-bin.000001 | MySQL -uroot -p
备份日志: 必须由两个 mysqlbinlog 完成
- mysqlbinlog --read-from-remote-server --host=host_name --raw
- binlog.000001 binlog.000131 binlog.000132
--read-from-remote-server 可以用 - R 替代: 连接到服务器并请求其二进制日志, --host: 主机 ip,
- mysqlbinlog --read-from-remote-server --host=host_name --raw
- --to-last-log binlog.000001
--raw: 写入原始 (二进制) 输出, binlog.000001: 第一个文件, --to-last-log: 最后一个文件读完退出
实时读取日志
- mysqlbinlog --read-from-remote-server --host=host_name --raw
- --stop-never binlog.000001
--stop-never: 到达最后一个日志文件的末尾后保持与服务器的连接并继续读取新事件, 没有必要指定 --to-last-log 读取最后一个日志文件, 因为该选项是隐含的.
来源: http://www.bubuko.com/infodetail-2884475.html