首页主机资讯centos中mysql数据库恢复方法

centos中mysql数据库恢复方法

时间2026-01-19 14:12:04发布访客分类主机资讯浏览761
导读: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

  • 恢复单库:
    1. 如库不存在先建库:mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS your_db; "
    2. 导入:mysql -u root -p your_db < /path/backup.sql
  • 恢复全库:
    • 方式 A(导入到现有实例):mysql -u root -p < /path/all_databases.sql
    • 方式 B(全新实例):先初始化数据目录(视安装方式选择,如 mysql_install_db --user=mysql 或使用系统包管理器初始化),再导入。
  • 压缩备份:
    • 解压导入: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 在备份中记录二进制日志位置

三 方法二 时间点恢复 基于二进制日志

  • 前提:已开启二进制日志,且全备中记录了位置(如 --master-data=2 输出中的 MASTER_LOG_FILEMASTER_LOG_POS)。
  • 步骤:
    1. 先做全量恢复(见上节)。
    2. 临时关闭会话级二进制日志,避免重放过程再次写入:mysql -u root -p -e "SET sql_log_bin=0; "
    3. 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.sqlmysql -u root -p < inc.sql
    4. 如为误删等操作,可在导出时编辑 inc.sql 注释或删除对应 DROP/DELETE 语句后再导入。
    5. 导入完成后可 SET sql_log_bin=1; 恢复二进制日志写入(如业务需要)。

四 方法三 物理备份恢复 拷贝数据目录或 LVM 快照

  • 适用:同版本、同平台、同配置的物理恢复,速度快。
  • 步骤:
    1. 停库:systemctl stop mysqld
    2. 备份当前数据目录:cp -a /var/lib/mysql /var/lib/mysql_bak_$(date +%F)
    3. 恢复:
      • 解压/拷贝回数据目录:rsync -a /backup/mysql/ /var/lib/mysql/cp -a /backup/mysql/* /var/lib/mysql/
      • 修正权限:chown -R mysql:mysql /var/lib/mysql
    4. 启动:systemctl start mysqld
    5. 验证: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
centos下mysql权限设置指南 centos上mysql日志查看技巧

游客 回复需填写必要信息