MYSQL ENTERPRISE BACKUP

来源:这里教程网 时间:2026-03-01 18:35:13 作者:

一.软件安装

# cd /mysql/app
# unzip -q /soft/p38863836_840_Linux-x86-64.zip 
# tar -Jxf mysql-commercial-backup-8.4.8-linux-glibc2.28-x86_64.tar.xz
# ln -sf mysql-commercial-backup-8.4.8-linux-glibc2.28-x86_64 mysqlbackup
/mysql/app/mysqlbackup/bin 加入环境变量
# mysqlbackup --version
MySQL Enterprise Backup  Ver 8.4.8-commercial for Linux on x86_64 (MySQL Enterprise - Commercial)
Copyright (c) 2003, 2026, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Run mysqlbackup --help for help information.

二.准备备份环境

#备份目录
mkdir -p /mysql/backup/backup-db
mkdir -p /mysql/backup/backup-tmp
mkdir -p /mysql/backup/restore-tmp
chown -R mysql:mysql /mysql/backup
chmod -R 775 /mysql/backup
mkdir -p /mysql/log/3306/binlog
chown -R mysql:mysql /mysql/log/3306/binlog
chmod -R 775 /mysql/log/3306/binlog/
#创建备份用户
create user 'backup'@'localhost' identified by 'backup';
--5.7权限
grant reload on *.* to 'backup'@'localhost';
grant create, insert, drop, update on mysql.backup_progress to 'backup'@'localhost';
grant create, insert, select, drop, update on mysql.backup_history to 'backup'@'localhost';
grant replication client on *.* to 'backup'@'localhost';
grant super on *.* to 'backup'@'localhost';
grant process on *.* to 'backup'@'localhost';
grant alter on mysql.backup_history to 'backup'@'localhost';
--8.0权限
-- 一次性授予所有必要权限
GRANT 
    BACKUP_ADMIN,
    RELOAD,
    PROCESS,
    SUPER,
    REPLICATION CLIENT,
    CREATE TABLESPACE,
    SELECT,
    INSERT,
    UPDATE,
    CREATE,
    DROP,
    ALTER
ON *.* TO 'backup'@'localhost';
-- 特定数据库权限
GRANT SELECT ON performance_schema.* TO 'backup'@'localhost';
GRANT ALL ON mysql.backup_history TO 'backup'@'localhost';
GRANT ALL ON mysql.backup_progress TO 'backup'@'localhost';
flush privileges;

三.image备份案例

1.备份一个完整的数据库实例
mysqlbackup --defaults-file=/mysql/data/3306/my.cnf --user=backup --password=backup \
--backup-image=/mysql/backup/backup-db/fullbackup`date +%Y%m%d`.mbi --with-timestamp backup-to-image \
--backup-dir=/mysql/backup/backup-tmp
260123 21:59:14 MAIN     INFO: MySQL binlog position: filename fgedudb-binlog.000005, position 86992575.
-------------------------------------------------------------
   Parameters Summary         
-------------------------------------------------------------
   Start LSN                  : 86779904
   Last Checkpoint LSN        : 86785443
   End LSN                    : 86786467
-------------------------------------------------------------
2.校验备份有效性
mysqlbackup --backup-image=/mysql/backup/backup-db/fullbackup20260123.mbi validate
mysqlbackup --backup-image=/mysql/backup/backup-db/fullbackup20260123.mbi list-image |more
3.恢复数据库
mysqlbackup --defaults-file=/mysql/data/3306/my.cnf --user=backup --password=backup 
--datadir=/mysql/data/3306/data --backup-image=/mysql/backup/backup-db/fullbackup20260123.mbi 
--backup-dir=/mysql/backup/restore-tmp copy-back-and-apply-log
#破坏数据库
systemctl stop mysqld
mv data data_bak
mkdir data
#执行恢复
copy-back-and-apply-log 恢复前需要清空数据目录
--log-bin 将备份中产生的binlog恢复到其他目录
#修改权限启动
chown -R mysql:mysql /mysql/data/3306/data
systemctl start mysqld
#备份相关表
mysql.backup_progress  desc mysql.backup_history;

4.目录备份1

1.备份
mysqlbackup --defaults-file=/mysql/data/3306/my.cnf --user=backup --password=backup --with-timestamp backup 
--backup-dir=/mysql/backup/backup-db --read-threads=2 --write-threads=2  --process-threads=8
2.校验
mysqlbackup --backup-dir=/mysql/backup/backup-db/2026-01-24_16-57-04 validate
3.对备份应用备份期间产生的日志
mysqlbackup --defaults-file=/mysql/data/3306/my.cnf apply-log 
--backup-dir=/mysql/backup/backup-db/2026-01-24_16-57-04
4.破坏库
5.还原
mysqlbackup --defaults-file=/mysql/data/3306/my.cnf --user=backup --password=backup 
--datadir=/mysql/data/3306/data --backup-dir=/mysql/backup/backup-db/2026-01-24_16-57-04 
--log-bin=/tmp copy-back --read-threads=2 --write-threads=2 --process-threads=8
6.
chown -R mysql:mysql /mysql/data/3306/data
systemctl start mysqld

