定期备份数据库是防止数据丢失最重要的措施。
1. mysqldump 逻辑备份
# 备份单个数据库 mysqldump -u root -p mydb > mydb.sql # 备份多个数据库 mysqldump -u root -p --databases db1 db2 > multi.sql # 备份所有数据库 mysqldump -u root -p --all-databases > all.sql # 压缩备份 mysqldump -u root -p mydb | gzip > mydb_$(date +%Y%m%d).sql.gz
2. 恢复
# 恢复单个数据库 mysql -u root -p mydb < mydb.sql # 从压缩文件恢复 gunzip -c mydb.sql.gz | mysql -u root -p mydb # 恢复所有数据库 mysql -u root -p < all.sql
3. 自动备份脚本
#!/bin/bash
BACKUP_DIR="/backup/mysql"
DB_USER="root"
DB_PASS="yourpassword"
DB_NAME="mydb"
RETENTION_DAYS=30
mkdir -p $BACKUP_DIR
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME | gzip > $BACKUP_DIR/${DB_NAME}_$(date +%Y%m%d).sql.gz
find $BACKUP_DIR -name "*.sql.gz" -mtime +$RETENTION_DAYS -delete
4. 设置定时任务
# crontab -e 添加 0 2 * * * /usr/local/bin/mysql_backup.sh
5. XtraBackup 物理备份(大型数据库)
sudo apt install percona-xtrabackup-80 xtrabackup --backup --target-dir=/backup/xtra/ xtrabackup --prepare --target-dir=/backup/xtra/