【Mysql】恢復slave上某幾張表的方法

小亮520cl發表於2016-07-07
主庫一直模擬插入資料
  1. [root@node1 ~]# vi tt.sh
  2. #!/bin/bash
  3. for ((i=1;i<=1000;i++))
  4. do
  5.  mysql -uroot -pESBecs00 -e "insert into test1 values($i,'chen$i')" hd
  6.  mysql -uroot -pESBecs00 -e "insert into test2 values($i,'chen$i')" hd
  7.  sleep 0.5
  8. done


1.關閉slave 複製程式
mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)

2.主庫備份需要恢復的表
  1. [root@node1 ~]# mysqldump -uroot -pESBecs00 --master-data=2 hd test2 >test2.sql
  2. [root@node1 ~]# more test2.sql
  3. -- MySQL dump 10.13 Distrib 5.5.50, for Linux (i686)
  4. --
  5. -- Host: localhost Database: hd
  6. -- ------------------------------------------------------
  7. -- Server version 5.5.50-log

  8. /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
  9. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
  10. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
  11. /*!40101 SET NAMES utf8 */;
  12. /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
  13. /*!40103 SET TIME_ZONE='+00:00' */;
  14. /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
  15. /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
  16. /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
  17. /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

  18. --
  19. -- Position to start replication or point-in-time recovery from
  20. --

  21. -- CHANGE MASTER TO MASTER_LOG_FILE='on.000001', MASTER_LOG_POS=38848;   --一定要開啟master-data幾下備份點資訊

  22. --
  23. -- Table structure for table `test2`
  24. --


3.恢復從庫到指定的點
mysql> start slave until master_log_file='on.000001',master_log_pos=38848;
Query OK, 0 rows affected, 1 warning (0.00 sec)
------這一步主要是為了同步斷開slave到備份完表這一段時間內其它表產生的資料
直到slq-thread為no,這期間的錯誤一律跳過即可,可用如下命令
stop slave;set global sql_slave_skip_counter=1;start slave;

4 在slave機器上匯入備份檔案
[root@node2 ~]# mysql -uroot -pESBecs00 hd<test2.sq


5開啟同步即可

點選(此處)摺疊或開啟

  1. mysql> start slave;
  2. Query OK, 0 rows affected (0.00 sec)

  3. mysql> show slave status\G;
  4. *************************** 1. row ***************************
  5.                Slave_IO_State: Waiting for master to send event
  6.                   Master_Host: 192.168.6.114
  7.                   Master_User: repl
  8.                   Master_Port: 3306
  9.                 Connect_Retry: 60
  10.               Master_Log_File: on.000001
  11.           Read_Master_Log_Pos: 137848
  12.                Relay_Log_File: mysqld-relay-bin.000003
  13.                 Relay_Log_Pos: 123785
  14.         Relay_Master_Log_File: on.000001
  15.              Slave_IO_Running: Yes
  16.             Slave_SQL_Running: Yes


</test2.sq

<test2.sq
GTID模式下參考:</test2.sq

<test2.sq
  1. c.新的until條件
  2. 5.6提供了新的util condition,可以根據GTID來決定備庫複製執行到的位置
  3. SQL_BEFORE_GTIDS:在指定的GTID之前停止複製
  4. SQL_AFTER_GTIDS :在指定的GTID之後停止複製
  5. 判斷函式為Relay_log_info::is_until_satisfied
  6. 詳細文件見: http://dev.mysql.com/doc/refman/5.6/en/start-slave.html

具體步驟如下:
  1. 1 模擬指令碼寫入---同上
  2. 2 stop slave
  3. 3 mysqldump test2  幾下gtid的資訊SET @@GLOBAL.GTID_PURGED='8a0d06d7-91cb-11e5-843b-00163ec09859:1-1973';
  4. 4 start slave until SQL_after_GTIDS='8a0d06d7-91cb-11e5-843b-00163ec09859:1-1973';
    1.                 Slave_IO_Running: Yes
                     Slave_SQL_Running: No
                
    2.               Retrieved_Gtid_Set: 6c8a10ed8a0d06d7-91cb-11e5-843b-00163ec09859:3931
    3.             Executed_Gtid_Set: 6c8a10ed8a0d06d7-91cb-11e5-843b-00163ec09859:1-1973   ---就是到這個點時,slave_sql執行緒會關閉
    4.                 Auto_Position: 1

  5. 5 匯入 備份的test2檔案(註釋掉gtid那行)

  6. 6 start slave


 

  1. 檢查
  2. (root@127.0.0.1) [gggg]> select * from test1
  3. 。。。
  4. 。。。
  5. | 379 | chen379 |
    +-----+---------+
    379 rows in set (0.00 sec)   ---數量一致,資料未丟失


  1. (root@127.0.0.1) [gggg]> select * from test1
  1. | 406 | chen406 |
    +-----+---------+
    406 rows in set (0.00 sec)  ---數量一致,資料未丟失






</test2.sq

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29096438/viewspace-2121676/,如需轉載,請註明出處,否則將追究法律責任。

相關文章