本文承接个人数据中心解决方案,补全系统架构中的最后一个重要模块——数据备份模块。
即使再稳定的服务器也难免会遇到出问题的时候,所以异地容灾备份不可或缺。我的备份方案是每天将数据库中的重要数据表全量导出,然后备份到坚果云上。同样的思路也可以备份到不同的云盘或本地设备。
graph LR; A(MySQL)--数据备份脚本-->B(本地磁盘); B--webdav-->C(坚果云); B--相应的数据接口-->D(其他云盘或服务器);
数据导出
导出MySQL中的数据表可以直接使用系统提供的mysqldump工具,该工具在mysql的系统文件夹下。但是考虑到我可能在别的服务器上执行备份操作,所以还是选择以网络传输的方式进行数据读取。
1 | import time |
首先将我想要备份的数据表登记到table_name
这个列表中;
之后程序会逐张以CSV的形式备份到本地文件夹backup_root_dir
中,在这个文件夹中将会以日期创建自文件夹,存放当天到备份数据;
1 | . |
然后clear_old_data()
函数会每天检查并清理超过30天的备份数据,你可以通过life_time
参数进行设置,单位为天。
坚果云备份
挂载坚果云文件夹
要将数据通过webdav同步到坚果云上,首先在坚果云上创建应用并获取应用密码
然后在服务器上还需要安装davfs2这个dav文件系统
1 | yum install davfs2 -y |
直接命令行挂载
挂载文件夹到webdav有多种方式,这里我直接选用命令进行手动挂载,缺点是一旦服务器重启需要重新进行挂载。
如果使用root账户进行挂载,仅root用户有文件夹的读写权限,如果使用其他用户访问需要授权。
这里我直接挂载并指定文件夹访问用户为siriyang
1 | (base) [siriyang@VM-16-17-centos ~]$ sudo mount -o uid="siriyang",gid="siriyang" -t davfs https://dav.jianguoyun.com/dav/siridw_backup/ /home/siriyang/data_ware_house/siridw_backup/ |
其中,https://dav.jianguoyun.com/dav/siridw_backup/
的siridw_backup
为我们在坚果云上自己创建的子文件夹。
遇到报错:
1 /sbin/mount.davfs: mounting failed; the server does not support WebDAV解决方案:
修改配置文件
/etc/davfs2/davfs2.conf
1 ignore_dav_header 1参考资料:
卸载webdav文件夹
1 | sudo umount /home/siriyang/data_ware_house/siridw_backup/ |
遇到报错:
1 umount: /home/siriyang/data_ware_house/siridw_backup: target is busy.解决方案:
1
2
3
4 (base) [siriyang@VM-16-17-centos data_ware_house]$ lsof /home/siriyang/data_ware_house/siridw_backup
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 615260 siriyang cwd DIR 0,70 112 1 /home/siriyang/data_ware_house/siridw_backup
(base) [siriyang@VM-16-17-centos data_ware_house]$ kill -9 615260参考资料:
相关代码已托管于GitHub,欢迎Star!