为了数据安全,数据库应该经常备份到其他设备中,其中备份到网盘是一个方便的做法,这里使用Rclone挂载Onedrive并设置从Docker和Kubernetes中自动导出数据库并备份。
挂载远程目录
首先安装Rclone,使用包管理器或者安装脚本都可以,安装后执行配置命令:
rclone config
接下来会进入交互式界面:
No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q>
输入n
创建新配置,然后输入配置名称,随意即可,接下来会返回网盘选择列表:
Type of storage to configure.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
1 / 1Fichier
\ "fichier"
2 / Alias for an existing remote
\ "alias"
3 / Amazon Drive
\ "amazon cloud drive"
⋮
22 / Microsoft OneDrive
\ "onedrive"
⋮
35 / seafile
\ "seafile"
Storage>
这里看到OneDrive在第22位,所以输入22
,由于不同版本中位置可能不同,请确认好数字再输入。
接下来要求输入OAuth Id和Secret,不用填写直接回车即可。然后询问是否进行高级配置,这里不需要,输入n
跳过。现在会询问是否进行自动配置,如果是具有图形界面的设备,可以输入y
,然后打开浏览器链接并登录账号;如果是没有图形界面的设备,则需要输入n,会要求使用另一台具有图形界面的设备运行返回的命令,例如rclone authorize "onedrive"
。用另一台有浏览器的设备安装Rclone并执行该命令,则会返回浏览器地址,打开并登录,成功后终端会返回一串token,将其复制到原来的设备中,记得包含两边的{}
。
接下来会要求选择访问方式,由于使用的是普通的OneDrive,这里输入1
,如果使用SharePoint等按需输入。输入后会返回可用的网盘列表,输入前面的数字。接下来会要求检查类型和地址,无误后输入y
。
最后会输出配置文件来要求最后的确认,无误后输入y保存。然后输入q退出配置编辑。
可以使用rclone move命令来将文件移动到网盘:
rclone move 源文件路径 网盘配置名:备份目录路径
也可以挂载远程文件夹,将网盘当作本地目录使用,:
rclone mount --daemon 配置文件名:网盘目录 本地目录 --copy-links --no-gzip-encoding --no-check-certificate --allow-other --allow-non-empty --umask 000
如果出错可以去掉--daemon来查看错误原因,例如fuse未安装或配置文件中最后一行未添加user_allow_other
等
导出数据库
在Docker容器内执行命令的方式为:
docker exec 容器名 命令
在Kubernetes容器内执行命令的方式为:
kubectl -n 命名空间 exec -it 工作负载类型/工作负载名称 -- 命令
其中一般常用的工作负载为Deployment,而数据库有持久储存的要求,使用的工作负载通常为StatefulSet,可以使用kubectl get 工作负载类型
来查看。
而执行数据导出的命令不同数据库各不相同,这里以MySQL和PostgreSQL为例,MySQL为:
mysqldump -u 用户名 --password=密码 数据库名 > 备份文件.sql
如果要导出全部数据库,可以使用root的用户名和密码,然后将数据库名替换为--all-databases
。
PostgreSQL命令为:
pg_dump -U 用户名 -d 数据库名 > 备份文件.sql
如果要导出全部数据库则需使用pg_dumpall
命令。
如果提示找不到命令可以使用容器内的绝对路径来执行。
将上述内容组合起来,并写成脚本,例如:
#!/bin/sh
docker exec database /usr/bin/mysqldump -u root --password 密码 --all-databases > mysql-all-backup.sql
wait
rclone move mysql-all-backup.sql OneDrive:/Backup/
由于导出数据库较大时可能用时较长,所以中间添加wait命令来等待导出完成。脚本创建使用chmod +x 脚本名.sh
来赋予执行权限。完成后可以试用一下能否正常运行。
最后设置自动任务,使用crontab -e
,在最后添加自动运行项目:
f1 f2 f3 f4 f5 用户名 执行的命令,这里填写脚本路径
其中前面f的位置分别代表分钟、小时、日期、月份、星期,可填写的内容如下:
* | 任意值,例如每分钟或每小时。 |
, | 指定值,例如小时设置为1,3,5为1时、3时、5时。 |
- | 范围,例如分钟设置为2-10则为2分至10分。 |
/ | 间隔,可以和*和-混合使用,例如分钟设置为*/5为每5分中,1-20/5为1分至20分之间,每5分钟。 |
L | 表示最后,由于月份结尾并不固定,可以使用L表示每月最后一天。 |
例如:每5分钟为*/5 * * * *
,每日0时0分为0 0 * * *
,每月1日和15日0时0分为0 0 1,15 * *
。要注意的是日期和星期为或的关系,如果都设置的话的两者都会触发。
执行时会输出命令的内容,如果不想要可以在命令后面添加 > /dev/null 2>&1
,注意最前面有空格。设置完成后等到执行时间可以确认下是否执行成功。方便起见可以先设置短间隔,正常后在设置原本的间隔。
Comments NOTHING