[trouble] Error_code: 2003 与 iptables的各参数

160206 16:13:22 [ERROR] Slave I/O: error connecting to master 'repl@192.168.1.107:3306' - retry-time: 60  retries: 86400, Error_code: 2003

 

仅查询error code并没有太多的信息

 

不能顺利连接一般有三个原因

1.连接的账户名字和来源有问题

2.授权有问题

3.防火墙有问题

 

因为重启之前已经正常连接过的,重启之后显示连接失败,所以更多考虑是防火墙的问题,可以用两个命令去测试是否能穿过防火墙

答案是失败的,所以采取的措施是在防火墙上穿一个洞——添加规则

iptables -I INPUT -s 0/0 -p tcp --dport 3306 -j ACCEPT

直接添加这个规则就可以了,其实以前也添加过,但如果让我默写出来我是做不到的,因为这些-I -s我不知道什么意思,这是在linux command里面写简写的一个弊端——你完全不知道它的意义是什么,所以以后宁可多敲几个字母,也要把全称写上去

 

-I的意思是 --insert,想要在iptable这个表添加一条规则,其实iptable类比某某法律,防火墙的iptables好比一个国家的出入境法律,现在要添加一条法律所以是--insert,当然也是可以替换一条法律,--replace, 或者删除一条法律 --delete,在这里尾随的参数是INPUT,也就是把这条规则,插入到INPUT的那一条链里面

 

-s 的意思是 --source , 表示需要通过你的防火墙的来源是什么,这个位置需要写ip地址,好像hostname也是可以的,不过最终都要被翻译成ip地址,0/0的是0.0.0.0/0的简写,意思是所有的ip地址都可以成为防火墙的来源,在这里我们希望master只被slave的机子访问的话,就写成 --source 192.168.1.108

 

-p的意思是 --protocol, 这里和MySQL的使用ip的连接方式是一致的

 

--dport 的意思是 destination port,外部的packet需要访问哪个具体的端口,这里当然是写3306了,一般软件和端口和对应的,比如tomcat对应8080,mysql对应3306

 

-j 的全称是 --jump,这里有点形象生动,你是什么样的人就把你扔到哪个地方,你是贵宾,就把你扔到VIP休息室,你是混蛋,就把你扔到垃圾桶,有点像做一个分流的处理,防火墙对于进来的packet,有些是允许的,那就是ACCEPT,有些是拒绝的,那就是REJECT,有些是直接扔掉的,那就是DROP

 

所以详细的写法是

iptables --insert INPUT --protocol=tcp --source=192.168.1.108 --dport=3306 --jump=ACCEPT

 

对于iptables的解释,unbuntu的document很不错:https://help.ubuntu.com/community/IptablesHowTo

 

《重启后规则不见了》================================

 

想要查看存在于iptables里面的所有规则,看INPUT这个政策

添加完以后拥有了新的规则

接着slave可以成功穿过master的防火墙了

接着MySQL也能够顺利的做replication了,现在试着把master机器重启一下,原先加入的rule就消失不见了

这是因为在添加完新的规则之后,没有使用保存,保存功能需要另外下载的

 

这里要注意的是,首先要把所有的iptables规则保存到一个文本上面去,再做以下操作

地址:http://stackoverflow.com/questions/24756240/how-can-i-use-iptables-on-centos-7

posted @ 2016-02-06 17:00  lawrence.li  阅读(842)  评论(0编辑  收藏  举报