Sivo 悉见

部署Python自动备份MySQL数据库脚本

匿名 · 更新于 2018/6/5

1. 安装扩展源EPEL

yum -y install epel-release

2. 安装PIP

yum -y install python-pip

3. 安装Python第三方扩展库

pip install apscheduler

4. 上传脚本

pscp local_dir user@ip:/remote_dir
# 例:
pscp C:\Users\pantao\Documents\Projects\python\auto_backup\mysql_auto_backup.py root@180.97.80.83:/root/auto_backup
pscp C:\Users\pantao\Documents\Projects\python\auto_backup\config.json root@180.97.80.83:/root/auto_backup

Putty下载地址(pscp命令) 
项目地址

5. 修改配置文件 mysql_config.json (请根据实际情况修改)

{
    "nodes": [
        {
            "user": "zhazhapan",
            "password": "zhazhapan",
            "host": "127.0.0.1",
            "dbs": [
                "efo"
            ]
        }
    ],
    "mysqldump": "",
    "path": "/Users/pantao/Desktop/backup",
    "dateFormat": "%Y-%m-%d-%H-%M-%S",
    "expired": "60*60*24*100",
    "schedulerParams": {
        "cron": false,
        "dayOfWeek": "0-6",
        "hour": 15,
        "minute": 27,
        "seconds": 10
    }
}

说明:如果 mysqldump 已添加到环境变量(可直接执行 mysqldump 命令),则设置配置文件中的 mysqldump 值为空; 否则请将 mysqldump 值设置 mysqldump 所在的路径(并在结尾添加一个文件分隔符),比如 /usr/local/mysql-5.7.17-macos10.12-x86_64/bin/

6. 启动脚本,使脚本在后台运行(不受终端影响)

cd /root/auto_backup
setsid python mysql_auto_backup.py
# 或者
nohup python mysql_auto_backup.py &

7. 检测脚本是否运行

ps -ef | grep mysql_auto_backup.py

8. 设置开机自启

  1. 新建自启脚本

    <div class="highlight highlight-source-shell" style="box-sizing: border-box; margin-bottom: 16px;">
    <pre style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; margin-top: 0px; margin-bottom: 0px; word-wrap: normal; padding: 16px; overflow: auto; line-height: 1.45; background-color: rgb(246, 248, 250); border-radius: 3px; word-break: normal;">
    

    vim auto.sh

  2. 添加内容

    <div class="highlight highlight-source-shell" style="box-sizing: border-box; margin-bottom: 16px;">
    <pre style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; margin-top: 0px; margin-bottom: 0px; word-wrap: normal; padding: 16px; overflow: auto; line-height: 1.45; background-color: rgb(246, 248, 250); border-radius: 3px; word-break: normal;">
    

    #!/usr/bin/env bash cd /root/auto_backup setsid python mysql_auto_backup.py

  3. 在 /etc/rc.local 最后一行中添加脚本路径

    <div class="highlight highlight-source-shell" style="box-sizing: border-box; margin-bottom: 16px;">
    <pre style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, Courier, monospace; font-size: 13.6px; margin-top: 0px; margin-bottom: 0px; word-wrap: normal; padding: 16px; overflow: auto; line-height: 1.45; background-color: rgb(246, 248, 250); border-radius: 3px; word-break: normal;">
    

    /root/auto_backup/auto.sh



解决压缩比例太小问题:
该自动备份脚本很优秀,但唯一的不足是压缩后的gz文件和解压后的sql文件大小几乎一样,这样就会导致数据库备份文件占用大量磁盘空间甚至导致服务器因磁盘使用率太高而停止运行的风险,所以我们需要将该脚本调整一下,使其可以将gz文件压缩的更小,进而省出更多存储空间,具体修改方法如下:

第一步、备份命令中加入
| gzip


第二步、修改
.sql.gz


第三步、注释掉之前的压缩功能代码

到此为止,压缩就可以了,测试结果为原来120M大小的sql文件,压缩后大概20M左右,压缩后为原文件大小的1/6,效果显著!!!