Mysql之主从切换

本文详细介绍了MySQL主从切换的过程,包括从库变主库和主库变从库的步骤,强调了主从切换的风险,如数据丢失和锁表操作。同时提醒在切换前需确保从库已读取所有中继日志,主库需设置为只读模式,以防止数据不一致。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意:

1、主从切换比较危险,不到万不得已不推荐执行

2、在启动从库的时候必须先把数据同步(确保从库状态为has read all  relay log)

3、主库要锁表,停止写入(flush tables  with read lock; set  global  read_only  = on;)避免主从切换时的命令操作导致主从继续同步,也可以通过修改主库配置文件/etc/my.cnf.加入read-only=1参数

4、删除新的主服务器数据库目录中的master.info和relay-log.info文件,否则下次重启还会按照从服务器来启动,有可能会覆盖掉你的数据库


一、从库变主库:

msyql> stop  slave  io_thread;                用show  processlist来查看从库状态是否为has read all  relay log

mysql>stop  slave;                                停掉IO和SQL线程

mysql>reset   slave;        让从服务器忘记其在主服务器的二进制日志中的复制位置,它会删除master.info和relay-log.info文件,以及所有的中继日志,并产生一个新的中继日志

mysql>

### MySQL 主从切换配置教程及常见问题 在 MySQL 数据库中,主从切换是实现高可用性和数据冗余的重要手段。以下是关于 MySQL 主从切换的详细配置教程和常见问题的解决方案。 #### 1. 配置 MySQL 主从同步 首先需要确保主从同步已经正确配置并正常运行。根据提供的信息[^1],主服务器 (Master) 和从服务器 (Slave) 的 IP 地址分别为 `10.18.40.123:3306` 和 `10.18.40.23:3306`。以下为基本配置步骤: - **主服务器配置** 在主服务器的配置文件 `my.cnf` 中添加以下内容: ```ini [mysqld] server-id=1 log-bin=mysql-bin binlog-do-db=your_database_name ``` 然后重启 MySQL 服务以应用更改: ```bash systemctl restart mysqld ``` - **从服务器配置** 在从服务器的配置文件 `my.cnf` 中添加以下内容: ```ini [mysqld] server-id=2 relay-log=mysql-relay-bin log-slave-updates=1 read-only=1 ``` 同样需要重启 MySQL 服务以应用更改。 - **设置主从关系** 使用以下命令在从服务器上设置主从关系[^2]: ```sql CHANGE MASTER TO MASTER_HOST='10.18.40.123', MASTER_USER='replication_user', MASTER_PASSWORD='replication_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=1234; ``` 其中,`MASTER_LOG_FILE` 和 `MASTER_LOG_POS` 可通过在主服务器上执行 `SHOW MASTER STATUS;` 获取。 #### 2. 主从切换方法 主从切换通常分为手动切换和自动切换两种方式。 - **手动切换** 手动切换适用于计划内的维护或故障恢复场景。具体步骤如下: 1. 停止从服务器的复制线程: ```sql STOP SLAVE; ``` 2. 确保从服务器的数据与主服务器一致: ```sql SHOW SLAVE STATUS\G ``` 检查 `Seconds_Behind_Master` 是否为 0。 3. 将从服务器提升为主服务器: - 修改从服务器的配置文件,将 `server-id` 改为与原主服务器不同的值。 - 重启从服务器的 MySQL 服务。 4. 更新客户端连接地址,使其指向新的主服务器。 - **自动切换** 自动切换可以通过工具如 MHA (Master High Availability) 实现。MHA 能够监控主服务器状态,并在主服务器发生故障自动进行切换。 #### 3. 常见问题及解决方法 以下是 MySQL 主从同步和切换过程中常见的问题及其解决方法: - **问题 1:主从 UUID 冲突** 如果从库启动提示错误 `Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs`[^4],说明主从服务器的 UUID 相同。解决方法是在从服务器上删除 `auto.cnf` 文件并重启 MySQL 服务: ```bash rm -rf /var/lib/mysql/auto.cnf systemctl restart mysqld ``` - **问题 2:从库延迟** 如果从库存在延迟 (`Seconds_Behind_Master > 0`),可能是因为主库压力过大或网络延迟导致。可以通过优化查询、增加硬件资源或调整复制线程数来缓解。 - **问题 3:主从数据不一致** 如果发现主从数据不一致,可以使用工具如 `pt-table-checksum` 和 `pt-table-sync` 来检测和修复差异。 #### 4. 示例代码 以下是一个简单的脚本,用于检查主从状态并输出结果: ```python import mysql.connector def check_replication_status(host, user, password): connection = mysql.connector.connect( host=host, user=user, password=password ) cursor = connection.cursor(dictionary=True) cursor.execute("SHOW SLAVE STATUS") result = cursor.fetchone() if result and result['Slave_IO_Running'] == 'Yes' and result['Slave_SQL_Running'] == 'Yes': print(f"Replication is running on {host}.") else: print(f"Replication is not running on {host}.") check_replication_status('10.18.40.23', 'root', 'password') ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值