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

首頁 > 數據庫 > MySQL > 正文

MySQL備份與恢復之保證數據一致性(5)

2024-07-24 13:07:51
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了MySQL備份與恢復之保證數據一致性,感興趣的小伙伴們可以參考一下

在上一篇文章中我們提到熱拷貝(MySQL備份與恢復之熱拷貝),熱拷貝也就是在MySQL或者其他數據庫服務在運行的情況下使用mysqlhotcopy命令進行備份。這篇文章我們講解怎樣保證數據一致性。現在假設有這樣一種情況,我們總是在凌晨對數據庫進行備份,假設在凌晨之后發生數據庫異常,并且導致數據丟失。這樣凌晨之前的數據我們已經做了備份,但是凌晨到發生異常這段時間的數據就會丟失(沒有binlog的情況下)。好在InnoDB存儲引擎支持事務,也支持Binlog,凌晨到發生異常這段時間的數據就可以通過日志文件進行備份。所以,日志文件是非常重要,非常關鍵的。我們備份不僅要對數據進行備份,如果條件允許還需要對二進制文件進行備份。當然備份好數據之后,可以清空二進制文件,但如果為了長遠考慮,比如恢復出來的數據并不是我們想要的,我們就需要備份二進制文件了。還有一點切記,恢復數據需要轉到測試數據庫中做,不要在生產環境中做。待測試庫中測試沒有問題,再在生產環境中做。

示意圖

MySQL備份與恢復之保證數據一致性(5)

保證數據一致性模擬

第一步,驗證數據

 

 
  1. [root@serv01 databackup]# rm -rf * 
  2. [root@serv01 databackup]# ls 
  3.  
  4. mysql> use larrydb; 
  5. Database changed 
  6. mysql> show tables; 
  7. +-------------------+ 
  8. | Tables_in_larrydb | 
  9. +-------------------+ 
  10. class | 
  11. | stu | 
  12. +-------------------+ 
  13. 2 rows in set (0.00 sec) 
  14.  
  15. mysql> select * from class
  16. +------+--------+ 
  17. | cid | cname | 
  18. +------+--------+ 
  19. | 1 | linux | 
  20. | 2 | oracle | 
  21. +------+--------+ 
  22. 2 rows in set (0.00 sec) 
  23.  
  24. mysql> select * from stu; 
  25. +------+---------+------+ 
  26. | sid | sname | cid | 
  27. +------+---------+------+ 
  28. | 1 | larry01 | 1 | 
  29. | 2 | larry02 | 2 | 
  30. +------+---------+------+ 
  31. 2 rows in set (0.00 sec) 

第二步,備份數據

 

 
  1. [root@serv01 databackup]# mysqldump -uroot -p123456 --database larrydb > larrydb.sql 
  2. [root@serv01 databackup]# ll larrydb.sql  
  3. -rw-r--r--. 1 root root 2613 Sep 10 19:34 larrydb.sql 

第三步,清空日志,因為已經做了備份,所以不需要以前的日志

 

 
  1. mysql> show binary logs; 
  2. +------------------+-----------+ 
  3. | Log_name | File_size | 
  4. +------------------+-----------+ 
  5. | mysql-bin.000001 | 27320 | 
  6. | mysql-bin.000002 | 1035309 | 
  7. | mysql-bin.000003 | 1010 | 
  8. | mysql-bin.000004 | 22809 | 
  9. | mysql-bin.000005 | 9860 | 
  10. | mysql-bin.000006 | 5659 | 
  11. | mysql-bin.000007 | 126 | 
  12. | mysql-bin.000008 | 10087 | 
  13. | mysql-bin.000009 | 8293 | 
  14. | mysql-bin.000010 | 476 | 
  15. | mysql-bin.000011 | 218 | 
  16. | mysql-bin.000012 | 126 | 
  17. | mysql-bin.000013 | 1113 | 
  18. | mysql-bin.000014 | 1171 | 
  19. | mysql-bin.000015 | 126 | 
  20. | mysql-bin.000016 | 107 | 
  21. | mysql-bin.000017 | 107 | 
  22. | mysql-bin.000018 | 13085 | 
  23. +------------------+-----------+ 
  24. 18 rows in set (0.00 sec) 
  25.  
  26. mysql> reset master; 
  27. Query OK, 0 rows affected (0.01 sec) 
  28.  
  29. mysql> show binary logs; 
  30. +------------------+-----------+ 
  31. | Log_name | File_size | 
  32. +------------------+-----------+ 
  33. | mysql-bin.000001 | 107 | 
  34. +------------------+-----------+ 
  35. 1 row in set (0.00 sec) 

