作者:秦广飞
爱可生 DBA 团队成员,负责我的项目日常问题解决及公司平台问题排查,对数据库有趣味,对技术有想法。一入 IT 深似海,从此节操是路人。
本文起源:原创投稿
* 爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。
本文目录
前言
测试目标
环境信息
测试场景
- mysqlbackup 工具
- XtraBckup 工具
总结
参考链接
前言
昨天,分享了《mysqlbackup 能够近程备份吗》一文,明天再给大家分享一篇备份相干的文章。
咱们曾经晓得了,物理备份无奈备份近程的 MySQL,那么,反过来呢,是否能够间接备份到近程 MySQL 服务器?
答案天然也是必定的,不然我这篇文章就没法写了。
测试目标
为什么咱们要备份到近程服务器呢,通常有上面几种起因:
- 灾备,将备份放在远端服务器。
- 缩小本地磁盘占用,如果本地曾经没有多余的磁盘空间了,这时就能够间接备份到远端,而不用在本地保留备份文件。
- 验证备份文件可用性,通常,咱们须要定期检验下备份文件可用性,那么就能够采纳这种形式,间接备份到近程 MySQL 服务器并复原。
- 增加从实例,间接备份到近程并复原出一个实例,与主库建设复制。
接下来,就是测试过程了 …
环境信息
老规矩,先介绍下环境信息,本文我会从两种罕用的物理备份工具 mysqlbackup 和 XtraBackup 来讲。
每种工具,都会筛选一个场景,将备份文件复原出数据,并建设复制。
其实,还是之前的环境,这里我就间接摘抄了。
主机名 | 主机 IP | 实例 | 版本 | 端口 | 备份用户 | mysqlbackup 版本 | XtraBackup 版本 |
---|---|---|---|---|---|---|---|
qin_2 | 10.186.64.13 | MySQL A | 5.7.25 | 3306 | user_A | 4.1.4 | 2.4.5 |
qin_4 | 10.186.64.16 | MySQL B | 5.7.25 | 3306 | 无 | 4.1.4 | 2.4.5 |
测试场景
mysqlbackup 工具
介绍
mysqlbackup 能够将备份数据通过流式传输到近程服务器,也能够传输到近程后间接复原出数据。
流式传输到近程,须要借助管道和 ssh 等命令。
为了将备份文件传到规范输入,须要应用 backup-to-image 选项,并且令 –backup-image=-
测试过程
场景一 将备份文件流式传输到近程主机
备份命令
-- 备份命令
shell> mysqlbackup --defaults-file=/opt/mysql/etc/3306/my.cnf --user=user_A --password=password_A --socket=/opt/mysql/data/3306/mysqld.sock --backup-image=- --backup-dir=/tmp/backup1 backup-to-image | ssh root@10.186.64.16 'cat > /root/backups/my_backup.img'
-- 备份参数
backup-image=-:将备份数据发送到 stdout
backup-dir=/tmp/backup1:指定用于存储临时文件的目录(须要是不存在的目录)近程主机上须要提前创立 /root/backups 目录
查看远端(qin_4)备份数据
复原数据
-- 删除远端服务器(qin_4)上原有的实例数据
shell> systemctl stop mysqld_3306 && rm -rf /opt/mysql/data/3306/* && rm -rf /opt/mysql/log/binlog/3306/* && rm -rf /opt/mysql/log/relaylog/3306/* && rm -rf /opt/mysql/log/redolog/3306/*
-- 复原备份数据到数据目录
shell> mysqlbackup --defaults-file=/opt/mysql/etc/3306/my.cnf --backup-dir=/root/backups --backup-image=/root/backups/my_backup.img --datadir=/opt/mysql/data/3306 copy-back-and-apply-log
-- 批改属组属主
shell> chown -R actiontech-mysql:actiontech-mysql /opt/mysql/data/3306 && chown -R actiontech-mysql:actiontech-mysql /opt/mysql/log/binlog/3306/ && chown -R actiontech-mysql:actiontech-mysql /opt/mysql/log/redolog/3306/ && chown -R actiontech-mysql:actiontech-mysql /opt/mysql/log/relaylog/3306/
-- 启动实例
shell> systemctl start mysqld_3306
建设复制
mysql> CHANGE MASTER TO MASTER_HOST='10.186.64.13',
MASTER_USER='universe_op',
MASTER_PASSWORD='_Uq0%+58vv617$6N',
MASTER_PORT=3306,
MASTER_AUTO_POSITION=1;
mysql> start slave;
场景二 将备份文件流式传输到近程主机,并复原
备份命令
-- 在 qin_4 上革除上个测试场景复原的数据
shell> systemctl stop mysqld_3306 && rm -rf /opt/mysql/data/3306/* && rm -rf /opt/mysql/log/binlog/3306/* && rm -rf /opt/mysql/log/relaylog/3306/* && rm -rf /opt/mysql/log/redolog/3306/*
-- 在 qin_2 执行备份命令
shell> mysqlbackup --defaults-file=/opt/mysql/etc/3306/my.cnf --user=user_A --password=password_A --socket=/opt/mysql/data/3306/mysqld.sock --backup-dir=/tmp/backup2 --backup-image=- --compress backup-to-image | ssh root@10.186.64.16 'mysqlbackup --backup-dir=/root/backup_tmp --datadir=/opt/mysql/data/3306 --uncompress --backup-image=- copy-back-and-apply-log'
查看近程服务器 qin_4 上复原进去的数据。
测试后果
mysqlbackup 既能够间接将备份文件流式传输到近程服务器,还能够抉择在传输到远端后间接复原出数据。
应用 mysqlbackup 备份到近程服务器时,能够提前给服务器之间配置 SSH 密钥认证,实现免密登录,也能够在备份中途输出明码实现备份,两者皆可。
XtraBckup 工具
介绍
Percona XtraBackup 工具也能通过流式将备份文件间接传到远端服务器。
它反对以 tar 或者 xbstream 两种形式传输到规范输入,再通过管道和 ssh 传到远端。
XtraBackup 工具集成了 innobackupex,且依赖于 xbstream 和 qpress 工具解流和解压缩。
备份到远端服务器时,须要提前配置免密登录,否则会备份失败,XtraBackup 不反对在备份过程中输出明码(不过该问题能够通过应用 sshpass -p 解决)。
测试过程
场景一 tar 形式流式到远端
备份命令
-- 在 qin_2 上配置免密登录到远端(qin_4)shell> ssh-keygen
shell> ssh-copy-id root@10.186.64.16
-- 备份命令
shell> innobackupex --defaults-file=/opt/mysql/etc/3306/my.cnf --user=user_A --password=password_A --socket=/opt/mysql/data/3306/mysqld.sock --no-timestamp --stream=tar /tmp/backup_xtrabackup | ssh root@10.186.64.16 \ "cat - > /root/xtrabackup_`date"+%Y%m%d"`.tar"
-- 备份参数
--stream=tar:指定流式形式为 tar 或 xbstream
/tmp/backup_xtrabackup:指定长期备份目录
查看远端备份数据
解压缩复原数据
-- 在近程服务器上解压缩
shell> mkdir -p /root/xtrabackup_20210402
shell> tar -xf xtrabackup_20210402.tar -C /root/xtrabackup_20210402
-- 复原备份数据到数据目录
shell> innobackupex --apply-log /root/xtrabackup_20210402
shell> innobackupex --defaults-file=/opt/mysql/etc/3306/my.cnf --move-back /root/xtrabackup_20210402
-- 批改属组属主
shell> chown -R actiontech-mysql:actiontech-mysql /opt/mysql/data/3306 && chown -R actiontech-mysql:actiontech-mysql /opt/mysql/log/binlog/3306/ && chown -R actiontech-mysql:actiontech-mysql /opt/mysql/log/redolog/3306/ && chown -R actiontech-mysql:actiontech-mysql /opt/mysql/log/relaylog/3306/
-- 启动实例
shell> systemctl start mysqld_3306
场景二 xbstream 形式流式到远端
备份命令
-- 近程服务器上创立备份文件目录
shell> mkdir -p /root/xtrabackup_20210402
-- 备份文件以 xbstream 的形式传到近程服务器并解流
shell> innobackupex --defaults-file=/opt/mysql/etc/3306/my.cnf --user=user_A --password=password_A --socket=/opt/mysql/data/3306/mysqld.sock --no-timestamp --compress --stream=xbstream /tmp/backup_xtrabackup | ssh root@10.186.64.16 "xbstream -x -C /root/xtrabackup_20210402"
查看远端备份数据。
将备份数据解压缩,并复原到数据目录。
-- 解压缩, 利用 redo
shell> innobackupex --decompress /root/xtrabackup_20210402
shell> innobackupex --apply-log /root/xtrabackup_20210402
-- 删除 "qp" 文件,并将数据恢复到数据目录
shell> find /root/xtrabackup_20210402 -name "*.qp" | xargs rm -f
shell> innobackupex --defaults-file=/opt/mysql/etc/3306/my.cnf --move-back /root/xtrabackup_20210402
批改属组属主,启动实例。
-- 批改属组属主
shell> chown -R actiontech-mysql:actiontech-mysql /opt/mysql/data/3306 && chown -R actiontech-mysql:actiontech-mysql /opt/mysql/log/binlog/3306/ && chown -R actiontech-mysql:actiontech-mysql /opt/mysql/log/redolog/3306/ && chown -R actiontech-mysql:actiontech-mysql /opt/mysql/log/relaylog/3306/
-- 启动实例
shell> systemctl start mysqld_3306
测试后果
测试过程表明,XtraBackup 工具也能够通过流式备份传到远端 MySQL 服务器。
不过,因为须要依赖第三方工具,所以,解流和解压缩的过程显得有些简单,如果想要将备份文件传到远端之后,间接复原进去,能够参考上面的形式:
shell> innobackupex --defaults-file=/opt/mysql/etc/3306/my.cnf --user=user_A --password=password_A --socket=/opt/mysql/data/3306/mysqld.sock --no-timestamp --compress --stream=xbstream /tmp/backup_xtrabackup | sshpass -p '666666a' ssh root@10.186.64.16 "mkdir -p /root/xtrabackup_20210402 && xbstream -x -C /root/xtrabackup_20210402 && innobackupex --decompress /root/xtrabackup_20210402 && innobackupex --apply-log /root/xtrabackup_20210402 && find /root/xtrabackup_20210402 -name"*.qp"| xargs rm -f && innobackupex --defaults-file=/opt/mysql/etc/3306/my.cnf --move-back /root/xtrabackup_20210402"
总结
mysqlbackup 和 Percona XtraBackup 工具都反对流式传输备份文件到远端服务器,甚至是间接在远端服务器上复原数据。
相比 mysqlbackup 工具,Percona XtraBackup 须要解压解流等操作,复原数据没有 mysqlbackup 简略快捷。
配置服务器之间 SSH 密钥认证,或应用 sshpass -p 能够解决中途输出明码的困境。
参考链接
https://dev.mysql.com/doc/mys…
https://www.percona.com/doc/p…