Restic 应用实践:全量备份 MySQL

Linux中物理热备MySQL

创建新的存储库(保存备份的目录),会创建响应的其他目录,这些目录存储备份、一些相应的元数据和加密密钥。要访问存储库,必须指定密码,一个存储库可以保存多个密钥。

mkdir -p /opt/restic-repo/192.168.111.150
restic init --repo /opt/restic-repo/192.168.111.150 #自定义密码,记住!
ll /opt/restic-repo/192.168.111.150
-r--------   1 root root  155 Feb 13 08:21 config
drwx------ 258 root root 8192 Feb 13 08:21 data
drwx------   2 root root    6 Feb 13 08:21 index
drwx------   2 root root   78 Feb 13 08:21 keys
drwx------   2 root root    6 Feb 13 08:21 locks
drwx------   2 root root    6 Feb 13 08:21 snapshots

现在我要备份MySQL目录,指定的 repository 为刚创建的路径。需要输入刚才的密码噢

restic -r /opt/restic-repo/192.168.111.150 --verbose backup /data/mysql3306

备份完成后,可以通过 snapshots 查看目录中的所有备份记录

restic -r /opt/restic-repo/192.168.111.150 snapshots

图片

即使MySQL正在运行中,也是可以进行热备的,不影响数据的写入。唯一不方便、但也比较安全的一点是:你不能直接查看到备份的明文数据。Restic可以排或包含指定的文件备份,可以对比备份记录的差异等。

Windows中逻辑备份MySQL至Linux存储库

Linux简单测试过了,现在开始验证一下怎么在Windows中,将数据备份至Linux中的存储库。

在Windows中打开powershell,生成本机密钥(默认在用户目录),再将公钥添加到linux服务器中,这是为了避免在Windows操作输入密码。完成后,创建存储库,通过sftp指定Linux服务器及任意路径。

ssh-keygen -t rsa
cat C:\Users\<user>\.ssh\id_rsa.pub | ssh root@192.168.111.150 "mkdir -p ~/.ssh;cat >> ~/.ssh/authorized_keys"
restic init --repo sftp:root@192.168.111.150:/opt/restic-repo/192.168.111.3

由于powershell的管道设计没shell好,容易出现问题,我们都尽量避免输入相应的restic存储库密码。在Windows中创建一个密码文件(E:\Backup\restic_passfile.conf),里面保存一个明文的存储库访问密码。万事俱备,接下来进行备份。

#备份MySQL
.\mysqldump -h 127.0.0.1 -P3306 -uroot -pmysql --single-transaction -B devops | restic -r sftp:root@192.168.111.150:/opt/restic-repo/192.168.111.3 backup --password-file E:\Backup\restic_passfile.conf --stdin --stdin-filename devops.sql

#查看存储库
restic -r sftp:root@192.168.111.150:/opt/restic-repo/192.168.111.3 snapshots

图片

如果打算在Windows中使用压缩,可安装gzip。打开网址 https://gnuwin32.sourceforge.net/packages/gzip.htm 下载 Binaries 解压,拷贝 bin\gzip.exeC:\Windows\System32\

[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("UTF-8") .\mysqldump -h 127.0.0.1 -P3306 -uroot -pmysql --single-transaction -B devops | gzip --rsyncable -c | restic -r sftp:root@192.168.111.150:/opt/restic-repo/192.168.111.3 backup --password-file E:\Backup\restic_passfile.conf --stdin --stdin-filename devops.sql.gz

类似的,你可以在Linux或Windows中,使用数据库相关的逻辑备份工具mongodump、pg_dump 等。

更多 Restic 相关命令:

restic -r /opt/restic-repo/192.168.111.3 snapshots # 查看快照
restic -r /opt/restic-repo/192.168.111.3 stats  # repo 统计
restic -r /opt/restic-repo/192.168.111.3 stats b5365ec9  # 指定 repo 统计
restic -r /opt/restic-repo/192.168.111.3 ls b5365ec9  #列出文件信息
restic -r /opt/restic-repo/192.168.111.3 list snapshots # blobs|packs|index|snapshots|keys|locks]
restic -r /opt/restic-repo/192.168.111.3 diff 4c6d8ea3 188e8af2 # 对比快照
restic -r /opt/restic-repo/192.168.111.3 forget 188e8af2 #删除快照
restic -r /opt/restic-repo/192.168.111.3 restore 4c6d8ea3 --target /tmp/ #MySQL恢复文件

Windows中物理备份SQLServer至腾讯云COS

现在开始验证一下怎么在Windows中,将SQLServer备份至腾讯云对象存储COS!Restic 支持备份亚马逊s3存储桶,但国内的云厂商是没有明确说明的,如何设置呢?

我们知道访问云上存储桶的命令,大多数云厂商设置的参数基本都差不多,我们只要将restic支持的AWS相关参数的值,改为国内对应云厂商的存储桶参数值就好。restic备份至阿里云存储桶OSS已经有人测试过了,我这里就测试如何备份至腾讯云对象存储COS。

这里需要restic的几个环境变量AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_DEFAULT_REGION、RESTIC_PASSWORD(或RESTIC_PASSWORD_FILE)、RESTIC_REPOSITORY,主要也是避免在命令行中显式输入而报错。如果在Linux中,可以通过 export 设置变量值,在Windowspowershell中,我们设置并执行如下命令:

$Env:AWS_ACCESS_KEY_ID='XXXXXXXXXXXXX'
$Env:AWS_SECRET_ACCESS_KEY='XXXXXXXXXXXXX'
#$Env:AWS_DEFAULT_REGION='ap-guangzhou'
#$Env:RESTIC_PASSWORD_FILE='E:\restic_passfile.conf'
$Env:RESTIC_PASSWORD='XXXXXXXXXXX'
$Env:RESTIC_REPOSITORY='s3:https://cos.ap-guangzhou.myqcloud.com/mycos/backup/restic/'

接下来的restic命令使用就非常简单了,省去了参数的输入。在 Windows 上,使用–use-fs-snapshot选项将在创建备份时使用 Windows 的卷影复制服务 (VSS)。Restic 将为包含要备份的文件的每个卷透明地创建 VSS 快照。文件是从 VSS 快照而不是常规文件系统中读取的。这允许备份在备份期间被另一个进程独占锁定的文件。在SQLServer中,使用VSS支持需要启动SQL Server VSS Writer 服务。

restic init
restic --use-fs-snapshot backup E:\MSSQL\Data
restic --use-fs-snapshot backup E:\MSSQL\Data\devops.bak
restic --use-fs-snapshot backup E:\MSSQL\Data\devops.mdf
restic --use-fs-snapshot backup E:\MSSQL\Data --exclude="tempdb.*" --compression max
restic snapshots
restic stats 024b70c7
restic forget 024b70c7
restic restore 024b70c7 --target E:/MSSQL/

restic 的优势在于物理热备份,然而当今大多数企业都使用云计算,这类备份工具反而没有那么好用了。不过,对于一些临时的数据或文件迁移,restic也是不错的一种选择。对于使用命令行管理不方便的,可下周一个简单的跨平台Restic GUI——restic-browser。

作者:Jeebiz  创建时间:2024-08-16 16:45
最后编辑:Jeebiz  更新时间:2024-08-20 17:39