国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > MySQL > 正文

mysql利用binlog日志恢復(fù)數(shù)據(jù)庫(kù)的例子

2024-07-24 12:36:42
字體:
供稿:網(wǎng)友

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ù)情況,代碼如下:

  1. mysql> select * from t1; +------+ | id | +------+ | 1 | | 2 | +------+ 2 rows in set (0.00 sec) 
  2.  
  3.  
  4. mysql> select * from t1; 
  5. +------+ 
  6. | id   | 
  7. +------+ 
  8. |    1 | 
  9. |    2 | 
  10. +------+ 
  11. rows in set (0.00 sec) 

2)備份數(shù)據(jù)到/tmp/test.sql,代碼如下:

  1. [root@localhost ~]# whereis mysqldump 
  2. mysqldump: /usr/bin/mysqldump /usr/share/man/man1/mysqldump.1.gz 
  3. [root@localhost ~]# /usr/bin/mysqldump -uroot -p123456 test > /tmp/test.sql 

三、這時(shí)模擬誤操作,插入3條數(shù)據(jù),刪除數(shù)據(jù)庫(kù),代碼如下:

  1. mysql> insert into t1 values(3); 
  2. Query OK, 1 row affected (0.00 sec) 
  3.  
  4. mysql> insert into t1 values(4); 
  5. Query OK, 1 row affected (0.00 sec) 
  6.  
  7. mysql> insert into t1 values(5); 
  8. 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.

  1. Query OK, 0 rows affected (0.05 sec) 
  2.  
  3. mysql> show master status; 
  4. +------------------+----------+--------------+------------------+ 
  5. | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
  6. +------------------+----------+--------------+------------------+ 
  7. | mysql-bin.000002 |      106 |              |                  | 
  8. +------------------+----------+--------------+------------------+ 
  9. 1 row in set (0.01 sec) 

刪除數(shù)據(jù),代碼如下:

  1. mysql> truncate t1; 
  2. Query OK, 0 rows affected (0.00 sec) 
  3.  
  4. mysql> select * from t1; 
  5. Empty set (0.01 sec) 
  6.  
  7. mysql> show tables; 
  8. +----------------+ 
  9. | Tables_in_test | 
  10. +----------------+ 
  11. | t1             | 
  12. +----------------+ 
  13. 1 row in set (0.00 sec) 

此時(shí)突然數(shù)據(jù)庫(kù)損壞或者人為刪除,代碼如下:

  1. mysql> drop table t1; 
  2. Query OK, 0 rows affected (0.00 sec) 
  3.  
  4. mysql> show tables; 
  5. Empty set (0.00 sec)  

四、此時(shí)數(shù)據(jù)庫(kù)已經(jīng)被完全破壞

1)用已經(jīng)備份的/tmp/test.sql來恢復(fù)數(shù)據(jù),代碼如下:

  1. [root@localhost]# mysql -uroot -p123456 test </tmp/test.sql 
  2. [root@localhost]# mysql -uroot -p123456 test 
  3.  
  4.  
  5.  
  6. mysql> show tables; 
  7. +----------------+ 
  8. | Tables_in_test | 
  9. +----------------+ 
  10. | t1             | 
  11. +----------------+ 
  12. 1 row in set (0.00 sec) 
  13.  
  14. mysql> select * from t1; 
  15. +------+ 
  16. | id   | 
  17. +------+ 
  18. |    1 | 
  19. |    2 | 
  20. +------+ 
  21. rows in set (0.00 sec) 

2)還有三條數(shù)據(jù)沒有恢復(fù),怎么辦,只能用bin-log來恢復(fù),代碼如下:

  1. [root@localhost]# /usr/bin/mysqlbinlog --no-defaults /var/lib/mysql/mysql-bin.000001 | more 
  2. [root@localhost]# /usr/bin/mysqlbinlog --no-defaults /var/lib/mysql/mysql-bin.000001 | /usr/bin/mysql -uroot -p123456 test 
  3.  
  4. mysql> select * from t1; 
  5. +------+ 
  6. | id   | 
  7. +------+ 
  8. |    1 | 
  9. |    2 | 
  10. |    3 | 
  11. |    4 | 
  12. |    5 | 
  13. +------+ 
  14. 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日志,代碼如下:

  1. mysql> reset master; 
  2. Query OK, 0 rows affected (0.01 sec) 
  3.  m.survivalescaperooms.com 
  4. mysql> show master status; 
  5. +------------------+----------+--------------+------------------+ 
  6. | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
  7. +------------------+----------+--------------+------------------+ 
  8. | mysql-bin.000001 |      106 |              |                  | 
  9. +------------------+----------+--------------+------------------+  

mysql> flush logs;#關(guān)閉當(dāng)前的二進(jìn)制日志文件并創(chuàng)建一個(gè)新文件,新的二進(jìn)制日志文件的名字在當(dāng)前的二進(jìn)制文件的編號(hào)上加1.

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 东阳市| 思南县| 青州市| 堆龙德庆县| 海晏县| 永春县| 治多县| 丰原市| 定结县| 黑水县| 惠州市| 阳西县| 库尔勒市| 荣成市| 盐边县| 清涧县| 平谷区| 迁安市| 吴桥县| 永和县| 鄂托克前旗| 屏东县| 仙桃市| 象山县| 大厂| 东乌珠穆沁旗| 麻江县| 黄陵县| 睢宁县| 舞阳县| 正宁县| 巨鹿县| 定南县| 永修县| 宜城市| 上思县| 措美县| 漳州市| 磐石市| 深圳市| 康保县|