我现在外面跑的异地备份脚本是:
ssh database "/usr/bin/mysqldump -u${REMOTE_DB_USER} -p${REMOTE_DB_PASS} ${REMOTE_DB} ${REMOTE_TABLE} | /bin/bzip2 -zqc --best" | bunzip2 | /usr/bin/mysql -u${DB_USER} -p${DB_PASS} ${DB}
只有一行.
意思是, ssh 登录到 database, 而后执行 dump > bzip, 并输出到 stdout.
输出出来的内容会被执行脚本的服务接收进 stdin, 然后由 bunzip 直接解压缩出来, 再塞回 mysql 服务器.
由于是备份用的, 多数跑在凌晨三四点, 所以效率不需要很高.
如果你需要高效率, 根据mysql手册, 使用 LOAD DATA INFILE, 性能更快. 不过可能需要传输文件, 可以根据上面的脚本改一改.
* 当从一个文本文件装载一个表时,使用LOAD DATA INFILE。这通常比使用很多INSERT语句快20倍。参见13.2.5节,“LOAD DATA INFILE语法”。
http://dev.mysql.com/doc/refman/5.1/zh/optimization.html7.2.16. INSERT语句的速度