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

我有一个生产服务器运行与MySQL数据库的CentOS。 在家里,我有一个QNAP NAS(运行一点embedded式Linux)。 我想在我的NAS上做一个Cron作业来备份我的CentOS生产服务器上的数据。 问题是,我不想传输未压缩的数据(SQL转储将结束5GB)。 我想SSH到服务器上,运行SQL转储,压缩结果,下载它。

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

您可以使用这个方便的一行,从连接的本地运行:

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

简而言之,由mysqldump SSH命令生成的输出将被传送到连接的远程端 gzip ,然后被redirect到stdout ,然后被redirect到NAS上的/path/to/my/dump.sql.gz 。 只有压缩的数据将通过networking发送。

您可以通过在脚本中运行以下内容(这与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将其复制到networking上,最后删除远程副本。

好吧,我分享我个人的方法,我用每天备份所有MySQL数据库与归档。

  1. 在/ bin或任何你喜欢的地方用下面的代码创build一个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文件名标记该脚本可执行
  4. 在cron中设置每天运行的脚本0 0 * * /bin/mysqlbackup.sh,每天晚上12点钟创build。
  5. 每天使用cron将rsync / backup备份到您的nas。 设置rsync你可以使用下面的链接。 https://blogs.oracle.com/jkini/entry/how_to_scp_scp_and

要么

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

祝你好运….

这是可能的 – 我曾经做过类似的事情。 使用SSH来执行mysql_dump (或者你最喜欢的等价物),然后用gzip来执行,然后使用scp进行传输,然后再次将SSH转储到rm文件中。