掌握mysqldump命令行备份、定时脚本备份和mysql恢复命令,能有效降低数据丢失风险,确保业务连续性和数据安全。
使用mysqldump进行逻辑备份
mysqldump是MySQL官方提供的逻辑备份工具,可以备份数据库的结构和数据。它支持全库备份、单表备份、部分数据备份等多种方式,非常灵活。mysqldump备份的文件是文本格式,便于阅读和移植。
全量备份命令:mysqldump -h主机名 -P端口 -u用户名 -p密码 数据库名 > 备份文件.sql。执行后会生成一个包含CREATE TABLE和INSERT语句的SQL文件,可以直接用于恢复。
恢复命令:mysql -h主机名 -P端口 -u用户名 -p密码 数据库名 < 备份文件.sql。这个方法简单可靠,适合中小型数据库。
物理备份与xtrabackup工具
Percona XtraBackup是开源的MySQL物理热备份工具,支持InnoDB和XtraDB存储引擎,能在线备份而不锁定表。备份速度快,恢复也高效。
安装后,使用xtrabackup --backup --target-dir=/backup/path --user=root --password=xxx命令进行全备。增量备份用--incremental-basedir指定基础备份目录。
恢复步骤:先准备备份xtrabackup --prepare --target-dir=/backup/path,然后拷贝到数据目录,最后重启MySQL服务。结合二进制日志能实现点对点恢复。
定时备份脚本实现自动化
编写Shell脚本实现MySQL自动备份,例如:#!/bin/bash DATE=$(date +%Y%m%d_%H%M%S) mysqldump -u root -p密码 dbname > /backup/db_$DATE.sql。然后用crontab -e添加0 2 * * * /path/to/backup.sh每天凌晨2点执行。
脚本中加入压缩:tar zcvf db_$DATE.sql.tar.gz db_$DATE.sql,并保留7天备份,删除旧文件find /backup -mtime +7 -delete。
测试恢复:在测试环境执行mysql < backup.sql,确保数据完整。定期验证备份文件是保障数据安全的关键。
从二进制日志恢复数据
MySQL二进制日志记录所有DML和DDL操作,开启log_bin后可用于精确恢复。查看日志内容:show binlog events。
恢复指定位置:mysqlbinlog mysql-bin.000001 | mysql -u root -p。结合全备+binlog可恢复到丢失时刻。
注意:定期清理旧binlog,避免磁盘满expire_logs_days=7配置自动过期。
常见故障恢复经验
数据库崩溃后,先检查错误日志/var/log/mysql/error.log,尝试mysqld_safe --skip-grant-tables启动跳过权限验证修复。
数据文件损坏,用innodb_force_recovery=1逐步尝试恢复级别,重启后dump数据到新库。
预防为主:多地异地备份、RAID磁盘阵列、监控告警及时发现问题,确保业务连续性。
FAQ
Q: mysqldump备份大表会很慢怎么办?
A: 用--single-transaction --quick --routines参数,并分表备份或用xtrabackup物理备份。
Q: 如何验证备份有效性?
A: 定期在测试环境完整恢复备份文件,检查数据一致性。
Q: 恢复后数据不一致怎么处理?
A: 检查时间点恢复的位置,使用checksum验证,或从多个备份中选择。
Q: 云数据库怎么备份?
A: 用RDS控制台快照备份或DTS数据传输服务,结合OSS存储自动备份。