如何通过 SSH 运行 Cron 作业来备份 MySQL 服务器

如何通过 SSH 运行 Cron 作业来备份 MySQL 服务器

我有一台运行 CentOS 和 MySQL 数据库的生产服务器。在家里,我有一台 QNAP NAS(运行一个小型嵌入式 Linux)。我想在我的 NAS 上创建一个 Cron 作业来备份我的 CentOS 生产服务器中的数据。问题是我不想传输未压缩的数据(SQL 转储最终将达到 5gb 左右)。我想通过 SSH 连接到服务器,运行 SQL 转储,压缩结果,然后下载它。

这可能吗?最有效的方法是什么?

答案1

您可以使用这个方便的单行程序,从当地的连接侧:

ssh user@remoteserver "mysqldump -h myhost -u myuser -pmypass mydb | gzip" > /path/to/my/dump.sql.gz

简而言之,你的mysqldumpSSH 命令生成的输出将通过管道传输到gzip 在连接的远端然后重定向到stdout,然后重定向到/path/to/my/dump.sql.gzNAS 上。只有压缩数据才会通过网络发送。

您可以通过在脚本中运行以下内容来稍微扩展它(这相当于 John 在他的回答中指定的内容):

ssh user@remoteserver "mysqldump -h myhost -u myuser -pmypass -D mydb | gzip > /tmp/dump.sql.gz"
scp user@remoteserver:/tmp/dump.sql.gz /path/to/my/dump.sql.gz
ssh user@remoteserver "rm -f /tmp/dump.sql.gz"

这是一种稍微冗长的方法,将首先转储/压缩整个数据库,然后通过网络复制它scp,最后删除远程副本。

答案2

好的,我将分享我个人的方法,即我每天使用存档备份所有 mysql 数据库。

  1. 使用以下代码在 /bin 或你喜欢的任何其他位置创建文件 mysqlbackup.sh

    #!/bin/bash
    # modify the following to suit your environment
    export DAYS="3"
    export DB_BACKUP="/backup/"
    export DB_USER="root"
    export DB_PASSWD="<you root password>"
    # title and version
    echo ""
    echo "mySQL_backup"
    echo "----------------------"
    echo "* Deleting OLD Backup ..."
    # this will delete old file older than DAYS
    find $DB_BACKUP -mtime +$DAYS -exec rm -rf {} \; 
    echo "* Creating new backup..."
    # Next command take backup compressed with bzip2 save in directory DB_BACKUP
    mysqldump --all-databases | bzip2 > $DB_BACKUP/mysql-`date +%Y-%m-%d-%H:%M`.bz2
    echo "----------------------"
    echo "Done"
    exit 0
    
  2. 保存该文件
  3. 使用 chmod +x filename 将该脚本标记为可执行
  4. 在 cron 中设置该脚本以便每天运行 0 0 * * * /bin/mysqlbackup.sh,该脚本将在每天午夜 12 点创建。
  5. 每天使用 cron 将 rsync /backup 同步到您的 nas。您可以使用以下链接来设置 rsync。 http://www.thegeekstuff.com/2011/07/rsync-over-ssh-without-password/ https://blogs.oracle.com/jkini/entry/how_to_scp_scp_and

或者

  1. 您也可以修改包含 rsync 文件夹的原始脚本,在这种情况下您不需要设置第二个 cron。

祝你好运......

答案3

这是可能的 - 我曾经做过非常类似的事情。使用 SSH 执行mysql_dump(或您最喜欢的等效命令)并与 进行合并gzip,然后使用scp进行传输,然后再次通过 SSH 访问rm转储文件。

相关内容