mysql之 重建GTID下主从关系

本文详细介绍MySQL数据库的完整备份及恢复流程,包括主库备份命令的解析、从库的初始化与同步,以及GTID环境下可能遇到的问题和解决办法。


主库:

mysqldump -uroot -pmysql -S /tmp/mysql.sock1 --single-transaction --add-drop-database --master-data=1
-ER --all-databases>test_backup.sql


说明:
--all-databases :备份所有的数据库
--single-transaction : 在一个事物中导出,确保产生一致性的备份 ,当前只对innodb支持
--master-data : 备份的时候dump出 CHANGE MASTER 信息(file  和 pos),可供 主从复制 的时候使用,默认值为1 。当值设置为 2 的时候,也会    dump出信息,但是会被 注释 掉。
--add-drop-database : 导出的sql中,包含如果数据库存在就删除在创建的sql
-E,指定导出事件(events)。
-R,指定导出存储程序(函数和过程)。

从库:
mysql>reset master;
mysql>reset slave all;

-- 导入数据库 
# mysql -uroot -pmysql <test_backup.sql

mysql>change master to
master_host='10.100.25.40',
master_port=3307,
master_user='rpl',
master_password='mysql', 
master_auto_position=1;

mysql> start slave;
mysql> show slave status\G;


说明:

## 在开启GTID数据库下导入报错
mysql -uroot -p userdb < userdb.sql
Password:xxxxxxxx
ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.

mysql提示: 当前数据库实例中开启了 GTID 功能, 在开启有 GTID 功能的数据库实例中, 导出其中任何一个库, 如果没有显示地指定--set-gtid-purged参数, 都会提示这一行信息. 意思是默认情况下, 导出的库中含有 GTID 信息, 如果不想导出包含有 GTID 信息的数据库, 需要显示地添加--set-gtid-purged=OFF参数.或者在导入时,清空所有原GTID信息(reset master;reset slave all;)

