mysql从库损坏重建从库

当MySQL从库损坏无法同步时,可以按照以下步骤重建:首先备份主库,使用mysqldump;然后停止从库的复制进程并清除信息;接着删除从库的数据库;再还原备份到从库;通过备份文件找到binlog信息;最后,配置从库连接主库的新位置,并启动复制。

环境说明:mysql主从集群,从库损坏无法继续同步,本文为重建mysql从库。

1. 备份主库

mysqldump -uroot -p'密码' --set-gtid-purged=OFF --single-transaction --master-data=1 --all-databases  > /u01/mysqlbak/20230217.dump`

2. 停止备库的slave

stop slave;
reset slave all;

3. 删除备库的数据库

drop database 数据库名1drop database 数据库名2drop database 数据库名3# 我们全库备份并不需要 create database;

4. 还原数据库

 ​`source /home/jmms/20230217.dump`

5. 查看数据库备份中的信息

​cat /home/jmms/20230217.dump |grep "MASTER_LOG_FILE"
# 在最开口的信息,我们需要记住下面两个值,后面会用 
-- CHANGEMASTER TO MASTER_LOG_FILE='binlog.000070',MASTER_LOG_POS=57668600;

6. 修改重新配置为新的从库

change master to master_host='主节点IP',master_user='用于同步的账号',master_password='密码',master_log_file='binlog.000070',master_log_pos=57668600;	 
	# 其中master_log_file和master_log_pos的值来自第五步获取到的信息

7. 开启从库,查看状态

start slave;show slave status\G​ ;	 

在这里插入图片描述

误删MySQL系统数据库(如 `mysql` 系统)会导致数据库无法正常启动或登录,影响用户权限管理和系统功能。以下是几种可行的恢复方法,适用于不同场景和条件。 ### 使用 `mysql_upgrade` 恢复系统 如果误删了MySQL的系统数据库(如 `mysql` ),但数据库服务仍能启动,可以通过 `mysql_upgrade` 工具尝试恢复。该工具会检查系统表并重建缺失的结构。 在MySQL的 `bin` 目录下执行以下命令: ```bash mysql_upgrade -u root -p --force ``` 输入密码后,`mysql_upgrade` 将尝试修复系统表并新生成缺失的数据库结构。此方法适用于系统表损坏或部分删除的情况[^1]。 ### 新安装MySQL并恢复数据文件 如果 `mysql` 数据库已被删除且无法启动服务,可以尝试新安装MySQL并恢复原始数据文件。此方法要求事先备份了数据目录(通常位于 `C:\ProgramData\MySQL\MySQL Server 5.x\data`)。 操作步骤如下: 1. **备份原数据目录**:包括 `ibdata1` 文件和所有数据库文件(`.frm`、`.ibd`)。 2. **卸载MySQL**:使用卸载工具确保完全删除旧版本。 3. **新安装MySQL**:下载并安装相同或兼容版本的MySQL。 4. **替换数据目录**:将备份的 `data` 目录内容(特别是 `ibdata1` 和 `mysql` 数据库文件)复制到新安装的MySQL数据目录中。 5. **修改 `my.ini`**:确保 `datadir` 指向正确的数据目录路径。 6. **MySQL服务**:验证是否能正常启动并访问系统[^2]。 ### 利用二进制日志(binlog)进行恢复 如果MySQL启用了二进制日志(binlog),并且误删操作被记录在内,可以通过解析binlog文件恢复误删的数据库。 1. **查看当前binlog文件列表**: ```sql SHOW BINARY LOGS; ``` 2. **使用 `mysqlbinlog` 工具解析日志**: ```bash mysqlbinlog mysql-bin.000001 > recovery.sql ``` 3. **编辑 `recovery.sql`**:删除不相关的操作,保留恢复 `mysql` 数据库的部分。 4. **导入恢复脚本**: ```bash mysql -u root -p < recovery.sql ``` 此方法要求binlog文件完整且包含误删前的数据操作记录[^4]。 ### 使用 `lsof` 恢复被删除但仍在使用的文件(Linux环境) 在Linux系统中,如果某个进程仍在使用被删除的数据库文件(如 `ibdata1` 或 `.ibd` 文件),即使文件已被删除,仍可通过 `lsof` 工具找回文件描述符并恢复文件。 1. **查找打开文件的进程**: ```bash lsof | grep deleted ``` 2. **定位文件描述符**:在 `/proc/<pid>/fd/` 目录下查找对应的文件描述符。 3. **恢复文件**:使用 `cp` 命令将文件从 `/proc/<pid>/fd/<fd>` 拷贝到安全位置。 此方法适用于文件刚被删除且进程仍在运行的情况,仅限Linux系统[^5]。 ### 使用Navicat等第三方工具恢复 如果使用了Navicat等数据库管理工具,某些版本支持从备份中恢复数据库。若误删数据库后没有物理备份,但有逻辑备份(如 `.sql` 导出文件),可以通过导入方式恢复。 如果没有备份,此类工具无法直接恢复数据,建议结合binlog或文件恢复手段进行操作[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值