在LAMP(Linux, Apache, MySQL, PHP)环境中,MySQL数据库备份是系统维护的重要部分。以下是几种常用的MySQL备份方法:
mysqldump是MySQL自带的逻辑备份工具,适合中小型数据库。
mysqldump -u [username] -p[password] [database_name] > backup.sql
--all-databases
:备份所有数据库--single-transaction
:对InnoDB表进行一致性备份(不锁表)--routines
:包含存储过程和函数--events
:包含事件--triggers
:包含触发器mysqldump -u root -p --all-databases --single-transaction --routines --events --triggers > full_backup_$(date +%Y%m%d).sql
mysqlhotcopy [database_name] /path/to/backup/directory
启用二进制日志后,可以配合全量备份进行增量备份:
# 查看当前二进制日志文件
mysql -u root -p -e "SHOW MASTER STATUS"
# 备份二进制日志
cp /var/lib/mysql/mysql-bin.000001 /backup/mysql-bin.000001
创建定时备份脚本(/usr/local/bin/mysql_backup.sh
):
#!/bin/bash
# 配置
USER="root"
PASSWORD="your_password"
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
KEEP_DAYS=7
# 创建备份目录
mkdir -p $BACKUP_DIR/$DATE
# 备份所有数据库
mysqldump -u$USER -p$PASSWORD --all-databases --single-transaction --routines --events --triggers | gzip > $BACKUP_DIR/$DATE/all_databases.sql.gz
# 备份每个数据库单独文件
for db in $(mysql -u$USER -p$PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql|sys)")
do
mysqldump -u$USER -p$PASSWORD --single-transaction $db | gzip > $BACKUP_DIR/$DATE/$db.sql.gz
done
# 删除旧备份
find $BACKUP_DIR -type d -mtime +$KEEP_DAYS -exec rm -rf {} \;
设置脚本可执行并添加到cron:
chmod +x /usr/local/bin/mysql_backup.sh
每天凌晨3点执行:
0 3 * * * /usr/local/bin/mysql_backup.sh
对于大型InnoDB数据库,物理备份工具Percona XtraBackup更高效:
# 安装
sudo apt-get install percona-xtrabackup-24 # Ubuntu/Debian
sudo yum install percona-xtrabackup-24 # CentOS/RHEL
# 全量备份
innobackupex --user=root --password=your_password /backup/mysql/
定期验证备份文件是否可用:
# 检查SQL文件完整性
head -n 20 backup.sql | grep "MySQL dump"
tail -n 20 backup.sql | grep "Dump completed"
# 测试恢复(在测试环境)
mysql -u root -p test_db < backup.sql
根据您的数据库大小、业务需求和数据重要性,可以选择适合的备份策略或组合使用多种方法。