4.目录备份2

mysqlbackup --defaults-file=/mysql/data/3306/my.cnf --user=backup --password=backup 
--with-timestamp backup-and-apply-log --backup-dir=/mysql/backup/backup-db --read-threads=2 
--write-threads=2 --process-threads=8

5.压缩备份

mysqlbackup --defaults-file=/mysql/data/3306/my.cnf --user=backup
--password=backup --with-timestamp backup-and-apply-log
--compress-level=1 --backup-dir=/mysql/backup/backup-db
--read-threads=2 --write-threads=2 --process-threads=8
mysqlbackup --defaults-file=/mysql/data/3306/my.cnf --uncompress
--backup-dir=/mysql/backup/backup-db/2018-05-13_01-13-25 apply-log
mysqlbackup --defaults-file=/mysql/data/3306/my.cnf --user=backup
--password=backup --datadir=/mysql/data/3306/data
--backup-dir=/mysql/backup/backup-db/2018-05-13_01-13-25 copy-back
--read-threads=2 --write-threads=2 --process-threads=8

6.增量备份

1.全备
mysqlbackup --defaults-file=/mysql/data/3306/my.cnf --user=backup --password=backup 
--backup-dir=/mysql/backup/backup-db/ --with-timestamp backup-and-apply-log
2.修改数据
3.增量1
mysqlbackup --defaults-file=/mysql/data/3306/my.cnf --user=backup --password=backup backup --incremental 
--incremental-base=dir:/mysql/backup/backup-db/2026-01-24_20-34-09 
--incremental-backup-dir=/mysql/backup/backup-db/inc01
4.修改数据
5.增量2
mysqlbackup --defaults-file=/mysql/data/3306/my.cnf --user=backup --password=backup backup --incremental 
--incremental-base=dir:/mysql/backup/backup-db/inc01 
--incremental-backup-dir=/mysql/backup/backup-db/inc02
6.破坏
systemctl stop mysqld
rm -rf data_bak
mv data data_bak
mkdir data
7.合并增量备份
mysqlbackup --backup-dir=/mysql/backup/backup-db/2026-01-24_20-34-09 
--incremental-backup-dir=/mysql/backup/backup-db/inc01 apply-incremental-backup
mysqlbackup --backup-dir=/mysql/backup/backup-db/2026-01-24_20-34-09 
--incremental-backup-dir=/mysql/backup/backup-db/inc02 apply-incremental-backup
8.恢复合并后的全备
mysqlbackup --defaults-file=/mysql/data/3306/my.cnf copy-back --backup-dir=/mysql/backup/backup-db/2026-01-24_20-34-09 --log-bin=/tmp/binlog

三.结合binlog进行完全恢复

1.将image还原回目录
mysqlbackup --backup-image=/mysql/backup/backup-db/fullbackup20260123.mbi image-to-backup-dir 
--backup-dir=/mysql/backup/backup-db/fullbackup20260123
2.先应用日志
mysqlbackup --defaults-file=/mysql/data/3306/my.cnf apply-log 
--backup-dir=/mysql/backup/backup-db/2026-01-24_16-57-04
3.进入/mysql/backup/backup-db/fullbackup20260123/meta/backup_variables.txt
binlog_position=fgedudb-binlog.000005:86992575 备份开始的时间
4.还原全库
mysqlbackup --defaults-file=/mysql/data/3306/my.cnf --user=backup --password=backup 
--datadir=/mysql/data/3306/data --backup-dir=/mysql/backup/backup-db/fullbackup20260123 
--log-bin=/tmp/binlog copy-back
5.应用binlog恢复
mysqlbackup --backup-dir=/tmp/backup_test \
  --binlog-index=/tmp/binlog.index \
  apply-binlog \
  --start-file=fgedudb-binlog.000005 \
  --start-position=86992575
  
# 可视化:备份开始(t0) → 备份期间写入 → 备份结束(t1)
    │               │               │
    ↓               ↓               ↓
数据快照      记录到binlog     binlog位置继续(状态A)       (操作X,Y,Z)      增加
    │               │               │
    ↓               ↓               ↓
apply-log      apply-binlog    完整恢复
恢复到A      应用X,Y,Z操作   得到最终状态

相关推荐