binlog日志恢复数据,是挽救错误操作和数据损坏一根救命稻草,所以认识和使用binglog对于技术人员还是很有必要的

binlog一般用于

  • 主从复制 中 master节点开启binlog把二进制日志传递给slave节点达到主从数据一致
  • 第二点自然是用于数据恢复了,使用mysqlbinlog工具来恢复数据

开启binlog

show variables like 'log_%';
# my.ini
log_bin=mysql-bin
binlog-format=ROW
server-id=1

查看日志

SHOW master logs
SHOW BINLOG EVENTs IN 'mysql-bin.000001' limit 10
show binlog events;
SHOW BINLOG EVENTs IN 'mysql-bin.000001'

show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];
# 选项解析:
   IN 'log_name'   指定要查询的binlog文件名(不指定就是第一个binlog文件)
   FROM pos        指定从哪个pos起始点开始查起(不指定就是从整个文件首个pos点开始算)
   LIMIT [offset,] 偏移量(不指定就是0)
   row_count       查询总条数(不指定就是所有行)

恢复数据

恢复语法格式:mysqlbinlog mysql-bin.0000xx | mysql -u用户名 -p密码 数据库名

常用选项: –start-position=953 起始pos点 –stop-position=1437 结束pos点 –start-datetime=“2013-11-29 13:18:54” 起始时间点 –stop-datetime=“2013-11-29 13:21:53” 结束时间点 –database=zyyshop 指定只恢复zyyshop数据库(一台主机上往往有多个数据库,只限本地log日志) 不常用选项: -u –user=name Connect to the remote server as username.连接到远程主机的用户名 -p –password[=name] Password to connect to remote server.连接到远程主机的密码 -h –host=name Get the binlog from server.从远程主机上获取binlog日志 –read-from-remote-server Read binary logs from a MySQL server.从某个MySQL服务器上读取binlog日志

小结:实际是将读出的binlog日志内容,通过管道符传递给mysql命令。这些命令、文件尽量写成绝对路径;

drop TABLE t1
#导出sql
.\mysqlbinlog.exe 'C:\ProgramData\MySQL\MySQL Server 5.5\data\mysql-bin.000001' --start-position=452  --stop-position=1807 --database=mytest > d:\\test1.sql| .\mysql.exe -uroot -p369369
# 恢复
.\mysqlbinlog.exe 'C:\ProgramData\MySQL\MySQL Server 5.5\data\mysql-bin.000001' --start-position=107  --stop-position=735 | .\mysql.exe -uroot -p369369