mysql 排除部分表数据搭建主从

51 篇文章 1 订阅
26 篇文章 0 订阅

一、 背景

某大库主从同步中断,由于中断时间过长,从库relay log已被删除,需要重建。由于库太大,直接用mysqldump导出可能需要一天甚至几天,导入时间可能更长。沟通发现主库中存储历史数据的几个大表只会不断insert数据而不会update,delete旧数据,到指定时间后会drop分区。从库中不需要查询旧数据,即使故障切换到从库没有了这部分数据影响也不太大。

综上,准备在搭建主从时只导出大表的表结构而不导出数据,其余表则导出数据+表结构。

 

二、 操作步骤

0. 确定要排除的分区表

数据目录中分区表数据文件格式为:“表名#P#分区时间”,例如要排除的表为 test1、test2、test3

1. 在主库导出test1、test2、test3之外的其他表

mysqldump -uroot -p --single-transaction -R --default-character-set=utf8 --triggers --events --hex-blob --databases mydb --ignore-table=mydb.test3 --ignore-table=mydb.test2 --ignore-table=mydb.test1 --master-data=2 > mydb_`date "+%Y%m%d"`.sql

2. 在mydb主库导出历史大表的表结构

mysqldump -uroot -p -d mydb test3 test2 test1 > tables_`date "+%Y%m%d"`.sql

3. 从库获取主库备份文件

scp root@ip:/bak/*_20191108.sql /data/bakcup

4. 从库导入表数据

#导入其他表数据
mysql -uroot -p
reset master;
mysql -uroot -p < mydb_20191108.sql

#导入分区表结构
mysql -uroot -p
reset master;
use mydb;
source tables_20191108.sql

5. 在从库配置主从关系

less mydb_20191108.sql

找到以下部分

-- GTID state at the beginning of the backup
--
SET @@GLOBAL.GTID_PURGED='xxxxx';
--
-- Position to start replication or point-in-time recovery from
--
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.00xxxx', MASTER_LOG_POS=xxxxxx;

从库执行

stop slave;
reset master;
SET @@GLOBAL.GTID_PURGED='上面查到的值';
CHANGE MASTER TO MASTER_HOST='ip',MASTER_USER='root',MASTER_PASSWORD='xxx',MASTER_PORT=3306,MASTER_AUTO_POSITION=1;
start slave;
show slave status\G;

 

三、 报错小结

1. 导入时遇到报错

mysql -uroot -p < mydb_20191108.sql
ERROR 1840 (HY000): @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.

因为导出文件中有SET @@GLOBAL.GTID_PURGED='xxx'语句,该参数只能在@@GLOBAL.GTID_EXECUTED为空时设置,须先执行reset master清空@@GLOBAL.GTID_EXECUTED,再进行导入。

mysql -uroot -p
reset master;
mysql -uroot -p < mydb_20191108.sql

2. start slave遇到报错

mysql> start slave;
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository

解决方法

mysql> reset slave;
Query OK, 0 rows affected (0.00 sec)

mysql> start slave IO_THREAD;
Query OK, 0 rows affected (0.00 sec)

mysql> stop slave IO_THREAD;
Query OK, 0 rows affected (0.00 sec)

mysql> reset slave;
Query OK, 0 rows affected (0.17 sec)

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

mysql> show slave status\G;
*************************** 1. row ***************************
...
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
        Seconds_Behind_Master: 1354  <--  主从延迟,从库追上主库时为0

参考

http://www.unixfbi.com/578.html

https://www.cnblogs.com/shengdimaya/p/7681550.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hehuyi_In

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值