乐趣区

关于mysql:技术分享-物理备份到远程-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 目录 

查看远端(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…

退出移动版