我有一个生产服务器运行与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数据库与归档。
在/ 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
要么
祝你好运….
这是可能的 – 我曾经做过类似的事情。 使用SSH来执行mysql_dump (或者你最喜欢的等价物),然后用gzip来执行,然后使用scp进行传输,然后再次将SSH转储到rm文件中。