MySQL 备份与恢复

avatar
作者
猴君
阅读量:0

一,MySQL 数据库备份概述

1:数据备份的重要性

在企业中数据的价值至关重要,数据保障了企业业务的正常运行。因此,数据的安全性

及数据的可靠性是运维的重中之重,任何数据的丢失都可能对企业产生严重的后果。通常情

况下造成数据丢失的原因有如下几种:

  1. 程序错误。
  2. 人为操作错误。
  3. 运算错误。
  4. 磁盘故障。
  5. 灾难(如火灾、地震)和盗窃。

2:数据库备份类型

2.1:从物理与逻辑的角度分类
  • 物理备份
    • 冷备份:在数据库停止运行时进行备份,此时数据库处于锁定状态,保证了备份的一致性。
    • 热备份:在数据库运行时进行备份,需要使用专门的技术来确保数据的一致性。
  • 逻辑备份
    • 使用 mysqldump 或其他工具生成 SQL 脚本,这些脚本可以用来重建数据库。
2.2:从数据库的备份策略角度分类
  • 完全备份:备份所有的数据文件和相关的元数据。
  • 增量备份:仅备份自上次完全备份或增量备份以来发生改变的数据。
  • 差异备份:备份自上次完全备份以来发生改变的数据。

3:常见的备份方法

3.1:物理冷备份

物理冷备份时需要在数据库处于关闭状态下,能够较好地保证数据库的完整性。物理冷备份一般用于非核心业务,这类业务一般都允许中断,物理冷备份的特点就是速度快,恢复时也是最为简单的。通常通过直接打包数据库文件夹来实现备份

3.2:专用备份工具 mysqldump 或 mysqlhotcopy
  • mysqldump:这是一个常用的 MySQL 备份工具,可以创建逻辑备份。它支持完全备份、增量备份,并允许用户选择备份特定的数据库或表。

    mysqldump -u username -p dbname > backup.sql
  • mysqlhotcopy:这是一个非官方的工具,主要用于进行物理热备份。它依赖于 FLUSH TABLES WITH READ LOCK 命令来保证一致性。

3.3:通过启用二进制日志进行增量备份
  • MySQL 支持二进制日志记录,这可以用于实现增量备份。
  • 通过配置 MySQL 服务器来启用二进制日志,并结合 mysqldump 进行初始完全备份。
  • 后续可以使用 mysqlbinlog 工具来获取自上次备份以来的更改,并应用到最新的备份中以保持数据同步。
3.4:通过第三方工具备份
  • 第三方工具如 Percona XtraBackup 和 MySQL Enterprise Backup 提供了更高级的功能,比如在线热备份、压缩和加密等。
  • 这些工具通常提供了更好的性能和更多的功能选项,适用于大型数据库环境。

二,数据库完全备份操作

1:物理冷备份与恢复

1.1:备份数据库
  1. 停写操作:首先,需要确保在备份过程中没有新的数据写入数据库。可以通过执行 FLUSH TABLES WITH READ LOCK 命令来锁定所有的表,防止在备份过程中数据被修改。

    FLUSH TABLES WITH READ LOCK;
  2. 备份数据文件:使用操作系统级别的工具(如 tarcp 命令)来复制 MySQL 数据目录下的文件。例如,如果 MySQL 数据目录位于 /var/lib/mysql,可以使用以下命令来备份:

    tar -czf backup.tar.gz /var/lib/mysql
  3. 解锁表:完成备份后,解锁表以便其他进程可以继续写入数据。

    UNLOCK TABLES;
  4. 备份二进制日志:如果你启用了二进制日志,还需要备份二进制日志文件。

    cp /var/lib/mysql/mysql-bin.* .
  5. 记录备份信息:记录备份的时间点、备份文件的位置等信息,以便于恢复时使用。

