CentOS 下 MySQL 数据库恢复方法
一 场景与准备
systemctl status mysqld;必要时启动:systemctl start mysqld。cp -a /var/lib/mysql /var/lib/mysql_bak_$(date +%F)。二 方法一 逻辑备份恢复 mysqldump
mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS your_db;"mysql -u root -p your_db < /path/backup.sqlmysql -u root -p < /path/all_databases.sqlmysql_install_db --user=mysql 或使用系统包管理器初始化),再导入。gunzip < /path/backup.sql.gz | mysql -u root -p your_dbzcat /path/backup.sql.gz | mysql -u root -p your_dbmysqldump -u root -p --single-transaction --flush-logs --master-data=2 --databases your_db > backup.sqlmysqldump -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_FILE 与 MASTER_LOG_POS)。mysql -u root -p -e "SET sql_log_bin=0;"mysqlbinlog --start-position=POS /var/lib/mysql/mysql-bin.00000X | mysql -u root -pmysqlbinlog --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 -pmysqlbinlog mysql-bin.00000X >> inc.sql && mysqlbinlog mysql-bin.00000Y >> inc.sql 后 mysql -u root -p < inc.sqlSET sql_log_bin=1; 恢复二进制日志写入(如业务需要)。四 方法三 物理备份恢复 拷贝数据目录或 LVM 快照
systemctl stop mysqldcp -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/mysqlsystemctl start mysqldmysql -u root -p -e "SHOW DATABASES;" 并检查错误日志 /var/log/mysqld.log五 验证与常见问题处理
mysql -u root -pSHOW 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。