记一次mysql从删库到恢复的经历
wesen • 2019 年 01 月 18 日
程序员删库后只能跑路吗?那我这个业余爱好者,删除的是自己的博客库,没路可跑怎么办?
--那就硬着头皮学恢复
Mysql数据库恢复的几种方法备份(关于养成好的备份习惯以及自动备份,不在本文讨论之列);
binlog日志;
简单了解binlogbinlog是一个二进制格式的文件,用于记录用户对数据库更新的SQL语句信息,例如更改数据库表和更改内容的SQL语句都会记录到binlog里,但是对库表等内容的查询不会记录。
binlog作用MySQL主从复制:MySQL Replication在Master端开启binlog,Master把它的二进制日志传递给slaves来达到master-slave数据一致的目的。
数据恢复,通过使用mysqlbinlog工具来使恢复数据。
开启方法找到mysql配置文件my.cnf,并用编辑器打开,一般位于/etc/my.cnf;
在[mysqld] 区块添加log-bin=mysql-bin(默认没有或者是注释掉的);
注意:每次服务器(数据库)重启,服务器会调用flush logs;,新创建一个binlog日志!19.8.3更新,如果修改my.cnf后重启失败,可能是启用了binlog,但是没有提供强制规定的server-id参数.添加配置server-id=1(随意设定,但集群环境下要配置不同的值,不能重复),再次重启mysql,正常!
常用的binlog日志操作命令
1.查看日志文件mysql> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 149 |
| mysql-bin.000002 | 4102 |
+------------------+-----------+
2.flush刷新log日志,自此刻开始产生一个新编号的binlog日志文件mysql> flush logs;
Query OK, 0 rows affected (0.13 sec)
mysql> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 149 |
| mysql-bin.000002 | 4145 |
| mysql-bin.000003 | 106 |
+------------------+-----------+
3 rows in set (0.00 sec)
查看binlog日志内容
1.使用mysqlbinlog自带查看命令法:
查看mysql的数据存放目录ps -ef|grep mysql
datadir即为数据存方路径
可以cd到数据存方目录,使用mysqlbinlog命令打开日志文件mysqlbinlog mysql-bin.000002
2.mysql读取日志内容mysql> 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:查询总条数(不指定就是所有行)
示例:mysql> show binlog events in 'mysql-bin.000002'\G;
利用binlog日志恢复mysql数据
以下命令都是在datadir下执行
1.将binlog日志文件转sqlmysqlbinlog mysql-bin.000002 > 000002.sql
2.建议打开编辑sql,如果是误删了数据,将sql中开始删除的操作点后的sql删除
3.从sql恢复mysql -uroot -p -v < 000002.sql
以上恢复只是将之前的sql重新执行一次,如果有精确到点的恢复,请查看以下文章