第四步,更新數據

 

 
  1. mysql> insert into class values(3,'Devel'); 
  2. Query OK, 1 row affected (0.01 sec) 
  3.  
  4. mysql> update class set cname="dab" where cid=2; 
  5. Query OK, 1 row affected (0.01 sec) 
  6. Rows matched: 1 Changed: 1 Warnings: 0 
  7.  
  8. mysql> select * from class
  9. +------+-------+ 
  10. | cid | cname | 
  11. +------+-------+ 
  12. | 1 | linux | 
  13. | 2 | dab | 
  14. | 3 | Devel | 
  15. +------+-------+ 
  16. 3 rows in set (0.00 sec) 
  17.  
  18. mysql> select * from stu; 
  19. +------+---------+------+ 
  20. | sid | sname | cid | 
  21. +------+---------+------+ 
  22. | 1 | larry01 | 1 | 
  23. | 2 | larry02 | 2 | 
  24. +------+---------+------+ 
  25. 2 rows in set (0.00 sec) 
  26.  
  27. mysql> delete from stu where cid=2; 
  28. Query OK, 1 row affected (0.00 sec) 
  29.  
  30. mysql> update stu set sname="larry007" where sid=1; 
  31. Query OK, 1 row affected (0.00 sec) 
  32. Rows matched: 1 Changed: 1 Warnings: 0 
  33.  
  34. mysql> select * from stu; 
  35. +------+----------+------+ 
  36. | sid | sname | cid | 
  37. +------+----------+------+ 
  38. | 1 | larry007 | 1 | 
  39. +------+----------+------+ 
  40. 1 row in set (0.00 sec) 
  41.  
  42. [root@serv01 data]# date 
  43. Tue Sep 10 19:38:24 CST 2013 

第五步,模擬數據丟失,刪除庫

 

 
  1. [root@serv01 data]# rm -rf /usr/local/mysql/data/larrydb/ 
  2.  
  3. mysql> show databases; 
  4. +--------------------+ 
  5. | Database | 
  6. +--------------------+ 
  7. | information_schema | 
  8. | game | 
  9. | hello | 
  10. | mnt | 
  11. | mysql | 
  12. | performance_schema | 
  13. | test | 
  14. +--------------------+ 
  15. 7 rows in set (0.00 sec) 
  16.  
  17. [root@serv01 data]# cd /usr/local/mysql/data/ 
  18. [root@serv01 data]# ll 
  19. total 28736 
  20. drwx------. 2 mysql mysql 4096 Sep 10 19:14 game 
  21. drwx------. 2 mysql mysql 4096 Sep 7 00:43 hello 
  22. -rw-rw----. 1 mysql mysql 18874368 Sep 10 19:36 ibdata1 
  23. -rw-rw----. 1 mysql mysql 5242880 Sep 10 19:36 ib_logfile0 
  24. -rw-rw----. 1 mysql mysql 5242880 Sep 4 23:39 ib_logfile1 
  25. drwxr-xr-x. 2 mysql mysql 4096 Sep 10 18:35 mnt 
  26. drwxr-xr-x. 2 mysql mysql 4096 Sep 4 23:39 mysql 
  27. -rw-rw----. 1 mysql mysql 998 Sep 10 19:37 mysql-bin.000001 
  28. -rw-rw----. 1 mysql mysql 19 Sep 10 19:34 mysql-bin.index 
  29. drwx------. 2 mysql mysql 4096 Sep 4 23:39 performance_schema 
  30. -rw-r-----. 1 mysql root 26371 Sep 10 19:30 serv01.host.com.err 
  31. -rw-rw----. 1 mysql mysql 5 Sep 10 18:36 serv01.host.com.pid 
  32. drwx------. 2 mysql mysql 4096 Sep 7 00:13 test 
  33.  
  34. #可以使用mysqlbinlog命令查看日志文件 
  35. [root@serv01 data]# mysqlbinlog mysql-bin.000001 
  36.  
  37. mysql> show databases; 
  38. +--------------------+ 
  39. | Database | 
  40. +--------------------+ 
  41. | information_schema | 
  42. | game | 
  43. | hello | 
  44. | mnt | 
  45. | mysql | 
  46. | performance_schema | 
  47. | test | 
  48. +--------------------+ 
  49. 7 rows in set (0.00 sec) 
  50.  
  51. mysql> drop database larrydb; 
  52. Query OK, 0 rows affected (0.01 sec) 

