热备份和冷备份是两种常见的数据库备份方法,分别在数据库运行状态和停止状态下执行。下面是如何使用 MySQL 进行热备份和冷备份的详细步骤和代码示例。
1. 热备份
热备份(Hot Backup)是在数据库运行期间进行的备份,通常不需要停机。MySQL Enterprise Backup 工具支持热备份。
1.1 使用 MySQL Enterprise Backup 进行热备份
MySQL Enterprise Backup 工具可以在数据库运行时进行一致性备份。
1.1.1 完全热备份
mysqlbackup --user=root --password=yourpassword --host=localhost --port=3306 --backup-dir=/backups/full_backup --backup-image=/backups/full_backup/full_backup.bak backup-to-image
1.1.2 增量热备份
mysqlbackup --user=root --password=yourpassword --host=localhost --port=3306 --incremental --incremental-base=history:last_backup --backup-dir=/backups/incremental_backup --backup-image=/backups/incremental_backup/incremental_backup.bak backup-to-image
1.2 使用 mysqldump 进行热备份
mysqldump 工具也可以用于热备份,但它是逻辑备份,不是物理备份。
1.2.1 备份整个数据库
mysqldump -u root -p --all-databases > /backups/alldb_backup.sql
1.2.2 备份单个数据库或表
备份单个数据库:
mysqldump -u root -p mydatabase > /backups/mydatabase_backup.sql
备份单个表:
mysqldump -u root -p mydatabase mytable > /backups/mytable_backup.sql
2. 冷备份
冷备份(Cold Backup)是在数据库停止服务期间进行的备份,确保数据的一致性。冷备份通常是物理备份。
2.1 使用文件系统进行冷备份
-
停止 MySQL 服务:
sudo systemctl stop mysql -
备份 MySQL 数据目录
假设 MySQL 数据目录为
/var/lib/mysql,将其备份到/backups/mysql_data_backup:sudo cp -r /var/lib/mysql /backups/mysql_data_backup -
启动 MySQL 服务:
sudo systemctl start mysql
2.2 使用 MySQL Enterprise Backup 进行冷备份
你也可以使用 MySQL Enterprise Backup 工具进行冷备份,但需要在 MySQL 停止服务的情况下进行。
-
停止 MySQL 服务:
sudo systemctl stop mysql -
使用 MySQL Enterprise Backup 进行备份:
mysqlbackup --user=root --password=yourpassword --backup-dir=/backups/full_backup --backup-image=/backups/full_backup/full_backup.bak backup-to-image -
启动 MySQL 服务:
sudo systemctl start mysql
3. 恢复备份
无论是热备份还是冷备份,恢复步骤大致相同,只不过备份的来源不同。
3.1 恢复通过 MySQL Enterprise Backup 创建的备份
-
停止 MySQL 服务:
sudo systemctl stop mysql -
恢复完全备份:
mysqlbackup --user=root --password=yourpassword --backup-dir=/backups/full_backup --backup-image=/backups/full_backup/full_backup.bak copy-back-and-apply-log -
恢复增量备份(如果有):
mysqlbackup --user=root --password=yourpassword --incremental --backup-dir=/backups/incremental_backup --backup-image=/backups/incremental_backup/incremental_backup.bak apply-incremental-backup -
启动 MySQL 服务:
sudo systemctl start mysql
3.2 恢复通过 mysqldump 创建的备份
-
登录 MySQL:
mysql -u root -p -
恢复数据库:
SOURCE /backups/alldb_backup.sql;或者在命令行直接恢复:
mysql -u root -p < /backups/alldb_backup.sql
4. 自动化备份脚本
你可以编写一个 Bash 脚本,并使用 Cron 任务调度自动化备份过程。