利用binlog進行數據庫的還原


前言:在學習MySQL備份的時候,深深的感受到mysql的備份還原功能沒有oracle強大;比如一個很常見的恢復場景:基于時間點的恢復,oracle通過rman工具就能夠很快的實現數據庫的恢復,但是mysql在進行不完全恢復的時候很大的一部分要依賴于mysqlbinlog這個工具運行binlog語句來實現,本文檔介紹通過mysqlbinlog實現各種場景的恢復;

一、測試環境說明:使用mysqlbinlog工具的前提需要一個數據庫的完整性備份,所以需要事先對數據庫做一個完整的備份,本文檔通過mysqlbackup進行數據庫的全備(mysqlbackup的使用:http://blog.itpub.net/12679300/viewspace-1329578/);

二、測試步驟說明:
數據庫的插入準備工作
2.1 在時間點A進行一個數據庫的完整備份;
2.2 在時間點B創建一個數據庫BKT,并在BKT下面創建一個表JOHN,并插入5條數據;
2.3 在時間點C往表JOHN繼續插入數據到10條;

數據庫的恢復工作
2.4 恢復數據庫到時間點A,然后檢查數據庫表的狀態;
2.5 恢復數據庫到時間點B,檢查相應的系統狀態;
2.6 恢復數據庫到時間點C,并檢查恢復的狀態;
三、場景模擬測試步驟(備份恢復是一件很重要的事情)
3.1 執行數據庫的全備份;

點擊(此處)折疊或打開

創新互聯專業為企業提供站前網站建設、站前做網站、站前網站設計、站前網站制作等企業網站建設、網頁設計與制作、站前企業網站模板建站服務,十載站前做網站經驗,不只是建網站,更提供有價值的思路和整體網絡服務。

  1. [root@mysql01 backup]# mysqlbackup --user=root --password --backup-dir=/backup backup-and-apply-log //運行數據庫的完整備份
3.2 創建數據庫、表并插入數據

點擊(此處)折疊或打開

  1. mysql> SELECT CURRENT_TIMESTAMP;
  2. +---------------------+
  3. | CURRENT_TIMESTAMP |
  4. +---------------------+
  5. | 2014-11-26 17:51:27 |
  6. +---------------------+
  7. 1 row in set (0.01 sec)

  8. mysql> show databases; //尚未創建數據庫BKT
  9. +--------------------+
  10. | Database |
  11. +--------------------+
  12. | information_schema |
  13. | john |
  14. | mysql |
  15. | performance_schema |
  16. +--------------------+
  17. 4 rows in set (0.03 sec)

  18. mysql> Ctrl-C --
  19. Aborted
  20. [root@mysql02 data]# mysql -uroot -p
  21. Enter password:
  22. Welcome to the MySQL monitor. Commands end with ; or \\g.
  23. Your MySQL connection id is 2
  24. Server version: 5.5.36-log Source distribution
  25. Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
  26. Oracle is a registered trademark of Oracle Corporation and/or its
  27. affiliates. Other names may be trademarks of their respective
  28. owners.
  29. Type \'help;\' or \'\\h\' for help. Type \'\\c\' to clear the current input statement.
  30. mysql> show master status;
  31. +------------------+----------+--------------+------------------+
  32. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  33. +------------------+----------+--------------+------------------+
  34. | mysql-bin.000001 | 107 | | | //當前數據庫log的pos狀態
  35. +------------------+----------+--------------+------------------+
  36. 1 row in set (0.00 sec)
  37. mysql> SELECT CURRENT_TIMESTAMP; //當前的時間戳 當前時間點A
  38. +---------------------+
  39. | CURRENT_TIMESTAMP |
  40. +---------------------+
  41. | 2014-11-26 17:54:12 |
  42. +---------------------+
  43. 1 row in set (0.00 sec)
  44. mysql> create database BKT; //創建數據庫BKT
  45. Query OK, 1 row affected (0.01 sec)
  46. mysql> create table john (id varchar(32));
  47. ERROR 1046 (3D000): No database selected
  48. mysql> use bkt;
  49. ERROR 1049 (42000): Unknown database \'bkt\'
  50. mysql> use BKT;
  51. Database changed
  52. mysql> create table john (id varchar(32));
  53. Query OK, 0 rows affected (0.02 sec)
  54. mysql> insert into john values(\'1\');
  55. Query OK, 1 row affected (0.01 sec)
  56. mysql> insert into john values(\'2\');
  57. Query OK, 1 row affected (0.01 sec)
  58. mysql> insert into john values(\'3\');
  59. Query OK, 1 row affected (0.00 sec)
  60. mysql> insert into john values(\'4\');
  61. Query OK, 1 row affected (0.01 sec)
  62. mysql> insert into john values(\'5\');
  63. Query OK, 1 row affected (0.01 sec)
  64. mysql> SELECT CURRENT_TIMESTAMP; //插入5條數據后數據庫的時間點B,記錄該點便于數據庫的恢復
  65. +---------------------+
  66. | CURRENT_TIMESTAMP |
  67. +---------------------+
  68. | 2014-11-26 17:55:53 |
  69. +---------------------+
  70. 1 row in set (0.00 sec)
  71.  
  72. mysql> show master status;
  73. +------------------+----------+--------------+------------------+
  74. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  75. +------------------+----------+--------------+------------------+
  76. | mysql-bin.000001 | 1204 | | | //當前binlog的pos位置
  77. +------------------+----------+--------------+------------------+
  78. 1 row in set (0.00 sec)
 3.3 設置時間點C的測試

點擊(此處)折疊或打開

  1. mysql> insert into john values(\'6\');
  2. Query OK, 1 row affected (0.02 sec)
  3. mysql> insert into john values(\'7\');
  4. Query OK, 1 row affected (0.01 sec)
  5. mysql> insert into john values(\'8\');
  6. Query OK, 1 row affected (0.01 sec)
  7. mysql> insert into john values(\'9\');
  8. Query OK, 1 row affected (0.01 sec)
  9. mysql> insert into john values(\'10\');
  10. Query OK, 1 row affected (0.03 sec)
  11. mysql> show master status;
  12. +------------------+----------+--------------+------------------+
  13. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  14. +------------------+----------+--------------+------------------+
  15. | mysql-bin.000001 | 2125 | | |
  16. +------------------+----------+--------------+------------------+
  17. 1 row in set (0.00 sec)
  18. mysql> SELECT CURRENT_TIMESTAMP;
  19. +---------------------+
  20. | CURRENT_TIMESTAMP |
  21. +---------------------+
  22. | 2014-11-26 17:58:08 |
  23. +---------------------+
  24. 1 row in set (0.00 sec)
 3.4 以上的操作完成之后,便可以執行數據庫的恢復測試

點擊(此處)折疊或打開

  1. [root@mysql02 data]# mysqlbackup --defaults-file=/backup/server-my.cnf --datadir=/data/mysql --backup-dir=/backup/ copy-back
  2. MySQL Enterprise Backup version 3.11.0 Linux-3.8.13-16.2.1.el6uek.x86_64-x86_64 [2014/08/26]
  3. Copyright (c) 2003, 2014, Oracle and/or its affiliates. All Rights Reserved.
  4.  mysqlbackup: INFO: Starting with following command line ...
  5.  mysqlbackup --defaults-file=/backup/server-my.cnf --datadir=/data/mysql
  6.         --backup-dir=/backup/ copy-back
  7.  mysqlbackup: INFO:
  8. IMPORTANT: Please check that mysqlbackup run completes successfully.
  9.            At the end of a successful \'copy-back\' run mysqlbackup
  10.            prints \"mysqlbackup completed OK!\".
  11. 141126 17:59:58 mysqlbackup: INFO: MEB logfile created at /backup/meta/MEB_2014-11-26.17-59-58_copy_back.log
  12. --------------------------------------------------------------------
  13.                        Server Repository Options:
  14. --------------------------------------------------------------------
  15.   datadir = /data/mysql
  16.   innodb_data_home_dir = /data/mysql
  17.   innodb_data_file_path = ibdata1:10M:autoextend
  18.   innodb_log_group_home_dir = /data/mysql/
  19.   innodb_log_files_in_group = 2
  20.   innodb_log_file_size = 5242880
  21.   innodb_page_size = Null
  22.   innodb_checksum_algorithm = none
  23. --------------------------------------------------------------------
  24.                        Backup Config Options:
  25. --------------------------------------------------------------------
  26.   datadir = /backup/datadir
  27.   innodb_data_home_dir = /backup/datadir
  28.   innodb_data_file_path = ibdata1:10M:autoextend
  29.   innodb_log_group_home_dir = /backup/datadir
  30.   innodb_log_files_in_group = 2
  31.   innodb_log_file_size = 5242880
  32.   innodb_page_size = 16384
  33.   innodb_checksum_algorithm = none
  34.  mysqlbackup: INFO: Creating 14 buffers each of size 16777216.
  35. 141126 17:59:58 mysqlbackup: INFO: Copy-back operation starts with following threads
  36.         1 read-threads 1 write-threads
  37.  mysqlbackup: INFO: Could not find binlog index file. If this is online backup then server may not have started with --log-bin.
  38.         Hence, binlogs will not be copied for this backup. Point-In-Time-Recovery will not be possible.
  39. 141126 17:59:58 mysqlbackup: INFO: Copying /backup/datadir/ibdata1.
  40.  mysqlbackup: Progress in MB: 200 400 600
  41. 141126 18:00:22 mysqlbackup: INFO: Copying the database directory \'john\'
  42. 141126 18:00:23 mysqlbackup: INFO: Copying the database directory \'mysql\'
  43. 141126 18:00:23 mysqlbackup: INFO: Copying the database directory \'performance_schema\'
  44. 141126 18:00:23 mysqlbackup: INFO: Completing the copy of all non-innodb files.
  45. 141126 18:00:23 mysqlbackup: INFO: Copying the log file \'ib_logfile0\'
  46. 141126 18:00:23 mysqlbackup: INFO: Copying the log file \'ib_logfile1\'
  47. 141126 18:00:24 mysqlbackup: INFO: Creating server config files server-my.cnf and server-all.cnf in /data/mysql
  48. 141126 18:00:24 mysqlbackup: INFO: Copy-back operation completed successfully.
  49. 141126 18:00:24 mysqlbackup: INFO: Finished copying backup files to \'/data/mysql\'
  50. mysqlbackup completed //數據庫恢復完成
 授權并打開數據庫

點擊(此處)折疊或打開

  1. [root@mysql02 data]# chmod -R 777 mysql //需要授權后才能打開
  2. [root@mysql02 data]# cd mysql
  3. [root@mysql02 mysql]# ll
  4. 總用量 733220
  5. -rwxrwxrwx. 1 root root 305 11月 26 18:00 backup_variables.txt
  6. -rwxrwxrwx. 1 root root 740294656 11月 26 18:00 ibdata1
  7. -rwxrwxrwx. 1 root root 5242880 11月 26 18:00 ib_logfile0
  8. -rwxrwxrwx. 1 root root 5242880 11月 26 18:00 ib_logfile1
  9. drwxrwxrwx. 2 root root 4096 11月 26 18:00 john
  10. drwxrwxrwx. 2 root root 4096 11月 26 18:00 mysql
  11. drwxrwxrwx. 2 root root 4096 11月 26 18:00 performance_schema
  12. -rwxrwxrwx. 1 root root 8488 11月 26 18:00 server-all.cnf
  13. -rwxrwxrwx. 1 root root 1815 11月 26 18:00 server-my.cnf //沒有BKT數據庫
  14. [root@mysql02 mysql]# service mysqld start //啟動數據庫
 3.5 進行數據庫的恢復到時間點B

點擊(此處)折疊或打開

  1. [root@mysql02 mysql2]# pwd //備份的時候,需要備份binlog日志,之前的binlog目錄為/data/mysql2
  2. /data/mysql2
  3. [root@mysql02 mysql2]# mysqlbinlog --start-position=107 --stop-position=1203 mysql-bin.000001| mysql -uroot -p //根據post的位置進行恢復,當前的pos位置為107,恢復到pos位置到1203
  4. Enter password:
  5. [root@mysql02 mysql2]# mysql -uroot -p
  6. Enter password:
  7. Welcome to the MySQL monitor. Commands end with ; or \\g.
  8. Your MySQL connection id is 3
  9. Server version: 5.5.36-log Source distribution
  10. Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
  11. Oracle is a registered trademark of Oracle Corporation and/or its
  12. affiliates. Other names may be trademarks of their respective
  13. owners.
  14. Type \'help;\' or \'\\h\' for help. Type \'\\c\' to clear the current input statement.
  15. mysql> show databases;
  16. +--------------------+
  17. | Database |
  18. +--------------------+
  19. | information_schema |
  20. | BKT |
  21. | john |
  22. | mysql |
  23. | performance_schema |
  24. +--------------------+
  25. 5 rows in set (0.02 sec)
  26. mysql> use BKT
  27. Database changed
  28. mysql> show tables;
  29. +---------------+
  30. | Tables_in_BKT |
  31. +---------------+
  32. | john |
  33. +---------------+
  34. 1 row in set (0.00 sec)
  35. mysql> select * from john;
  36. +------+
  37. | id |
  38. +------+
  39. | 1 |
  40. | 2 |
  41. | 3 |
  42. | 4 |
  43. | 5 |
  44. +------+
  45. 5 rows in set (0.01 sec) //查看數據庫恢復成功
 3.6 恢復數據庫到時間點C

點擊(此處)折疊或打開

  1. [root@mysql02 mysql2]# mysqlbinlog --start-date=\"2014-11-27 09:21:56\" --stop-date=\"2014-11-27 09:22:33\" mysql-bin.000001| mysql -uroot -p123456 //本次通過基于時間點的恢復,恢復到時間點C
  2. Warning: Using unique option prefix start-date instead of start-datetime is deprecated and will be removed in a future release. Please use the full name instead.
  3. Warning: Using unique option prefix stop-date instead of stop-datetime is deprecated and will be removed in a future release. Please use the full name instead.
  4. [root@mysql02 mysql2]# mysql -uroot -p
  5. Enter password:
  6. Welcome to the MySQL monitor. Commands end with ; or \\g.
  7. Your MySQL connection id is 6
  8. Server version: 5.5.36-log Source distribution
  9. Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
  10. Oracle is a registered trademark of Oracle Corporation and/or its
  11. affiliates. Other names may be trademarks of their respective
  12. owners.
  13. Type \'help;\' or \'\\h\' for help. Type \'\\c\' to clear the current input statement.
  14. mysql> show databases;
  15. +--------------------+
  16. | Database |
  17. +--------------------+
  18. | information_schema |
  19. | BKT |
  20. | john |
  21. | mysql |
  22. | performance_schema |
  23. +--------------------+
  24. 5 rows in set (0.00 sec)
  25. mysql> use BKT
  26. Database changed
  27. mysql> select * from john;
  28. +------+
  29. | id |
  30. +------+
  31. | 1 |
  32. | 2 |
  33. | 3 |
  34. | 4 |
  35. | 5 |
  36. | 6 |
  37. | 7 |
  38. | 8 |
  39. | 9 |
  40. | 10 |
  41. +------+
  42. 10 rows in set (0.00 sec) //經過檢查成功恢復到時間點C
 
四、mysqlbinlog的其他總結:以上是利用binlog文件進行基于時間點binlog的POS位置恢復的測試,mysqlbinlog的使用還有很多功能,運行mysqlbinlog --help可以查看相應參數;
4.1 查看binlog的內容:[root@mysql02 mysql2]# mysqlbinlog mysql-bin.000001 
4.2 mysqlbinlog的其他常用參數:

-h  根據數據庫的IP
-P  根據數據庫所占用的端口來分
-server-id 根據數據庫serverid來還原(在集群中很有用)
-d  根據數據庫名稱

例如: [root@mysql02 mysql2]# mysqlbinlog-d BKT mysql-bin.000001//還原BKT數據庫的信息

參數的組合使用:

點擊(此處)折疊或打開

  1. [root@mysql02 mysql2]# mysqlbinlog --start-date=\"2014-11-27 09:21:56\" --stop-date=\"2014-11-27 09:22:33\" -d BKT -h 127.0.0.1 /var/lib/mysql/mysql-bin.000001 |mysql -u root -p
  2. #如果有多個binlog文件,用逗號隔開;
 
4.4 恢復是一件很重要的事情,如果不知道具體要恢復的時間點,請把binlog文件先轉換成文本文件,詳細查看完相應的內容再進行恢復;
[root@mysql02 mysql2]# mysqlbinlogmysql-bin.000001 > /tmp/00001.sql

總結:備份有時候永遠都用不上,但是你永遠也不知道什么時候會用上,正所謂養兵千日用兵一時,作為一個合格的DBA有個可用的備份,就可以做到胸有成竹;




 




網頁名稱:利用binlog進行數據庫的還原
URL標題:http://m.kartarina.com/article32/pgogsc.html

成都網站建設公司_創新互聯,為您提供Google定制開發網站設計公司品牌網站設計網站制作網站排名

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都seo排名網站優化
主站蜘蛛池模板: 免费无码AV一区二区| 无码视频免费一区二三区| 亚洲国产综合无码一区二区二三区 | 人妻少妇精品无码专区| 免费看无码自慰一区二区| 久久精品无码一区二区三区| 亚洲精品av无码喷奶水糖心 | 亚洲?v无码国产在丝袜线观看| 中文字幕在线无码一区| 日本无码WWW在线视频观看| 国产成人无码AV一区二区在线观看| 中文字幕无码不卡一区二区三区 | 免费一区二区无码东京热| 无码福利一区二区三区| 中文字幕无码乱人伦| 久久亚洲精品无码gv| 亚洲av无码片区一区二区三区| 人妻中文无码久热丝袜| 无码h黄肉3d动漫在线观看| 精品无码一区二区三区在线 | 精品久久亚洲中文无码| 少妇无码AV无码一区| 国产精品无码一本二本三本色 | 亚洲AV无码一区二区一二区| 亚洲AV无码久久精品狠狠爱浪潮| 国产成人无码A区在线观看导航| 中文无码不卡的岛国片| 国产成年无码久久久久毛片| 中文字幕av无码一区二区三区电影 | 无码人妻久久一区二区三区| 无翼乌工口肉肉无遮挡无码18| 丰满亚洲大尺度无码无码专线 | 国精品无码一区二区三区在线| 亚洲日韩精品无码专区网站 | 亚洲国产精品无码专区影院| 精品久久久久久无码国产| 亚洲av无码国产精品色在线看不卡| 永久免费AV无码网站在线观看| 无码天堂亚洲国产AV| 日产无码1区2区在线观看| 国产V片在线播放免费无码|