【Mysql】主库宕机解决方案

本文详细阐述了在Nacos主库宕机时,如何通过停止从库同步、选择最高位置、配置my.cnf并创建同步用户,完成主库切换的过程,适用于多库和单库场景。

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

事件背景:
一大早过来,nacos的主库服务器宕机了,要启用从库当主库来用
假设发生了突发事件,master宕机,现在的需求是要将从库提升为主库,另外一个为从库
从库状态mysql> show slave status\G
在这里插入图片描述

操作步骤:

一、多个从库的情况

1.确保所有的relay log全部更新完毕,在每个从库上执行stop slave io_thread;
再每个从库执行show processlist;
直到看到Has read all relay log,则表示从库更新都执行完毕了
在这里插入图片描述
2.登陆所有从库,查看master.info文件,对比选择pos最大的作为新的主库,如下图
在这里插入图片描述
下表显示了master.info中各行之间的简单解释说明。
在这里插入图片描述
3.登陆新的主库,执行stop slave;
并进入数据库目录,删除master.inforelay-log.info文件,
配置my.cnf文件,开启log-bin,本次有下面的参数

log_bin=mysql-bin
binlog_format=mixed

如果有log-slaves-updatesread-only则要注释掉,
执行reset master;
执行systemctl restart mysqld,重启mysql参数生效
4.创建用于同步的用户并授权slave;

1、登录数据库
mysql -h 127.0.0.1 -uroot -p
Enter password:

2、新建主从同步账号
mysql> CREATE USER 'repl'@'从库ip' IDENTIFIED WITH mysql_native_password BY '同步账号的密码';
Query OK, 0 rows affected (0.00 sec)

3、给主从同步账号赋予REPLICATION权限
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'从库ip';
Query OK, 0 rows affected (0.00 sec)

4、更新数据
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

5、查新的主库状态信息
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      838 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql>

5.登录另外一台从库,执行stop slave停止同步
6.从库连接到新的主库进行同步

1、登录数据库
mysql -h 127.0.0.1 -uroot -p
Enter password:

2、建立主从关系
mysql> CHANGE MASTER TO MASTER_HOST='主库ip',MASTER_USER ='repl', MASTER_PASSWORD='同步账号的密码',MASTER_LOG_FILE='主库的File值',MASTER_LOG_POS=主库Position值;
Query OK, 0 rows affected, 1 warning (0.02 sec)

3、启动从库
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

4、查看主从状态
mysql> show slave status\G

7.修改新的master数据,测试slave是否同步更新

二、单个从库的情况

1.确保所有的relay log全部更新完毕,从库执行show processlist;
直到看到Slave Has read all relay log,则表示从库更新都执行完毕了
2.从库执行stop slave停止同步
3.从库配置my.cnf文件,开启log-bin,本次有下面的参数

log_bin=mysql-bin
binlog_format=mixed

如果有log-slaves-updatesread-only则要注释掉,
执行systemctl restart mysqld,重启mysql,参数生效
4.修改相关程序访问从库IP。

