温馨提示: 操作数据库清先备份数据库!!!!!!!!!
什么是mysqlbinlog?
MySQL的binlog就是大家经常所说的Binary Log,即bin-log,是MySQL存储对数据库改动的二进制文件,也就是记录了所有DDL与DML(select除外)语句,利用它主要可以做两件事:
- 数据恢复:通过mysqlbinog工具进行恢复;
- 数据复制:MySQL Replication在Master端开启binlog,Mster把它的二进制日志传递给slaves来达到master-slave数据一致的目的。
如何查看MySQL的日志情况(是否开启等),当MySQL还没开启时候,通过命令:show variables like ‘log_bin%'查看
mysql> show variables like 'log_bin%';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| log_bin | OFF |
| log_bin_basename | |
| log_bin_index | |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
+---------------------------------+-------+
5 rows in set
查看binlog文件的内容
mysqlbinlog命令语法格式
mysqlbinlog mysql-bin.0000xx | mysql -u用户名 -p密码 数据库名
刷新log日志,自此刻开始产生一个新编号的binlog日志文件
mysql> flush logs;
Query OK, 0 rows affected (0.01 sec)
查找pos点
mysql> flush logs;
Query OK, 0 rows affected (0.03 sec)
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 | 107 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
mysql数据一般存放在/var/lib/mysql目录,通过mysqlbinlog打开日志文件
/usr/local/mysql/bin/mysqlbinlog /var/lib/mysql/mysql-bin.000001
常用用到的命令
--start-position=875 起始pos点
--stop-position=954 结束pos点
--start-datetime="2019-10-22 22:01:08" 起始时间点
--stop-datetime="2019-10-23 22:09:46" 结束时间点
如何恢复数据
第一步:找到当前mysql记录的binlog文件,执行show master status;
第二步:查看binlog,定位误操作的pos或者时间段。执行show binlog events in ‘mysql_bin.000001’;
第三步: 通过命令把特定时间的binlog转成sql文件,再执行sql文件
转化命令
mysqlbinlog --start-position=219 --stop-position=681 mysql-bin.000001 > /www/data/sql/test.sql
或者
mysqlbinlog --start-datetime="2019-10-22 22:01:08" --stop-datetime="2019-10-23 22:09:46" mysql-bin.000001 > /www/data/sql/test.sql
恢复命令,或者使用数据库工具执行sql文件
mysql> mysql -uroot -p123456 -v < /www/data/sql/test.sql
其实还有更直接的方法,就是感觉太危险了
一条命令直接回复数据
mysqlbinlog --start-datetime="2019-10-22 22:01:08" --stop-datetime="2019-10-23 22:09:46" --database=数据库 /var/lib/mysql/mysql-bin.000001 | mysql -uroot -p123456 -v 数据库
使用mysqlbinlog的命令路径必须准确,如linux宝塔的命令为
/www/server/mysql/bin/mysqlbinlog