<think> 首先,用户的问题是关于MySQL主从复制在GTID模式下进行手动调整的方法。用户明确表示:"我想查找在MySQL部署主从GTID模式下进行手动调整的方法"。所以,我需要专注于回答如何手动调整MySQL主从复制在GTID模式下的配置或问题。 从系统级指令中,我有以下要求: - 所有行内数学表达式使用$...$格式。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识。 - 回答结构清晰,帮助用户逐步解决问题,保证回答真实可靠。 用户提供了三个引用: - 引用[1]:解释GTID是什么和优势。 - 引用[2]:描述GTID主从复制原理。 - 引用[3]:一个change master to命令的示例,但这是针对传统复制的,不是GTID模式。 引用[3]中的命令是传统的基于binlog位置的主从配置,不是GTID模式。在GTID模式下,通常不需要指定master_log_file和master_log_pos,因为GTID会自动定位。 用户说:"上述引用仅供参考,并不是用户真正的需求",所以我不能直接复制这些引用,但可以基于它们提供信息。用户真正的需求是手动调整GTID模式下的主从复制。 关键点: - GTID模式使用全局事务标识符(GTID)来追踪事务。 - 手动调整可能涉及:跳过事务、重新同步、更改配置等。 常见的手动调整场景: 1. **跳过事务**:当主从复制出现错误时,可能需要跳过某个导致错误的事务。 2. **重新配置主从**:如更改主服务器或重新建立复制。 3. **调整GTID设置**:如启用或禁用GTID模式。 4. **处理GTID集合**:如查看GTID状态、重置GTID等。 结构清晰的回答: - 逐步解释如何进行手动调整。 - 使用命令和代码示例。 - 引用信息时添加引用标识。 - 最后生成相关问题。 回答结构: 1. **介绍**:简要解释GTID模式和手动调整的背景。 2. **常见手动调整方法**: - 跳过事务。 - 重新配置主从。 - 其他调整如重置GTID。 3. **注意事项**:提醒风险。 4. **生成相关问题**。 使用中文回答。 LaTeX:可能不需要数学表达式,除非有公式。例如,GTID格式是server_uuid:transaction_id,但这不是数学公式。所以,可能不需要使用LaTeX数学格式。 生成相关问题:在回答后添加相关问题部分。 引用标识:当引用用户提供的引用时,在末尾添加[^1]、[^2]、[^3]。用户提供了三个引用,我应该自然地引用它们。 步骤: 1. 解释什么是GTID模式(基于引用[1])。 2. 描述手动调整方法: - 跳过事务:在从服务器上使用`SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1`(但在GTID模式下不推荐),更好的是使用`SET GTID_NEXT='GTID'`然后`BEGIN; COMMIT;`来模拟事务。 - 重新配置主从:使用`CHANGE MASTER TO`命令,指定`MASTER_AUTO_POSITION=1`,而不是文件位置。 - 其他:如查看GTID状态(`SHOW SLAVE STATUS\G`),重置GTID(谨慎使用,如`RESET MASTER`或`RESET SLAVE`)。 3. 提供命令示例。 4. 添加引用标识。 5. 生成相关问题。 确保回答可靠:基于MySQL官方文档或标准实践。 最终回答: - 用中文。 - 结构清晰:分点说明。 - 结尾有相关问题。 </think>以下是针对MySQL主从复制在GTID模式下进行手动调整的详细解答。GTID(Global Transaction Identifier)模式通过全局唯一事务ID(格式为$<server\_uuid>:<transaction\_id>$)简化了复制管理,但在实际部署中,手动调整可能涉及跳过错误事务、重新同步主从关系或修复数据不一致等问题[^1]。这些操作需要谨慎执行,以避免数据丢失或复制中断。以下步骤基于MySQL标准实践(适用于MySQL 5.6+版本),我将逐步引导您完成常见手动调整方法。 ### 1. **跳过特定错误事务** 当从库因某个事务(如主键冲突)复制失败时,需要手动跳过该事务。在GTID模式下,**不推荐**使用传统的`SQL_SLAVE_SKIP_COUNTER`命令,因为它可能导致GTID集合不一致。替代方法是通过模拟空事务来跳过指定GTID: - **步骤**: 1. 在从库上停止复制:`STOP SLAVE;` 2. 查看错误信息:执行`SHOW SLAVE STATUS\G`,记录失败的GTID(例如`server_uuid:123`)。 3. 模拟空事务: ```sql SET GTID_NEXT = 'server_uuid:123'; -- 替换为实际失败的GTID BEGIN; COMMIT; SET GTID_NEXT = 'AUTOMATIC'; ``` 4. 重启复制:`START SLAVE;` - **注意事项**:此方法仅在事务可安全跳过时使用(如数据冲突),跳过后检查数据一致性[^2]。 ### 2. **重新配置主从复制关系** 如果主库故障或需要重建复制链路,手动调整主从配置: - **步骤**: 1. 在从库上停止复制:`STOP SLAVE;` 2. 重置复制状态:`RESET SLAVE ALL;`(清除旧配置)。 3. 使用`CHANGE MASTER TO`命令配置新主库(**启用GTID自动定位**): ```sql CHANGE MASTER TO MASTER_HOST = '192.168.1.100', -- 替换为新主库IP MASTER_PORT = 3306, MASTER_USER = 'repl_user', MASTER_PASSWORD = 'password', MASTER_AUTO_POSITION = 1; -- 关键:启用GTID自动同步 ``` 4. 启动复制:`START SLAVE;` - **验证**:运行`SHOW SLAVE STATUS\G`,确保`Slave_IO_Running`和`Slave_SQL_Running`均为`Yes`,且`Retrieved_Gtid_Set`与主库一致[^1]。 ### 3. **其他常见手动调整** - **重置GTID集合**(谨慎使用): 若GTID集合混乱(如从库意外写入数据),需重置: ```sql RESET MASTER; -- 清空GTID执行历史(先执行STOP SLAVE) SET @@GLOBAL.GTID_PURGED = ''; -- 重置已处理GTID集合 ``` - **强制同步GTID**: 当主从GTID不一致时,手动设置`gtid_purged`: ```sql STOP SLAVE; SET GLOBAL GTID_PURGED = 'server_uuid:1-100'; -- 替换为主库的GTID范围 START SLAVE; ``` - **查看GTID状态**: - 主库:`SHOW MASTER STATUS\G`(输出`Executed_Gtid_Set`)。 - 从库:`SHOW SLAVE STATUS\G`(检查`Executed_Gtid_Set`和`Retrieved_Gtid_Set`)。 ### 注意事项 - **备份优先**:手动调整前,务必备份数据库(使用`mysqldump`或物理备份)。 - **一致性检查**:调整后运行`pt-table-checksum`(Percona工具)验证数据一致性。 - **性能影响**:大事务跳过或重置可能短暂阻塞复制,建议在低峰期操作[^2]。 通过以上方法,您可以安全地处理GTID模式下的常见问题。如果需要更多细节,请提供具体错误日志或场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值