博客
关于我
Mysql之备份与恢复
阅读量:790 次
发布时间:2023-02-11

本文共 3626 字,大约阅读时间需要 12 分钟。

MySQL 备份常用方法(逻辑备份和物理备份)

MySQL 数据库的备份是数据库管理员(DBA)工作中不可或缺的一部分。备份可以防止数据丢失,帮助恢复数据库到某个特定点,或者在故障发生时快速恢复服务。以下是 MySQL 数据库备份的常用方法,包括逻辑备份和物理备份,以及具体的实施建议。


一、逻辑备份

逻辑备份是将数据库中的数据转换为SQL语句文件,备份方式最为常用。最常用的工具是 mysqldump,它支持多种参数,能够按库或表分别备份数据。

1. 使用 mysqldump 进行逻辑备份

mysqldump 是一个强大的工具,可以选择按库、表或具体的表结构进行备份。以下是 mysqldump 的一些常用参数:

  • --master-data=1:在备份过程中记录主库的 binlog 文件和位置,这在还原时非常重要。
  • -B:按库进行备份,适用于多个库的情况。
  • -A:锁定所有表,确保备份的一致性。
  • -F:在备份完成后刷新 binlog 文件。
  • --events:记录事件日志,确保备份包括高级事件。

示例命令:

mysqldump -uroot -pxxx -A -B --master-data=2 --events > /opt/mysql_backup/`date +%F`.sql.gz

2. 增量备份

增量备份是基于全量备份的基础上,仅备份自最后一次全量备份以后的数据。增量备份可以减少存储空间和时间。常用的方式是结合 mysqldumpmysqlbinlog 工具。

  • 方法一:使用 mysqldumpmysqlbinlog

    • 在全量备份后,继续将 binlog 文件进行截取。
    • 使用 mysqlbinlog 工具解析 binlog 文件,将增量数据还原到测试环境或目标数据库。
  • 方法二:直接截取 binlog 文件:

    • 在全量备份后,停止数据库,截取当前 binlog 文件,然后恢复数据库并继续运行。

3. 物理备份

物理备份是直接将数据库文件复制到外部存储的过程。由于数据库在备份期间仍然接收写入,为了确保数据一致性,通常需要在备份前对数据库进行锁表或停机处理。

常用工具:

  • cp:简单但不适用于大规模数据。
  • rsync:支持增量备份,效率较高。
  • tar:适合大文件压缩和分割。
  • scp:安全传输,但速度较慢。