第六步,導入更新之前的數據

 

 
  1. [root@serv01 databackup]# mysql -uroot -p123456 < larrydb.sql  
  2. ERROR 1050 (42S01) at line 33: Table '`larrydb`.`class`' already exists 
  3. [root@serv01 databackup]# mysql -uroot -p123456 < larrydb.sql  
  4.  
  5. mysql> use larrydb; 
  6. Database changed 
  7. mysql> select * from stu; 
  8. +------+---------+------+ 
  9. | sid | sname | cid | 
  10. +------+---------+------+ 
  11. | 1 | larry01 | 1 | 
  12. | 2 | larry02 | 2 | 
  13. +------+---------+------+ 
  14. 2 rows in set (0.00 sec) 
  15.  
  16. mysql> select * from class
  17. +------+--------+ 
  18. | cid | cname | 
  19. +------+--------+ 
  20. | 1 | linux | 
  21. | 2 | oracle | 
  22. +------+--------+ 
  23. 2 rows in set (0.00 sec) 

第七步,根據日志恢復數據

 

 
  1. [root@serv01 data]# mysqlbinlog --stop-datetime "2013-09-10 19:37:45" mysql-bin.000001 | mysql -uroot -p123456 
  2.  
  3. mysql> select * from stu; 
  4. +------+---------+------+ 
  5. | sid | sname | cid | 
  6. +------+---------+------+ 
  7. | 1 | larry01 | 1 | 
  8. +------+---------+------+ 
  9. 1 row in set (0.00 sec) 
  10.  
  11. mysql> select * from class
  12. +------+-------+ 
  13. | cid | cname | 
  14. +------+-------+ 
  15. | 1 | linux | 
  16. | 2 | dab | 
  17. | 3 | Devel | 
  18. +------+-------+ 
  19. 3 rows in set (0.00 sec) 
  20.  
  21. #規律:恢復的時間點(或者是Commit之后的那個時間點)是發生事故的那個點再加上一秒。 
  22. [root@serv01 data]# mysqlbinlog --stop-datetime "2013-09-10 19:37:46" mysql-bin.000001 | mysql -uroot -p123456 
  23.  
  24. mysql> select * from stu; 
  25. +------+----------+------+ 
  26. | sid | sname | cid | 
  27. +------+----------+------+ 
  28. | 1 | larry007 | 1 | 
  29. +------+----------+------+ 
  30. 1 row in set (0.00 sec) 
  31.  
  32. mysql> select * from class
  33. +------+-------+ 
  34. | cid | cname | 
  35. +------+-------+ 
  36. | 1 | linux | 
  37. | 2 | dab | 
  38. | 3 | Devel | 
  39. | 3 | Devel | 
  40. +------+-------+ 
  41. 4 rows in set (0.00 sec) 
  42.  
  43. [root@serv01 data]# mysqlbinlog mysql-bin.000001  
  44. # at 7131 
  45. #130910 19:37:45 server id 1 end_log_pos 7240 Query thread_id=20 exec_time=996 error_code=0 
  46. SET TIMESTAMP=1378813065/*!*/
  47. update stu set sname="larry007" where sid=1 
  48. /*!*/
  49. # at 7240 
  50. #130910 19:37:45 server id 1 end_log_pos 7312 Query thread_id=20 exec_time=996 error_code=0 
  51. SET TIMESTAMP=1378813065/*!*/
  52. COMMIT 
  53. /*!*/
  54. DELIMITER ; 
  55. # End of log file 
  56. ROLLBACK /* added by mysqlbinlog */
  57. /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/

以上就是本文的全部內容,不知道大家是否有所收獲,聯系前幾篇的內容進行理解,學習效果會更好哦

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 金沙县| 龙南县| 禹州市| 丹阳市| 渑池县| 万年县| 松江区| 乐亭县| 胶南市| 灯塔市| 哈密市| 延边| 屯留县| 壶关县| 叙永县| 中卫市| 平远县| 清丰县| 博野县| 新竹市| 桂东县| 宕昌县| 深州市| 龙泉市| 莎车县| 宝坻区| 巩留县| 合川市| 东兰县| 西畴县| 石屏县| 安丘市| 阿勒泰市| 尼玛县| 自贡市| 海阳市| 固始县| 清新县| 海阳市| 海阳市| 瓦房店市|