MySQL备份与事务

发布于:2025-05-16 ⋅ 阅读:(15) ⋅ 点赞:(0)

一、全量备份

1. 逻辑备份(Logical Backup

原理:通过 SQL 语句导出数据库结构和数据,适用于小型数据库或跨版本迁移。

操作步骤

# 备份单个数据库

mysqldump -u [用户名] -p[密码] --databases [数据库名] > backup_full.sql

# 备份所有数据库(包含系统库)

mysqldump -u root -p --all-databases --master-data=2 --single-transaction > backup_full.sql

# 关键参数说明:

# --master-data=2      记录二进制日志位置(用于增量恢复)

# --single-transaction 保证InnoDB表一致性(需事务支持)

# --flush-logs         刷新日志,方便后续增量备份

2. 物理备份(Physical Backup

原理:直接复制数据文件(/var/lib/mysql),适用于大型数据库,速度快但依赖存储引擎。

操作步骤(使用 Percona XtraBackup

# 安装 Percona XtraBackup

sudo apt-get install percona-xtrabackup-80

# 执行全量备份

xtrabackup --backup --user=[用户名] --password=[密码] --target-dir=/path/to/backup/full

# 准备备份(使数据文件一致)

xtrabackup --prepare --target-dir=/path/to/backup/full

3. 全量备份恢复

逻辑备份恢复

mysql -u root -p < backup_full.sql

物理备份恢复

# 停止MySQL服务

systemctl stop mysql

# 恢复文件

xtrabackup --copy-back --target-dir=/path/to/backup/full

# 修改文件权限

chown -R mysql:mysql /var/lib/mysql

# 启动MySQL

systemctl start mysql


二、增量备份

1. 基于二进制日志(Binary Log

原理:记录所有数据更改操作,需结合全量备份使用。

操作步骤

  1. 启用二进制日志(在 my.cnf 中配置):

[mysqld]

log-bin=mysql-bin

server-id=1

  1. 全量备份后记录日志位置

SHOW MASTER STATUS;

-- 输出示例:File: mysql-bin.000001, Position: 154

  1. 增量备份操作

# 刷新日志生成新的二进制文件

mysqladmin -u root -p flush-logs

# 备份前一个二进制日志(例如 mysql-bin.000001

cp /var/lib/mysql/mysql-bin.000001 /backup/incremental/

2. 使用 XtraBackup 增量备份

原理:仅备份自上次全量/增量备份以来更改的数据页。

操作步骤

# 第一次增量备份(基于全量备份)

xtrabackup --backup --user=root --password=[密码] \

--target-dir=/path/to/inc1 \

--incremental-basedir=/path/to/full

# 后续增量备份(基于前一次增量)

xtrabackup --backup --user=root --password=[密码] \

--target-dir=/path/to/inc2 \

--incremental-basedir=/path/to/inc1

# 准备恢复(合并所有增量到全量备份)

trabackup --prepare --apply-log-only --target-dir=/path/to/full

xtrabackup --prepare --apply-log-only --target-dir=/path/to/full --incremental-dir=/path/to/inc1

xtrabackup --prepare --target-dir=/path/to/full --incremental-dir=/path/to/inc2


三、增量恢复

1. 基于二进制日志的恢复

场景:从全量备份 + 增量二进制日志恢复到指定时间点。

操作步骤

  1. 恢复全量备份:

mysql -u root -p < backup_full.sql

  1. 应用二进制日志:

# 恢复到特定时间点

mysqlbinlog --start-position=154 --stop-datetime="2023-10-01 12:00:00" \

/backup/incremental/mysql-bin.000001 | mysql -u root -p

# 或恢复所有增量日志

mysqlbinlog /backup/incremental/mysql-bin.* | mysql -u root -p

2. XtraBackup 增量恢复

# 合并全量和增量备份后,执行物理恢复

xtrabackup --copy-back --target-dir=/path/to/full


四、注意事项

  1. 备份一致性
    • InnoDB 使用 --single-transaction 避免锁表。
    • MyISAM 需使用 --lock-all-tables。
  2. 二进制日志管理
    • 定期清理过期日志:PURGE BINARY LOGS BEFORE '2023-10-01';
    • 使用 expire_logs_days 自动过期日志。
  3. 验证备份
    • 检查备份文件完整性(如 grep "Dump completed" backup_full.sql)。
    • 在测试环境恢复验证。
  4. 自动化备份
    • 使用 cron 定时任务:

0 2 * * * /usr/bin/mysqldump -u root -p[密码] --all-databases > /backup/full_$(date +\%F).sql

  1. 存储安全
    • 备份文件加密(如 openssl 或 gpg)。
    • 异地存储(云存储、NAS)。

五、高级场景

  1. 时间点恢复(PITR

mysqlbinlog --start-datetime="2023-10-01 00:00:00" --stop-datetime="2023-10-01 12:00:00" \

mysql-bin.000001 | mysql -u root -p

  1. 部分数据库恢复

# 从全量备份提取单个数据库

sed -n '/^-- Current Database: `mydb`/,/^-- Current Database: `/p' backup_full.sql > mydb.sql

  1. 并行备份加速

mydumper -u root -p [密码] -B mydb -T table1,table2 -t 4 -o /backup/


网站公告

今日签到

点亮在社区的每一天
去签到