MySQL(76)如何进行热备份和冷备份?

163 阅读2分钟

热备份和冷备份是两种常见的数据库备份方法,分别在数据库运行状态和停止状态下执行。下面是如何使用 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 使用文件系统进行冷备份

  1. 停止 MySQL 服务:

    sudo systemctl stop mysql
    
  2. 备份 MySQL 数据目录

    假设 MySQL 数据目录为 /var/lib/mysql,将其备份到 /backups/mysql_data_backup

    sudo cp -r /var/lib/mysql /backups/mysql_data_backup
    
  3. 启动 MySQL 服务:

    sudo systemctl start mysql
    

2.2 使用 MySQL Enterprise Backup 进行冷备份

你也可以使用 MySQL Enterprise Backup 工具进行冷备份,但需要在 MySQL 停止服务的情况下进行。

  1. 停止 MySQL 服务:

    sudo systemctl stop mysql
    
  2. 使用 MySQL Enterprise Backup 进行备份:

    mysqlbackup --user=root --password=yourpassword --backup-dir=/backups/full_backup --backup-image=/backups/full_backup/full_backup.bak backup-to-image
    
  3. 启动 MySQL 服务:

    sudo systemctl start mysql
    

3. 恢复备份

无论是热备份还是冷备份,恢复步骤大致相同,只不过备份的来源不同。

3.1 恢复通过 MySQL Enterprise Backup 创建的备份

  1. 停止 MySQL 服务:

    sudo systemctl stop mysql
    
  2. 恢复完全备份:

    mysqlbackup --user=root --password=yourpassword --backup-dir=/backups/full_backup --backup-image=/backups/full_backup/full_backup.bak copy-back-and-apply-log
    
  3. 恢复增量备份(如果有):

    mysqlbackup --user=root --password=yourpassword --incremental --backup-dir=/backups/incremental_backup --backup-image=/backups/incremental_backup/incremental_backup.bak apply-incremental-backup
    
  4. 启动 MySQL 服务:

    sudo systemctl start mysql
    

3.2 恢复通过 mysqldump 创建的备份

  1. 登录 MySQL:

    mysql -u root -p
    
  2. 恢复数据库:

    SOURCE /backups/alldb_backup.sql;
    

    或者在命令行直接恢复:

    mysql -u root -p < /backups/alldb_backup.sql
    

4. 自动化备份脚本

你可以编写一个 Bash 脚本,并使用 Cron 任务调度自动化备份过程。