centos中mysql数据库恢复方法
导读:CentOS 下 MySQL 数据库恢复方法 一 场景与准备 明确备份类型: 逻辑备份(如 mysqldump 生成的 .sql/.sql.gz 文件),适合跨小版本恢复、灵活选择性恢复。 物理备份(拷贝 /var/lib/mysql...
CentOS 下 MySQL 数据库恢复方法
一 场景与准备
- 明确备份类型:
- 逻辑备份(如 mysqldump 生成的 .sql/.sql.gz 文件),适合跨小版本恢复、灵活选择性恢复。
- 物理备份(拷贝 /var/lib/mysql 数据目录或 LVM 快照),恢复快,但强烈建议同版本、同配置,变更前先停库并备份现有数据目录。
- 确认服务名:CentOS 7 常见为 mysqld,部分环境为 mysql,以下以 mysqld 为例。
- 基本检查与准备:
- 查看状态:
systemctl status mysqld;必要时启动:systemctl start mysqld。 - 备份当前数据目录(物理恢复前务必执行):
cp -a /var/lib/mysql /var/lib/mysql_bak_$(date +%F)。 - 权限与目录:MySQL 数据目录默认 /var/lib/mysql,恢复后需确保属主为 mysql:mysql。
- 查看状态:
二 方法一 逻辑备份恢复 mysqldump
- 恢复单库:
- 如库不存在先建库:
mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS your_db; " - 导入:
mysql -u root -p your_db < /path/backup.sql
- 如库不存在先建库:
- 恢复全库:
- 方式 A(导入到现有实例):
mysql -u root -p < /path/all_databases.sql - 方式 B(全新实例):先初始化数据目录(视安装方式选择,如
mysql_install_db --user=mysql或使用系统包管理器初始化),再导入。
- 方式 A(导入到现有实例):
- 压缩备份:
- 解压导入:
gunzip < /path/backup.sql.gz | mysql -u root -p your_db - 直接管道:
zcat /path/backup.sql.gz | mysql -u root -p your_db
- 解压导入:
- 常用 mysqldump 选项(用于生成可恢复性更好的备份):
- InnoDB 一致性热备:
mysqldump -u root -p --single-transaction --flush-logs --master-data=2 --databases your_db > backup.sql - 全库备份:
mysqldump -u root -p --all-databases --single-transaction --flush-logs --master-data=2 > all.sql - 说明:
--single-transaction保证一致性,--flush-logs便于定位增量起点,--master-data=2在备份中记录二进制日志位置
- InnoDB 一致性热备:
三 方法二 时间点恢复 基于二进制日志
- 前提:已开启二进制日志,且全备中记录了位置(如
--master-data=2输出中的MASTER_LOG_FILE与MASTER_LOG_POS)。 - 步骤:
- 先做全量恢复(见上节)。
- 临时关闭会话级二进制日志,避免重放过程再次写入:
mysql -u root -p -e "SET sql_log_bin=0; " - 用 mysqlbinlog 导出增量并导入:
- 指定起点:
mysqlbinlog --start-position=POS /var/lib/mysql/mysql-bin.00000X | mysql -u root -p - 指定时间窗:
mysqlbinlog --start-datetime="2026-01-01 10:00:00" --stop-datetime="2026-01-01 11:00:00" /var/lib/mysql/mysql-bin.00000X | mysql -u root -p - 多文件追加:
mysqlbinlog mysql-bin.00000X > > inc.sql & & mysqlbinlog mysql-bin.00000Y > > inc.sql后mysql -u root -p < inc.sql
- 指定起点:
- 如为误删等操作,可在导出时编辑 inc.sql 注释或删除对应 DROP/DELETE 语句后再导入。
- 导入完成后可
SET sql_log_bin=1;恢复二进制日志写入(如业务需要)。
四 方法三 物理备份恢复 拷贝数据目录或 LVM 快照
- 适用:同版本、同平台、同配置的物理恢复,速度快。
- 步骤:
- 停库:
systemctl stop mysqld - 备份当前数据目录:
cp -a /var/lib/mysql /var/lib/mysql_bak_$(date +%F) - 恢复:
- 解压/拷贝回数据目录:
rsync -a /backup/mysql/ /var/lib/mysql/或cp -a /backup/mysql/* /var/lib/mysql/ - 修正权限:
chown -R mysql:mysql /var/lib/mysql
- 解压/拷贝回数据目录:
- 启动:
systemctl start mysqld - 验证:
mysql -u root -p -e "SHOW DATABASES; "并检查错误日志/var/log/mysqld.log
- 停库:
- 注意:跨版本直接覆盖数据目录风险高,建议用逻辑备份或升级工具迁移。
五 验证与常见问题处理
- 快速验证:
- 登录:
mysql -u root -p - 库表检查:
SHOW DATABASES; USE your_db; SHOW TABLES; SELECT COUNT(*) FROM your_table; - 错误日志:
tail -n50 /var/log/mysqld.log排查启动或导入异常。
- 登录:
- 常见问题:
- 权限错误:恢复后执行
chown -R mysql:mysql /var/lib/mysql。 - 导入报错(表已存在/字符集不一致):确认目标库为空或使用新库;必要时调整
CREATE DATABASE ... DEFAULT CHARSET utf8mb4。 - 版本不兼容:物理恢复尽量同版本;跨版本优先逻辑备份或迁移工具。
- 二进制日志恢复慢:按时间窗或位置精确导出,必要时拆分多个文件导入。
- 权限错误:恢复后执行
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos中mysql数据库恢复方法
本文地址: https://pptw.com/jishu/785802.html
