Coup de Grace

关于mysql备份选型与端口转发

最近同事接到了一个mysql备份的需求,而我们目前使用的云平台并未暴露mysql控制台,只有accessed host之类.

备选选型

搜了一下关于mysql backup without mysqldump.
找到了下面这张表:

备份方法 存储引擎 影响 备份速度 恢复速度 恢复粒度
mysqldump all warm medium slowest most flexable
mysqldump innodb hot medium slowest most flexable
select into outfile all warm slow slow most flexable
mk-parallel-dump all warm medium medium flexable
ibbackup innodb hot fast fast flexable
ibbackup all warm fast fast flexable
backup command in mysqld all hot fast fast flexable
file system(copy files) all cold fastest fastest not flexable
snapshot(with LVM ZFS) all almost hot fast fast least flexable
mysqlhotcopy MyISAM mostly cold fast fast flexable

后续的选型会继续分享出来.

上回书说到远程db备份,查了又查. 根据引擎来选型的话:

端口转发

本次备份我们使用mysqldump的远程功能,因为云平台提供的中间件并不能在本地直连,并且没有控制台供使用.

所以在云平台互通环境内购买一台跳板机用来连接db中间件,做端口转发,脚本保存为nat-iptables.sh:

#!/bin/sh
rds_ip="[中间件ip]"
local_ip=`/sbin/ifconfig|grep "inet addr"|grep ":10."|awk '{print $2}'|awk -F ':' '{print $2}'`
rds_port="3306"
echo "iptables -t nat -A PREROUTING -p tcp --dport $rds_port -j DNAT --to-destination $rds_ip"
/sbin/iptables -t nat -A PREROUTING -p tcp --dport $rds_port -j DNAT --to-destination $rds_ip
echo "iptables -t nat -A POSTROUTING -p tcp -d $rds_ip -j SNAT --to-source $local_ip"
/sbin/iptables -t nat -A POSTROUTING -p tcp -d $rds_ip -j SNAT --to-source $local_ip
service iptables save
service iptables restart
chkconfig --add iptables
chkconfig --level 2356 iptables on 

按顺序执行:

vim /etc/sysctl.conf
修改
net.ipv4.ip_forward = 1

sysctl -p
sh nat-iptables.sh

这样在本地连接跳板机的3306就可以进行db连接.

结构数据导出

而后使用mysqldump的远程备份功能

mysqldump -u[用户名] -p[密码] -h [跳板机ip] [库名] [表名1] [表名2] [表名3] -w [where表达式] > /Users/Slahser/Desktop/tt.sql

结构数据导入

网页控制台sql上传

后续待优化的点: