Python 实现自动导出 MySQL 数据库,并保存到 Linode Bucket

文章目录

    服务器上的运维操作,还是用 Python 实现比较方便,因为可以随意在服务器上修改 Python 脚本,方便调试。

    真实需求

    定期将多个网站后台的数据库中的文章表和产品表导出。每个数据库一个文件。

    导出到一个临时目录,然后将每个文件生成一个独立的 zip 压缩包。然后移动到指定的目录下。这个目录是 linode bucket 挂载在 linux 系统中的目录。因为导出的数据库文件很大,所以需要生成 zip 压缩包,才移动过来。

    请使用 Python 脚本实现(Python 3.12.3),尽量不要依赖三方库。方便我部署在 ubuntu server 服务器上,并且以系统 crontab 计划任务执行,每日凌晨 3 点执行。

    是否需要导出,通过判断目标目录下的 export_time.txt 文件,里面列出了每个数据库的最后一次导出时间,如果不存在,则代表需要导出一次。然后把导出时间写入。
    判断当前数据库昨日是否有新增的产品或者文章,如果有,则导出全部产品和文章;如果没有,则不需要导出。

    结果说明

    在导出之后,在 linode bucket 中,更新文件 export_time.txt 把最近一次的数据库导出时间写进去。每个数据库一个时间。

    导出方法

    因为 mysql 是安装在 docker 中,需要使用 docker compose 命令进行导出。示例:

    cd /var/docker_compose_xxx
    docker compose exec mysql /usr/bin/mysqldump -u root --password=my_password database_name  > database_name.sql
    

    数据表名

    • article: 文章表
    • product: 产品表

    列出需求之后,基本 AI 一次性就能把 Python 脚本写好。

    zip 压缩效果

    一个 3G 的 SQL 数据库文件,zip 压缩后也就 300M,真的厉害,节省了 90% 的数据传输时间。