<think>嗯,用户想知道MySQL宕机和挂起之间的区别,以及可能的原因和解决方案。首先,我得先理清楚这两个术语的具体含义。宕机通常指的是MySQL服务完全停止运行,无法响应任何请求,而挂起可能是指服务还在运行,但处于无法处理请求的卡死状态。接下来需要确认这两种情况的不同表现和可能的原因。 根据用户提供的引用,引用[4]提到了启动从服务器并保持数据完整性,可能涉及复制过程中的问题。引用[2]提到InnoDB ReplicaSet,主从复制的管理,可能和服务器状态有关。可能需要考虑主从复制中的问题是否会导致宕机或挂起。 宕机的原因可能包括硬件故障、内存溢出、InnoDB引擎崩溃或数据文件损坏。例如,内存不足可能导致MySQL进程被系统终止,而InnoDB的崩溃可能是由于事务日志损坏。解决方案可能需要检查错误日志,进行硬件诊断,或者修复数据文件。 挂起的原因可能涉及死锁、长时间运行的查询、资源争用或复制延迟。比如,一个未提交的事务可能持有锁,导致其他查询被阻塞,看起来像是挂起。这时候需要分析当前进程,杀掉阻塞的查询或优化事务处理。引用[5]提到基于Servlet容器的Filter方案,虽然和数据库无关,但可能间接影响应用层对数据库的请求处理,导致资源耗尽。 在解决方案部分,宕机需要重启服务、修复数据、调整配置参数,而挂起则需要分析进程、优化查询、调整超时设置。引用[3]提到数据库高可用方案,可能建议使用主从复制或集群来提升可用性,减少宕机影响。 需要注意的是,用户提供的引用中有一些可能不太相关的内容,比如引用[5]关于Servlet容器的部分,可能需要忽略。确保回答基于正确的引用内容,比如引用[2]和[4]涉及复制和主从配置,可能与高可用性有关,但需要准确关联到宕机和挂起的问题上。 最后,生成相关问题时要围绕区别、原因、解决方案展开,可能涉及日志分析、复制问题、性能优化等。确保问题有针对性,帮助用户进一步理解。</think>### MySQL宕机与挂起的区别、原因及解决方案 #### **一、概念区别** 1. **宕机(Crash)** - **定义**:MySQL服务完全停止运行,进程消失,无法响应任何请求。例如:`mysqld`进程被强制终止或异常退出[^1][^4]。 - **表现**:客户端连接直接报错(如`Can't connect to MySQL server`),日志中可能记录崩溃原因(如`Segmentation fault`)。 2. **挂起(Hang)** - **定义**:MySQL进程仍在运行,但处于“假死”状态,无法处理新请求或响应极慢[^2][^4]。 - **表现**:客户端连接超时,查询长时间无返回,日志中可能无明确错误信息。 --- #### **二、常见原因** ##### **宕机原因** 1. **硬件/系统故障** - 磁盘空间耗尽、内存不足(OOM Killer终止进程)[^1]。 - 服务器断电或硬件损坏。 2. **MySQL内部错误** - InnoDB引擎崩溃(如事务日志损坏、数据文件损坏)。 - 关键系统表损坏(如`mysql.user`表)。 - 未处理的致命错误(如`double free`内存错误)。 3. **配置问题** - 错误的参数设置(如`innodb_buffer_pool_size`超过物理内存)。 - 并发连接数过高导致资源耗尽。 ##### **挂起原因** 1. **锁争用** - 未提交的事务长期持有行锁/表锁,导致其他查询阻塞。 - 死锁未被自动检测或手动处理。 2. **资源瓶颈** - CPU或I/O负载过高(如全表扫描、大事务写入)。 - 网络问题导致复制线程阻塞(主从同步延迟)[^4]。 3. **代码缺陷** - MySQL自身Bug(如特定版本的内存泄漏)。 - 存储引擎插件异常(如MyISAM表损坏)。 --- #### **三、解决方案** ##### **宕机处理** 1. **紧急恢复** - 检查错误日志(`/var/log/mysqld.log`)定位崩溃原因[^1]。 - 尝试重启MySQL服务:`systemctl restart mysqld`。 - 使用`innodb_force_recovery`模式修复InnoDB表[^3]。 2. **预防措施** - 部署高可用架构(如InnoDB ReplicaSet主从复制)。 - 定期备份数据并验证完整性。 ##### **挂起处理** 1. **诊断与缓解** - 查看当前进程:`SHOW PROCESSLIST;`,终止阻塞查询(`KILL <ID>`)。 - 分析慢查询日志,优化低效SQL语句。 - 调整参数:增加`innodb_lock_wait_timeout`、限制`max_connections`。 2. **资源优化** - 升级硬件(如SSD提升I/O性能)。 - 启用读写分离,分担主库压力。 --- #### **四、对比总结** | **场景** | **宕机** | **挂起** | |----------------|-------------------------------|-------------------------------| | **进程状态** | 完全终止 | 仍在运行但无响应 | | **恢复难度** | 高(需数据修复) | 中(需解除阻塞) | | **日志信息** | 明确错误(如崩溃日志)[^1] | 可能无直接错误(需性能分析) | | **典型方案** | 主从切换、数据恢复 | 查询优化、资源扩容 | ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值