在LNMP(Linux+Nginx+MySQL+PHP)环境中实现数据库自动备份可以通过以下几种方式实现:
#!/bin/bash
# 备份目录
BACKUP_DIR="/data/backup/mysql"
# MySQL配置
MYSQL_USER="root"
MYSQL_PASSWORD="your_password"
# 保留最近7天的备份
DAYS_TO_KEEP=7
# 当前日期
DATE=$(date +%Y%m%d%H%M%S)
# 创建备份目录
mkdir -p $BACKUP_DIR
# 备份所有数据库
mysqldump -u$MYSQL_USER -p$MYSQL_PASSWORD --all-databases | gzip > "$BACKUP_DIR/all_db_$DATE.sql.gz"
# 或者备份指定数据库
# mysqldump -u$MYSQL_USER -p$MYSQL_PASSWORD dbname | gzip > "$BACKUP_DIR/dbname_$DATE.sql.gz"
# 删除过期备份
find $BACKUP_DIR -name "*.sql.gz" -type f -mtime +$DAYS_TO_KEEP -exec rm -f {} \;
chmod +x /path/to/backup_script.sh
crontab -e
添加以下内容(每天凌晨3点执行备份):
0 3 * * * /path/to/backup_script.sh
# 对于Ubuntu/Debian
sudo apt-get install percona-xtrabackup
# 对于CentOS/RHEL
sudo yum install percona-xtrabackup
#!/bin/bash
BACKUP_DIR="/data/backup/mysql"
DAYS_TO_KEEP=7
DATE=$(date +%Y%m%d%H%M%S)
mkdir -p $BACKUP_DIR
# 全量备份
innobackupex --user=root --password=your_password $BACKUP_DIR/full_$DATE
# 压缩备份
tar -czvf $BACKUP_DIR/full_$DATE.tar.gz $BACKUP_DIR/full_$DATE
rm -rf $BACKUP_DIR/full_$DATE
# 删除过期备份
find $BACKUP_DIR -name "*.tar.gz" -type f -mtime +$DAYS_TO_KEEP -exec rm -f {} \;
# Ubuntu/Debian
sudo apt-get install automysqlbackup
# CentOS/RHEL
sudo yum install automysqlbackup
编辑配置文件 /etc/automysqlbackup/automysqlbackup.conf
:
# 基本配置
USERNAME=root
PASSWORD=your_password
# 备份目录
BACKUPDIR="/data/backup/mysql"
# 保留多少天的备份
DBEXPIRE=7
# 备份哪些数据库
DBNAMES="all"
Automysqlbackup安装后通常会自动添加crontab任务,如需手动添加:
0 3 * * * /usr/sbin/automysqlbackup
加密敏感备份:对包含敏感数据的备份进行加密
mysqldump -u root -p dbname | gzip | openssl enc -aes-256-cbc -salt -out /backup/dbname_$(date +%Y%m%d).sql.gz.enc -k password
远程备份:将备份文件自动传输到远程服务器或云存储
rsync -avz /data/backup/mysql/ user@remote_server:/remote/backup/
备份验证:定期验证备份文件是否可恢复
监控备份状态:设置邮件或短信通知备份成功/失败
增量备份:对于大型数据库,考虑结合全量和增量备份策略
gunzip < /data/backup/mysql/all_db_20230101.sql.gz | mysql -u root -p
# 解压备份
tar -xzvf full_20230101.tar.gz -C /data/backup/mysql/
# 准备备份
innobackupex --apply-log /data/backup/mysql/full_20230101
# 恢复备份
innobackupex --copy-back /data/backup/mysql/full_20230101
# 设置权限
chown -R mysql:mysql /var/lib/mysql
# 重启MySQL
service mysql restart
以上方案可以根据实际需求选择或组合使用,建议在生产环境实施前先进行测试验证。