【Mysql】恢复slave上某几张表的方法

主库一直模拟插入数据
  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

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


GTID模式下参考:

  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. ([email protected]) [gggg]> select * from test1
  3. 。。。
  4. 。。。
  5. | 379 | chen379 |
    +-----+---------+
    379 rows in set (0.00 sec)   ---数量一致,数据未丢失


  1. ([email protected]) [gggg]> select * from test1
  1. | 406 | chen406 |
    +-----+---------+
    406 rows in set (0.00 sec)  ---数量一致,数据未丢失






来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29096438/viewspace-2121676/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29096438/viewspace-2121676/

你可能感兴趣的:(【Mysql】恢复slave上某几张表的方法)