Restic 是一款用GO编写的开源备份程序。它支持主要的操作系统 Linux、macOS、Windows ,以及 FreeBSD、OpenBSD。它可将数据备份至不同的目标存储上,包括云存储。Restic 遵循五个设计原则:简单、快速、可验证、安全、高效。如今在 github 上已有 23k star,社区也持续在维护中。
实践是检验真理的唯一标准,既然那么好,我们就测试看看。
# CentOS 安装 Restic
wget https://github.com/restic/restic/releases/download/v0.16.3/restic-0.16.3.tar.gz
tar -zxvf restic-0.16.3.tar.gz
cd restic-0.16.3
go run build.go
mv restic /usr/bin/restic
# Windows 安装 Restic
下载 https://github.com/restic/restic/releases/download/v0.16.3/restic_0.16.3_windows_amd64.zip
解压 restic_0.16.3_windows_amd64.exe , 更名为 restic.exe , 移动到 %SystemRoot%\System32
安装完成后,第一步我们先确定我们的数据要存储到哪里,也就是先设置存储库(repository)。你可以备份至本地目录、sftp服务器、rest服务器、OpenStack Swift 容器、Amazon S3 存储桶、Google Cloud Storage、微软Azure Blob、阿里云OSS、腾讯云COS等。
创建新的存储库(保存备份的目录),会创建响应的其他目录,这些目录存储备份、一些相应的元数据和加密密钥。要访问存储库,必须指定密码,一个存储库可以保存多个密钥。
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存储库
inux简单测试过了,现在开始验证一下怎么在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.exe 到 C:\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。
阅读原文:原文链接
该文章在 2025/1/10 11:07:20 编辑过