在Linux环境下,MySQL的备份与恢复是数据库管理的重要任务。以下是详细的备份与恢复方法,涵盖多种场景和工具:
一、备份方法
1. 使用 mysqldump 工具
mysqldump 是MySQL官方提供的逻辑备份工具,适合中小型数据库。
备份单个数据库
mysqldump -u [用户名] -p[密码] [数据库名] > backup.sql
示例:
mysqldump -u root -p123456 mydatabase > mydatabase_backup.sql
备份所有数据库
mysqldump -u [用户名] -p[密码] --all-databases > all_databases_backup.sql
备份特定表
mysqldump -u [用户名] -p[密码] [数据库名] [表名1] [表名2] > tables_backup.sql
压缩备份
mysqldump -u [用户名] -p[密码] [数据库名] | gzip > backup.sql.gz
增量备份(结合binlog)
启用binlog:
编辑MySQL配置文件
vim /etc/my.cnf
添加以下内容
[mysqld]
log-bin=mysql-bin
备份binlog文件:
cp /var/lib/mysql/mysql-bin.* /backup/binlog/
2. 使用 mysqlpump 工具
mysqlpump 是MySQL 5.7+引入的增强版备份工具,支持并行备份。
并行备份
mysqlpump -u [用户名] -p[密码] --parallel-schemas=4 [数据库名] > backup.sql
3. 使用物理备份工具
Percona XtraBackup
适用于大型数据库,支持热备份(无需锁表)。
安装XtraBackup:
sudo apt-get install percona-xtrabackup-80
全量备份:
xtrabackup --backup --user=[用户名] --password=[密码] --target-dir=/backup/full
增量备份:
xtrabackup --backup --user=[用户名] --password=[密码] --target-dir=/backup/inc1 --incremental-basedir=/backup/full
二、恢复方法
1. 使用 mysql 工具恢复逻辑备份
恢复单个数据库
mysql -u [用户名] -p[密码] [数据库名] < backup.sql
恢复所有数据库
mysql -u [用户名] -p[密码] < all_databases_backup.sql
恢复压缩备份
gunzip < backup.sql.gz | mysql -u [用户名] -p[密码] [数据库名]
2. 使用XtraBackup恢复物理备份
准备备份:
xtrabackup --prepare --target-dir=/backup/full
恢复备份:
xtrabackup --copy-back --target-dir=/backup/full
修改文件权限:
chown -R mysql:mysql /var/lib/mysql
启动MySQL服务:
systemctl start mysql
3. 使用binlog恢复增量数据
找到binlog位置:
mysqlbinlog /backup/binlog/mysql-bin.000001 | grep "INSERT"
恢复binlog:
mysqlbinlog /backup/binlog/mysql-bin.000001 | mysql -u [用户名] -p[密码]
三、自动化备份脚本
以下是一个自动化备份脚本示例,支持压缩和定期清理旧备份。
#!/bin/bash# 配置
USER="root"
PASSWORD="123456"
DB_NAME="mydatabase"
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d%H%M%S)
KEEP_DAYS=7# 创建备份目录
mkdir -p $BACKUP_DIR# 备份数据库
mysqldump -u $USER -p$PASSWORD $DB_NAME | gzip > $BACKUP_DIR/$DB_NAME_$DATE.sql.gz# 删除旧备份
find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +$KEEP_DAYS -exec rm {} \;# 记录日志
echo "Backup completed: $BACKUP_DIR/$DB_NAME_$DATE.sql.gz" >> /var/log/mysql_backup.log
将脚本加入定时任务:
crontab -e
# 每天凌晨2点执行备份
0 2 * * * /path/to/backup_script.sh
四、注意事项
备份文件权限:
确保备份文件仅管理员可访问:
chmod 600 /backup/*.sql
备份验证:
定期测试恢复流程,确保备份有效。
存储安全:
将备份文件存储到远程服务器或云存储(如AWS S3)。
监控与告警:
使用监控工具(如Zabbix)检测备份任务状态。