binlog日志是mysql中一個(gè)二進(jìn)制的日志文件,它記錄了我們數(shù)據(jù)庫(kù)一一舉一動(dòng),下面我就來給各位演示一下利用binlog日志來恢復(fù)我們刪除的數(shù)據(jù)庫(kù)與記錄吧.
binlog日志用于記錄所有更新了數(shù)據(jù)或者已經(jīng)潛在更新了數(shù)據(jù)的所有語(yǔ)句,語(yǔ)句以“事件”的形式保存,它描述數(shù)據(jù)更改,當(dāng)我們因?yàn)槟撤N原因?qū)е聰?shù)據(jù)庫(kù)出現(xiàn)故障時(shí),就可以利用binlog日志來挽回,前提是已經(jīng)配置好了binlog,接下來我們來配置.
一、開啟mysql-binlog日志
在mysql配置文件my.cnf加上如下配置,代碼如下:
[mysqld]
log-bin=mysql-bin
重啟mysql,代碼如下:service mysqld restart
二、備份數(shù)據(jù)庫(kù)
1)先查看一下當(dāng)前數(shù)據(jù)庫(kù)情況,代碼如下:
- mysql> select * from t1; +------+ | id | +------+ | 1 | | 2 | +------+ 2 rows in set (0.00 sec)
- mysql> select * from t1;
- +------+
- | id |
- +------+
- | 1 |
- | 2 |
- +------+
- 2 rows in set (0.00 sec)
2)備份數(shù)據(jù)到/tmp/test.sql,代碼如下:
- [root@localhost ~]# whereis mysqldump
- mysqldump: /usr/bin/mysqldump /usr/share/man/man1/mysqldump.1.gz
- [root@localhost ~]# /usr/bin/mysqldump -uroot -p123456 test > /tmp/test.sql
三、這時(shí)模擬誤操作,插入3條數(shù)據(jù),刪除數(shù)據(jù)庫(kù),代碼如下:
- mysql> insert into t1 values(3);
- Query OK, 1 row affected (0.00 sec)
- mysql> insert into t1 values(4);
- Query OK, 1 row affected (0.00 sec)
- mysql> insert into t1 values(5);
- Query OK, 1 row affected (0.00 sec)
mysql> flush logs;#關(guān)閉當(dāng)前的二進(jìn)制日志文件并創(chuàng)建一個(gè)新文件,新的二進(jìn)制日志文件的名字在當(dāng)前的二進(jìn)制文件的編號(hào)上加1.
- Query OK, 0 rows affected (0.05 sec)
- mysql> show master status;
- +------------------+----------+--------------+------------------+
- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
- +------------------+----------+--------------+------------------+
- | mysql-bin.000002 | 106 | | |
- +------------------+----------+--------------+------------------+
- 1 row in set (0.01 sec)
刪除數(shù)據(jù),代碼如下:
- mysql> truncate t1;
- Query OK, 0 rows affected (0.00 sec)
- mysql> select * from t1;
- Empty set (0.01 sec)
- mysql> show tables;
- +----------------+
- | Tables_in_test |
- +----------------+
- | t1 |
- +----------------+
- 1 row in set (0.00 sec)
此時(shí)突然數(shù)據(jù)庫(kù)損壞或者人為刪除,代碼如下:
- mysql> drop table t1;
- Query OK, 0 rows affected (0.00 sec)
- mysql> show tables;
- Empty set (0.00 sec)
四、此時(shí)數(shù)據(jù)庫(kù)已經(jīng)被完全破壞
1)用已經(jīng)備份的/tmp/test.sql來恢復(fù)數(shù)據(jù),代碼如下:
- [root@localhost]# mysql -uroot -p123456 test </tmp/test.sql
- [root@localhost]# mysql -uroot -p123456 test
- mysql> show tables;
- +----------------+
- | Tables_in_test |
- +----------------+
- | t1 |
- +----------------+
- 1 row in set (0.00 sec)
- mysql> select * from t1;
- +------+
- | id |
- +------+
- | 1 |
- | 2 |
- +------+
- 2 rows in set (0.00 sec)
2)還有三條數(shù)據(jù)沒有恢復(fù),怎么辦,只能用bin-log來恢復(fù),代碼如下:
- [root@localhost]# /usr/bin/mysqlbinlog --no-defaults /var/lib/mysql/mysql-bin.000001 | more
- [root@localhost]# /usr/bin/mysqlbinlog --no-defaults /var/lib/mysql/mysql-bin.000001 | /usr/bin/mysql -uroot -p123456 test
- mysql> select * from t1;
- +------+
- | id |
- +------+
- | 1 |
- | 2 |
- | 3 |
- | 4 |
- | 5 |
- +------+
- 5 rows in set (0.00 sec)
3)恢復(fù)成功
總結(jié):mysql備份和bin-log日志,備份數(shù)據(jù).代碼如下:
mysqldump -uroot -p123456 test -l -F '/tmp/test.sql'
-l:讀鎖 只能讀取,不能更新.
-F:即flush logs,可以重新生成新的日志文件,當(dāng)然包括log-bin日志.
查看binlog日志,代碼如下:mysql>show master status
導(dǎo)入之前備份數(shù)據(jù),代碼如下:
mysql -uroot -p123456 test -v -f </tmp/test.sql
-v查看導(dǎo)入的詳細(xì)信息
-f是當(dāng)中間遇到錯(cuò)誤時(shí),可以skip過去,繼續(xù)執(zhí)行下面的語(yǔ)句.
恢復(fù)binlog-file二進(jìn)制日志文件,代碼如下:
mysqlbinlog --no-defaults binlog-file | mysql -uroot -p123456
從某一(367)點(diǎn)開始恢復(fù),代碼如下:
mysqlbinlog --no-defaults --stop-position="367" mysql-bin.000001| mysql -uroot -p123456 test
先查好那一點(diǎn),用more來查看,代碼如下:
[root@localhost mysql]# /usr/bin/mysqlbinlog --no-defaults mysql-bin.000002 --start-position="794" --stop-position="1055" | more
然后恢復(fù),代碼如下:
[root@localhost mysql]# /usr/bin/mysqlbinlog --no-defaults mysql-bin.000002 --start-position="794" --stop-position="1055" | /usr/bin/mysql -uroot -p123456 test
重置binlog日志,代碼如下:
- mysql> reset master;
- Query OK, 0 rows affected (0.01 sec)
- m.survivalescaperooms.com
- mysql> show master status;
- +------------------+----------+--------------+------------------+
- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
- +------------------+----------+--------------+------------------+
- | mysql-bin.000001 | 106 | | |
- +------------------+----------+--------------+------------------+
mysql> flush logs;#關(guān)閉當(dāng)前的二進(jìn)制日志文件并創(chuàng)建一個(gè)新文件,新的二進(jìn)制日志文件的名字在當(dāng)前的二進(jìn)制文件的編號(hào)上加1.
新聞熱點(diǎn)
疑難解答
圖片精選