mysql双主gtid模式,在有数据情况下
【1】需求
(1.1)需求
现有主从 b(主)=》c从
现在想合并数据,有一个主库 a,a与b的数据无交集
想把 b变成a的从,从而构建 a=>b=>c 的复制情况
如何在 b不 reset master 的情况下 b变成a的从啊(gtid模式)
最终的结果是 主库 a 会一直写入,b即做a的从库同时也是主库有数据写入
(1.2)架构
数据库版本:mysql8.0.22 社区版,启用 gtid
192.168.148.27 a 机器
192.168.148.39 b 机器
192.168.148.30 c 机器
《1》b(主)=》c(从)
《2》a(主)=》b(从,同时是主)=》c
【2】测试
(2.1)构造测试数据
-- <1> a / b 机器都创建复制账户 create user repl@'192.168.148.%' identified by 'a123456!'; grant replication client,replication slave on *.* to repl@'192.168.148.%';
reset master; -- <2> a 机器创建测试库 a ; create database a; create table a.a1(id int); insert into a.a1 values(1); -- <3> b 机器创建测试库 b ; create database b; create table b.b1(id int); insert into b.b1 values(1); -- <4> c 机器 change master to b机器 change master to master_host='192.168.148.39', master_user='repl', master_password='a123456!', master_auto_position=1;
start slave;
当前是 b(主)=》c(从),a 是独立主库;
(2.2)a机器的 a库数据初始化dump 到b机器
a机器:
mysqldump --single-transaction --master-data=2 --set-gtid-purged=ON -B a > a.txt
less a.txt
b 机器,执行上面这个 set @@global.gtid_purged....
成功了;
a机器上执行,修改dump出来的文件 去掉该参数,且把文件内的 binlog 修改为1;
sed -i 's/SET @@GLOBAL.GTID_PURGED=/#SET @@GLOBAL.GTID_PURGED=/g' a.txt sed -i 's/SET @@SESSION.SQL_LOG_BIN= 0/SET @@SESSION.SQL_LOG_BIN= 1/g' a.txt
b机器上应用 a.txt
mysql < a.txt
我们可以看到 a1表 只有 1 一行数据,2是我们mysqldump 导出该文件之后操作的。
(2.3)b 机器 change master to a机器
change master to master_host='192.168.148.27', master_user='repl', master_password='a123456!', master_auto_position=1; start slave;
核验:
(1)show slave status
(2)数据同步查看
至此完成;
a-b的复制,那么 b-c的复制有问题;
(2.4)b(主)=》c(从)的复制出现问题
报错如下:
Got fatal error 1236 from master when reading data from binary log:
'Cannot replicate because the master purged required binary logs. Replicate the missing transactions from elsewhere,
or provision a new slave from backup. Consider increasing the master's binary log expiration period.
The GTID set sent by the slave is '', and the missing transactions are '101e0f50-69e2-11ec-b4dc-000c2992a4b1:1-6''
很明显,报错是说确实事务:
missing transactions are '101e0f50-69e2-11ec-b4dc-000c2992a4b1:1-6'
那我们同理也是要在 c机器上运行:
stop slave; set @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ '101e0f50-69e2-11ec-b4dc-000c2992a4b1:1-6'; start slave;
成功:
【3】双主,a 也变成 b的从库
记住,我们的前提是 现在想合并数据,有一个主库 a,a与b的数据无交集
(3.1)b 机器的 b 库数据初始化dump 到 a 机器
b机器:
mysqldump --single-transaction --master-data=2 --set-gtid-purged=ON -B b > b.txt
这里我们就不做 b.txt 文件内容替换了
(3.2)应用 dump文件到 a 机器
[root@DB4 /data/dba]$ mysql < b.txt ERROR 3546 (HY000) at line 24: @@GLOBAL.GTID_PURGED cannot be changed: the added gtid set must not overlap with @@GLOBAL.GTID_EXECUTED
如上面代码,我们发现报错了;
文件中的 set @@global.gtid_pirged 是下面值:
SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ '101e0f50-69e2-11ec-b4dc-000c2992a4b1:1-7,aa548eae-d889-11ea-8601-000c29c8f925:1-12';
是因为有自己的gtid啊;那么我们去掉自己的gtid;那么我们自己的 gtid 是多少呢
我们可以看到是101开头的,那很明显了,我们把文件中的
SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ '101e0f50-69e2-11ec-b4dc-000c2992a4b1:1-7,aa548eae-d889-11ea-8601-000c29c8f925:1-12';
改成如下:
SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ 'aa548eae-d889-11ea-8601-000c29c8f925:1-12';
vim b.txt
应用,核验:如下
mysql < b.txt
(3.3)a 机器 change master to b 机器
b机器:
insert into b.b1 values(2),(3);
a 机器:
change master to master_host='192.168.148.39', master_user='repl', master_password='a123456!', master_auto_position=1; start slave;
核验:成功!
相关文章
- MySQL存储过程详解 mysql 存储过程
- mysql binlog 参数_MySQL Binlog常用参数
- mysql binary like_MYSQL的binary解决mysql数据大小写敏感问题的方法
- 报错:MySQL Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'
- MySQL + Laravel 中使用 GROUP BY 分组查询
- mysql远程连接 Host * is not allowed to connect to this MySQL server
- MySQL使用初步—mysql数据库的基本命令
- MySQL第四讲 MySql Undo日志 - 对聚簇索引进行CUD操作
- 【MySQL进阶-06】深入理解mysql的内核查询成本计算
- MySQL root修改普通用户密码及Mysql 修改root密码
- .NET/Mysql-petatoco连接mysql数据库
- 改变mysql客户端输出的字符串编码
- Mysql常用的命令
- mysql只更新日期不更新时分秒,Mysql取30天内每天最大的数据
- MYSQL导入csv类型的数据出现The MySQL server is running with the --secure-file-priv option
- 设置服务器的MySQL允许远程访问/外网访问
- mysql导出数据报错The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
- liunux mysql MySQL表名不区分大小写的设置方法
- Linux下的Mysql备份/恢复
- Amoeba for MySQL 非常好用的mysql集群软件
- ubuntu15.04中安装mysql和mysql-workbench
- (5.8)mysql高可用系列——MySQL中的GTID复制(实践篇)
- (5.6)mysql高可用系列——MySQL Utilities 管理工具
- 利用拷贝data目录文件的方式迁移mysql数据库
- MySQL性能优化的21个最佳实践 和 mysql使用索引
- mysql乐观锁总结和实践--转
- Linux下安装mysql-5.7.24
- [Mysql] EXISTS | NOT EXISTS