为了数据安全,大多数服务器是不对外开放MySQL 3306端口的。 在拥有ssh登陆权限,和mysql账号密码的情况下,如何将服务器上的数据库备份到另外一台主机呢?
一般情况下是先在MySQL主机执行mysqldump将数据存成文件呢,然后scp到目标主机,然后再导入数据。相当麻烦。 下述方法无需另存文件,直接对拷,要求两边mysql版本一致。
#
##############################################
#
# 两主机同步数据
#
# --compress, -C 压缩传递
# --force, -f在导出过程中忽略出现的SQL错误。
# --column-statistics=0 mysql8提供的mysqldump 导低版本mysql数据
# --single-transaction 保证innodb的数据一致 不会锁住表避免影响线上业务
# -quick
#
##############################################
#
# $ ssh 跳板机(需做免密) \
# $ "/usr/bin/mysqldump -h 源MySQL主机地址 -u账号 -p密码 -P 3306 \
# $ -C -f --set-gtid-purged=off --column-statistics=0 \
# $ --single-transaction -quick \
# $ --databases 要导出的库名" | /usr/bin/mysql -h 目标MySQL主机地址 -u账号 -p密码 -P 3306
#
如果数据量太大,将会长期占用数据库以及网络资源,此时推荐将数据文件压缩后传输:
#
##############################################
#
# 备份压缩后的数据
#
##############################################
#
# $ "/usr/bin/mysqldump -h 源MySQL主机地址 -u账号 -p密码 -P 3306 \
# $ -C -f --set-gtid-purged=off --column-statistics=0 \
# $ --single-transaction -quick \
# $ --databases 要导出的库名" | gzip > 文件名.sql.gz
#
###############################################
# 传输
###############################################
#
# $ scp 服务器:/路径/文件名.sql.gz ./
#
###############################################
# 恢复
###############################################
#
# $ gunzip < 文件名.sql.gz | mysql -uroot -proot 库名
#
做免密参考:http://smallcode.cn/post/1
注意:本文归作者所有,未经作者允许,不得转载