2.2:恢复数据库
  1. 停止 MySQL 服务:在恢复之前,需要先停止 MySQL 服务。

    systemctl stop mysql
  2. 删除旧的数据目录:清空或移动旧的数据目录,以准备放置新的备份数据。

    rm -rf /var/lib/mysql/*
  3. 恢复数据文件:使用之前备份的文件来恢复数据。

    tar -xzvf backup.tar.gz -C /var/lib/mysql/
  4. 恢复二进制日志:如果之前备份了二进制日志,则需要将其恢复到正确的位置。

    mv mysql-bin.* /var/lib/mysql/
  5. 启动 MySQL 服务:启动 MySQL 服务,并验证数据的完整性。

    systemctl start mysql
  6. 验证数据:登录 MySQL 并检查数据是否完整且可用。

    SELECT * FROM your_table LIMIT 10;

2:mysqldump 备份与恢复

2.1:备份数据库
  1. 备份整个数据库:使用 mysqldump 命令来备份整个数据库或特定的数据库。

    mysqldump -u root -p --all-databases > all_databases.sql
  2. 备份单个数据库:备份特定的数据库。

    mysqldump -u root -p your_database > your_database.sql
  3. 备份单个表:备份特定数据库中的单个表。

    mysqldump -u root -p your_database your_table > your_table.sql
  4. 使用压缩:可以使用 gzip 或 bzip2 压缩备份文件以节省存储空间。

    mysqldump -u root -p your_database | gzip > your_database.sql.gz
2.2:查看备份文件
  1. 检查备份文件的内容:使用文本编辑器或命令行工具查看备份文件的内容。

    less all_databases.sql
  2. 解压备份文件:如果使用了压缩,可以先解压备份文件。

    gunzip all_databases.sql.gz
2.3:恢复数据库
  1. 停止 MySQL 服务:在恢复之前,需要先停止 MySQL 服务。

    systemctl stop mysql
  2. 删除旧的数据文件:清空或移动旧的数据文件,以准备放置新的备份数据。

    rm -rf /var/lib/mysql/*
  3. 创建数据库:创建需要恢复的数据库。

    CREATE DATABASE your_database;
  4. 导入备份文件:使用 mysql 命令将备份文件导入到数据库中。

    mysql -u root -p your_database < your_database.sql
  5. 启动 MySQL 服务:启动 MySQL 服务,并验证数据的完整性。

    systemctl start mysql
  6. 验证数据:登录 MySQL 并检查数据是否完整且可用。

    SELECT * FROM your_table LIMIT 10;

三:MySQL 增量备份与恢复

1:MySQL 增量备份概述

3.1:增量备份的特点
  • 节省存储空间:增量备份只备份自上一次备份以来发生改变的数据,因此相比于完全备份,它所需的存储空间较少。
  • 缩短备份时间:由于只备份变化的数据,增量备份可以在较短的时间内完成。
  • 复杂的恢复过程:与完全备份相比,增量备份的恢复过程较为复杂,需要将多个备份集按顺序恢复。
  • 依赖于完全备份:增量备份通常依赖于一个初始的完全备份,之后的增量备份都是基于这个完全备份进行的。
3.2:MySQL 二进制日志对备份的意义
  • 二进制日志记录:MySQL 的二进制日志记录了数据库中所有更改数据的操作,包括插入、更新和删除操作。
  • 用于增量备份:启用二进制日志后,可以利用这些日志来记录自上次备份以来的所有更改,从而实现增量备份。
  • 恢复到任意时间点:二进制日志还可以用于将数据库恢复到任意时间点,这对于数据恢复非常有用。
  • 提高备份效率:二进制日志可以帮助减少增量备份所需的时间和存储空间。

2:MySQL 增量恢复

  • 启用二进制日志:在 MySQL 中启用二进制日志功能,这是进行增量备份的基础。

    • 在 MySQL 配置文件 (my.cnf 或 my.ini) 中添加如下配置:
      log_bin = /path/to/mysql-bin server_id = 1 binlog_format = ROW
    • 重启 MySQL 服务以使配置生效。
  • 初始完全备份:进行一次完全备份作为增量备份的基础。

  • 记录备份时间点:记录每次备份的时间点,以便在恢复时确定需要应用哪些二进制日志文件。

2.2 增量备份操作
  1. 进行完全备份:使用 mysqldump 或物理冷备份的方式进行完全备份。

    mysqldump -u root -p --all-databases > all_databases.sql
  2. 记录二进制日志文件名:在进行完全备份后,记录当前的二进制日志文件名。

    SHOW MASTER STATUS;
  3. 后续增量备份:当需要进行增量备份时,记录下自上次备份以来的二进制日志文件名和位置。

    SHOW BINARY LOGS;
  4. 备份二进制日志文件:将自上次备份以来产生的二进制日志文件备份到指定的位置。

2.3 增量恢复操作
  1. 恢复完全备份:首先恢复完全备份文件。

    mysql -u root -p < all_databases.sql
  2. 应用二进制日志:使用 mysqlbinlog 工具来读取并应用自上次备份以来的二进制日志文件。

    mysqlbinlog --start-position=position --stop-position=position mysql-bin.000001 | mysql -u root -p
  3. 重复应用日志:如果存在多个二进制日志文件,需要按照时间顺序依次应用。

    for file in $(ls -t /path/to/logfiles/*.log); do   mysqlbinlog $file | mysql -u root -p done
  4. 验证数据:登录 MySQL 并检查数据是否完整且可用。

    SELECT * FROM your_table LIMIT 10;

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!