暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL Enterprise Backup备份工具介绍及及使用

原创 张鹏远 云和恩墨 2023-01-16
2592

MySQL Enterprise Backup备份工具介绍及及使用

备份工具介绍:

Mysqlbackup是ORACLE公司也提供了针对企业的备份软件MySQL Enterprise Backup简称,是MySQL服务器的备份实用程序。它是一个多平台,高性能的工具,具有丰富的功能,例如 “热”(在线)备份,增量和差异备份,选择性备份和还原,备份加密和压缩以及许多其他有价值的功能特征。经过优化以用于InnoDB表,MySQL Enterprise Backup能够备份和还原MySQL支持的任何存储引擎创建的各种表。它的读取和写入过程(在独立的,多个线程中执行)的并行性及其块级并行性(不同的线程可以在单个文件中读取,处理或写入不同的块),从而可以快速完成备份和还原过程,并且与logical backup使用mysqldump之类的工具 相比,通常可以显着提高性能 。MySQL Enterprise Backup是用于维护和保护MySQL数据以及在发生事故或灾难时快速可靠地进行恢复的宝贵工具。它是MySQL企业版的一部分,可根据商业许可向订户提供。

Mysqlbackup工具版本建议与MySQL Server版本一致。

例如:

对于 MySQL 8.0.27, 使用 MySQL Enterprise Backup 8.0.27。

对于 MySQL 5.7,使用 MySQL Enterprise Backup 4.1。

对于 MySQL 5.6,使用 MySQL Enterprise Backup 3.12。

对于MyISAM引擎,在备份时存在锁表现象。需添加--no-locking参数。

备份方案

根据不同系统高可用架构及RTO/RPO,可在操作系统中配置crontab的全备及增量备份时间。

需在备份主机节点上挂载备份目录。具体大小根据系统数据量进行分配。

例:

00 4 \* \* \* /app/bakcup/mysql\_fullback.sh

30 \*/2 \* \* \* /app/bakcup/mysql\_incremental.sh

00 7 \* \* \* /app/bakcup/mysql\_delete.sh

备份配置

  1. 创建mysqlbackup备份用户并授予备份权限

4.1版本:

CREATE USER 'mysqlbackup'@'localhost' IDENTIFIED BY 'PASSWD'; << 此处替换密码

GRANT RELOAD, SUPER, PROCESS ON \*.\* TO 'mysqlbackup'@'localhost';

GRANT CREATE, INSERT, DROP, UPDATE ON mysql.backup\_progress TO 'mysqlbackup'@'localhost';

GRANT CREATE, INSERT, SELECT, DROP, UPDATE, ALTER ON mysql.backup\_history

TO 'mysqlbackup'@'localhost';

GRANT REPLICATION CLIENT ON \*.\* TO 'mysqlbackup'@'localhost';

GRANT SELECT ON performance\_schema.replication\_group\_members TO 'mysqlbackup'@'localhost';

GRANT CREATE, INSERT, DROP ON mysql.backup\_history\_old TO 'mysqlbackup'@'localhost';

GRANT CREATE, INSERT, DROP, ALTER ON mysql.backup\_history\_new TO 'mysqlbackup'@'localhost';

GRANT LOCK TABLES, SELECT, CREATE, DROP, FILE ON \*.\* TO 'mysqlbackup'@'localhost';

GRANT CREATE, INSERT, DROP, UPDATE ON mysql.backup\_sbt\_history TO 'mysqlbackup'@'localhost';

8.0版本:

CREATE USER 'mysqlbackup'@'localhost' IDENTIFIED BY 'PASSWD'; << 此处替换密码

CREATE USER 'mysqlbackup'@'localhost' IDENTIFIED BY 'password';

GRANT SELECT, BACKUP\_ADMIN, RELOAD, PROCESS, SUPER, REPLICATION CLIENT ON \*.\*