实施步骤:

  • 停止数据库或锁表(根据场景选择)。
  • 使用工具(如 cprsync)将数据库文件(如 ib_datafile)复制到远程或本地存储。
  • 恢复数据库时,确保目标数据库的路径和配置与备份一致。
  • 两种物理备份方法:

  • 停库或锁表,打包拷贝:适用于数据量小或允许停机的场景。
  • 使用第三方工具(如 Percona XtraBackup):支持在线备份,减少对业务的影响。

  • 二、增量备份策略

    增量备份的频率和方式取决于企业的具体需求。以下是常见的企业场景:

    1. 中小公司

    • 全量备份:每天或每周进行一次,全量备份锁表。
    • 增量备份:每分钟使用 rsync 截取 binlog 文件进行增量备份。

    2. 大公司

    • 全量备份:每周进行一次,减少备份压力。
    • 增量备份:由于 binlog 文件数量多,恢复时需要更多时间。

    3. 主从复制环境

    • 主从本身就是备份:主库挂故障时,从库可以快速切换为主库。
    • 一主多从:选择一个从库专门用于备份,通过延时同步解决人为误操作。

    三、MySQL 全量备份与增量备份的对比

    特性 全量备份 增量备份
    恢复时间 较长,需还原全量文件 较短,仅需还原增量文件
    资源占用 高,备份期间占用系统资源 较低,备份时资源占用较少
    频率 每天或每周 每分钟或每小时
    锁表或停机 需要锁表或停机 不需要,适用于在线备份

    四、MySQL 全量备份与增量备份的具体实施

    1. 按天全量备份

    • 每日全量备份:推荐在业务低峰期进行。
    • 备份文件:保存在外部存储(如 NFS、SFTP、云存储)中。

    2. 按周全量备份

    • 适用于大公司,减少备份频率。
    • 备份文件:按周存储,长期归档。

    3. 按天增量备份

    • 方法:每天对 binlog 文件进行截取。
    • 恢复方法:使用 mysqlbinlog 工具将 binlog 文件还原到特定时间点。

    五、MySQL 备份命令

    1. 使用 mysqldump 进行全量备份

    • InnoDB 引擎
      mysqldump -uroot -pxxx -A -B --master-data=2 --events --single-transaction | gzip > /opt/mysql_bak.sql.gz
    • MyISAM 引擎
      mysqldump -uroot -pxxx -A -B --master-data=2 -F --events > /opt/mysql_bak.sql.gz

    2. 分库备份

    • 命令
      mysql -uroot -prootabcd -e "show databases;" | grep -Evi "Database|information_schema|performance_schema" | sed -r 's#(.*)#mysqldump -uroot -prootabcd --events -B \1 |gzip > /tmp/\1.sql.gz#g' | bash
    • 脚本

    #!/bin/shMYUSER=rootMYPASS=rootabcd[ ! -d /server/backup/ ] && mkdir -p /server/backupMYCMD="mysql -u$USER -p$MYPASS"MYDUMP="mysqldump -u$MYUSER -p$MYPASS -B"for database in $MYCMD -e "show databases;" | grep -Evi "Database|information_schema|performance_schema|mysql" do$MYDUMP $database | gzip > /server/backup/${database}_$(date +%F).sql.gzdone

    ---## 六、案例:多个库和多个表备份到一起了,如何恢复单个库或表### 1. 恢复单个库或表- **步骤**:1. 将备份文件导入测试数据库。2. 使用 `grep` 过滤需要的表或库。3. 恢复到正式数据库。### 2. 恢复单个表- **命令**:```bashgrep tablename bak.sql > name.sql

    3. 恢复单个库

    • 命令
      grep -B "databasename.*" bak.sql > name.sql

    七、MySQL 优化建议

    1. 批量插入

    • 避免一次性插入大量数据,分批次处理,减少数据库压力。

    2. 索引优化

    • 避免在查询中使用 SELECT *,而是明确列出需要查询的列。
    • 避免使用 SELECT SQL_NO_CACHE,直接从缓存中读取。

    3. binlog 参数优化

    • 定期刷新 binlog 文件,避免文件过大。
    • 配置 expire_logs_days,自动删除旧的 binlog 文件。

    八、MySQL 备份工具的选择

    1. 单机备份

    • 适用场景:数据量小,且不需要高可用性。
    • 工具mysqldumpxtrabackup

    2. 主从复制备份

    • 主从本身就是备份:主库挂故障时,从库可以立即切换。
    • 从库备份:选择一个不对外提供服务的从库作为备份源。

    3. 大规模数据备份

    • 工具xtrabackup、Percona Backup。

    九、MySQL 恢复数据库

    1. 使用 mysqlbinlog 工具

    • 命令
      mysqlbinlog --start-datetime="2023-10-01 00:00:00" --stop-datetime="2023-10-01 10:00:00" 15:44' time.sql
    • 参数
      • -d:指定数据库。
      • --base64-output:解密 binlog 文件。

    2. 使用 source 命令

    • 命令
      mysql -uroot -pxxx < /opt/mysql_bak.sql

    十、常见问题与解决方案

    1. binlog 文件无法解析

    • 问题:binlog 文件损坏或不完整。
    • 解决方案:使用 mysqlbinlog 工具验证文件是否损坏。

    2. 数据库文件丢失

    • 问题:物理故障导致数据库文件丢失。
    • 解决方案:使用主从复制环境,快速切换到从库并恢复数据。

    3. 增量备份文件丢失

    • 问题:增量备份文件未及时截取。
    • 解决方案:定期检查 binlog 文件,确保文件名和路径正确。

    通过以上方法,DBA 可以根据具体需求选择合适的备份策略,确保数据库的安全性和可用性。

    转载地址:http://pxbfk.baihongyu.com/

    你可能感兴趣的文章