阅读 95

技术分享 | 物理备份到远程 MySQL 服务器

作者:秦广飞

爱可生 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目录
image
image

查看远端(qin_4)备份数据

image

恢复数据

-- 删除远端服务器(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
image
image
image

建立复制

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;
image
image

场景二 将备份文件流式传输到远程主机,并恢复

备份命令

-- 在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'
image
image

查看远程服务器 qin_4 上恢复出来的数据。

image

测试结果

mysqlbackup 既可以直接将备份文件流式传输到远程服务器,还可以选择在传输到远端后直接恢复出数据。

使用 mysqlbackup 备份到远程服务器时,可以提前给服务器之间配置 SSH 密钥认证,实现免密登录,也可以在备份中途输入密码完成备份,两者皆可。

image

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 :指定临时备份目录
image
image

查看远端备份数据

image

解压缩恢复数据

-- 在远程服务器上解压缩
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
image
image
image

场景二 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"
image

查看远端备份数据。

image

将备份数据解压缩,并恢复到数据目录。

-- 解压缩,应用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
image

修改属组属主,启动实例。

-- 修改属组属主
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
image

测试结果

测试过程表明,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/mysql-enterprise-backup/4.1/en/meb-backup-streaming.html

https://www.percona.com/doc/percona-xtrabackup/2.4/innobackupex/streaming_backups_innobackupex.html

作者:爱可生开源社区

原文链接:https://www.jianshu.com/p/7c5db140e978

文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