TO \`mysqlbackup\`@\`localhost\`;

GRANT CREATE, INSERT, DROP, UPDATE ON mysql.backup\_progress TO 'mysqlbackup'@'localhost';

GRANT CREATE, INSERT, DROP, UPDATE, SELECT, ALTER ON mysql.backup\_history

TO 'mysqlbackup'@'localhost';

GRANT LOCK TABLES, CREATE, DROP, FILE, INSERT, ALTER ON \*.\* TO 'mysqlbackup'@'localhost';

GRANT CREATE, DROP, UPDATE ON mysql.backup\_sbt\_history TO 'mysqlbackup'@'localhost';

GRANT ENCRYPTION\_KEY\_ADMIN ON \*.\* TO 'mysqlbackup'@'localhost';

GRANT INNODB\_REDO\_LOG\_ARCHIVE ON \*.\* TO 'mysqlbackup'@'localhost';

GRANT ALTER ON mysql.backup\_progress TO 'mysqlbackup'@'localhost';

GRANT CREATE, INSERT, DROP ON mysql.backup\_progress\_old TO 'mysqlbackup'@'localhost';

GRANT CREATE, INSERT, DROP, ALTER ON mysql.backup\_progress\_new TO 'mysqlbackup'@'localhost';

GRANT CREATE, INSERT, DROP ON mysql.backup\_history\_old TO 'mysqlbackup'@'localhost';

GRANT CREATE, INSERT, DROP, ALTER ON mysql.backup\_history\_new TO 'mysqlbackup'@'localhost';

GRANT ALTER ON mysql.backup\_sbt\_history TO 'mysqlbackup'@'localhost';

GRANT CREATE, INSERT, DROP ON mysql.backup\_sbt\_history\_old TO 'mysqlbackup'@'localhost';

GRANT CREATE, INSERT, DROP, ALTER ON mysql.backup\_sbt\_history\_new TO 'mysqlbackup'@'localhost';

  1. 在备份从节点或MGR集群备节点创建mysqlbackup备份用户登录令牌

mysql\_config\_editor set --login-path=backup --user=mysqlbackup --password --socket=/tmp/mysql\_3306.sock --host=localhost

$ mysql\_config\_editor set --login-path=backup --user=mysqlbackup --password --socket=/tmp/mysql\_3306.sock --host=localhost

Enter password: \*\*\*\*\*\* <<此处根据提示输入mysqlbackup备份用户密码

  1. 查看mysqlbackup备份用户登录令牌

$ mysql\_config\_editor print --all

\[backup\]

user = "mysqlbackup"

password = \*\*\*\*\*

host = "localhost"

socket = "/tmp/mysql\_3306.sock"

  1. 在备份节点主机创建备份目录并授予权限

mkdir -p /app/bakcup/log

mkdir -p /app/bakcup/back\_images/{full,incremental}

chown -R mysql.mysql /app/backup

  1. 配置全备脚本 mysql\_fullback.sh

#!/bin/bash

# User specific environment and startup programs

source /etc/profile

 

################### Declare environment variables #########

record\_log=/app/bakcup/log

log\_name=fullback\_record\_\`date '+%Y-%m-%d-%H-%M-%S'\`.log

defaults\_file=/app/mysql/mysql3306/etc/my.cnf

backup\_dir=/app/bakcup/back\_images/full

login\_path=backup

 

echo "--------------------Full Backup Starting------------------" >> $record\_log/$log\_name

date >> $record\_log/$log\_name

 

mysqlbackup --defaults-file=$defaults\_file \\

--login-path=$login\_path \\

--with-timestamp \\

--backup-dir=$backup\_dir \\

--backup-image=fullback\_\`date +%Y%m%d\`.mbi \\

--compress-level=1 \\

backup-to-image >>$record\_log/$log\_name 2>&1

pkill mysqlbackup

date >> $record\_log/$log\_name

echo "--------------------Full Backup Ended------------------" >> $record\_log/$log\_name

  1. 配置增量备份脚本 mysql\_incremental.sh

#!/bin/bash

# User specific environment and startup programs

source /etc/profile

 

################### Declare environment variables #########

record\_log=/app/bakcup/log

log\_name=incremental\_record\_\`date '+%Y-%m-%d-%H-%M-%S'\`.log

defaults\_file=/app/mysql/mysql3306/etc/my.cnf

backup\_dir=/app/bakcup/back\_images/incremental

full\_dir=/app/bakcup/back\_images/full

login\_path=backup

 

echo "--------------------incremental Backup Starting------------------" >> $record\_log/$log\_name

date >> $record\_log/$log\_name

mysqlbackup --login-path=$login\_path \\

--defaults-file=$defaults\_file \\

--with-timestamp \\

--incremental \\

--incremental-base=history:last\_backup \\

--backup-dir=$backup\_dir \\

--backup-image=incremental\_\`date +%Y%m%d%H%M%S\`.mbi \\

--compress-level=1 \\

backup-to-image >> $record\_log/$log\_name 2>&1

 

pkill mysqlbackup

date >> $record\_log/$log\_name

echo "--------------------incremental Backup Ended------------------" >> $record\_log/$log\_name.

  1. 配置删除脚本 mysql\_delete.sh

########## delete the images && metadata\_infor && log from 7 days ago #############

 

fullimages\_dir=/app/bakcup/back\_images/full

/bin/find $fullimages\_dir -type d -name "202\*" -mtime +7 -exec rm -rf {} \\;

 

incimages\_dir=/app/bakcup/back\_images/incremental

/bin/find $incimages\_dir -type d -name "202\*" -mtime +8 -exec rm -rf {} \\;

log\_dir=/app/bakcup/log

find $log\_dir -type f -name "\*\_record\_\*" -mtime +7 -exec rm -rf {} \\;

  1. 部分备份

备份除 “ mysql ”和“ performance\_schema ” 数据库中的表之外的所有表

mysqlbackup --defaults-file=/app/mysql/mysql3306/etc/my.cnf \\

--login-path=backup \\

--with-timestamp \\

--backup-dir=/app/bakcup/back\_images/table \\

--backup-image=test2.mbi \\

--exclude-tables="^(mysql|performance\_schema)\\." \\

backup-to-image >> /app/bakcup/log/table\_record\_\`date '+%Y-%m-%d-%H-%M-%S'\`.log 2>&1

备份“ fact\_sale ”的表

mysqlbackup --defaults-file=/app/mysql/mysql3306/etc/my.cnf \\

--login-path=backup \\

--with-timestamp \\

--backup-dir=/app/bakcup/back\_images/table \\

--backup-image=test1.mbi \\

--include-tables="^test\\fact\_sale" \\

backup-to-image >> /app/bakcup/log/table\_record\_\`date '+%Y-%m-%d-%H-%M-%S'\`.log 2>&1

备份“ sales ” 数据库中的所有表,但排除名称为 “ hardware ”的表

mysqlbackup --defaults-file=/app/mysql/mysql3306/etc/my.cnf \\

--login-path=backup \\

--with-timestamp \\

--backup-dir=/app/bakcup/back\_images/table \\

--backup-image=test3.mbi \\

--include-tables="^sales\\."

--exclude-tables="^sales\\.hardware$" \\

backup-to-image >> /app/bakcup/log/table\_record\_\`date '+%Y-%m-%d-%H-%M-%S'\`.log 2>&1

Mysqlbackup参数:

–backup-image:生成的备份image名称

–backup-dir:生成的备份image所在目录

–show-progress:显示备份进度\[可选项\]

–compress:对备份image进行压缩节省空间\[可选项\]

–with-timestamp:在backup-dir目录下生成’年-月-日-时-分-秒’的目录存储备份image

backup-to-image:声明这是备份为image的备份

--no-locking 参数 ---数据库中存储在MyISAM 存储引擎时添加该参数,只有InnoDB引擎时不建议添加该参数

–datadir: mysql server的datadir目录,就是要还原到这里

–backup-dir:生成的备份datafile所在目录

–show-progress:显示还原进度\[可选项\]

–uncompress\[可选项\]

–apply-log: 把备份期间的redo log贴回datafile

–copy-back:把datafile复制回datadir目录

–copy-back-and-apply-log:把备份期间的redolog贴回datafile再把datafile复制回datadir目录

mysqlbackup 8.0.21版本开始可以识别备份是否为compress,如果是,那么它在还原时会自动uncompress,不需要显示告诉它,低于8.0.21版本备份时指定compress参数,恢复时需指定uncompress。

  1. 备份验证及查看命令

mysqlbackup --backup-image= /app/bakcup/back\_images/full/2023-01-11\_16-51-07/ fullback\_20230111.mbi list-image ---查看备份列表

mysqlbackup --backup-image=/app/bakcup/back\_images/full/2023-01-11\_16-51-07/ fullback\_20230111.mbi validate ---验证备份状态

备份恢复

  1. 全备恢复:

恢复前关闭mysql,并清空mysql数据目录。

mysqlbackup --defaults-file= -uroot --backup-image= \\

--socket=< .sock > --backup-dir= --datadir= --uncompress copy-back-and-apply-log

  1. 增量备份恢复:

在执行增量恢复之前,要先恢复完整全量备份。

mysqlbackup --defaults-file= -uroot --backup-image= \\

--socket=< .sock > --backup-dir= --datadir= --incremental \\

--uncompress copy-back-and-apply-log

  1. 部分表恢复:

恢复pets用户中的cats表

mysqlbackup --socket=< .sock > --include-tables="^pets\\.cats" --backup-dir= \\

--backup-image= copy-back-and-apply-log

恢复“sales”数据库中的所有表,但排除名为“hardware”的表:

mysqlbackup --socket=< .sock > --include-tables="^sales\\." \\

--exclude-tables="^sales\\.hardware$" --backup-dir= --backup-image= copy-back-and-apply-log

最后修改时间:2023-01-16 11:22:41
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论