MySQL使用Amoeba主从分离的一点点经验

      项目开发完毕,移植到服务器的主从分离环境中时,出现了点问题。


问题一: 端口被占用  (与Tomcat的监听端口冲突)

解决方案:修改端口号。修改Tomcat的冲突端口号。

      

问题二: 无法正常连接数据库 : ERROR 1129 (HY000): Host 'xxx.xxx.xxx.xxx' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' 

解决过程:

1. 按照提示 flush-host ,但是隔一会又无法正常连接数据库。

2. 查看mysql的当前连接 show processlist 发现只有几个连接,而最大连接上百个,所以,不是正常连接造成的。

3. 运行命令 natstat -antl 查看端口占用情况,发现很多连接处在TIME_WAIT状态,并且某些IP地址是同一网段的其他主机(这个同一网段的其他主机其实不是其他主机),

    怀疑是端口拒绝服务攻击,所以,折腾了几天,修改iptables也没有效果。

    后来有同事通过和  lsof -i:3306 的结果对比,发现IPv6的情况下netstat 的结果中IP地址会出现截断显示的情况。

4. 由于是大量TIME_WAIT连接产生的情况,参照了网上的通用解决办法:

    通过调整内核参数解决   

    一、 打开文件 vi /etc/sysctl.conf

    二、 编辑文件,加入以下内容:
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_fin_timeout = 30

5. 调整的Amoeba的最大激活连接数、最大空闲连接数 等参数,减少Amoeba产生的连接。通过上述的表现状况来看,有可能Amoeba在断开数据连接的方式是强行断开,

    造成操作系统底层产生TIME_WAIT状态的连接,长时间等待数据,实际上那些连接中有些已经单方断开了。


问题三: 数据库汉字的乱码问题

    我这里打算统一采用UTF-8编码,当然,一般没有韩文、蒙文等除了汉字英文字符的项目统一选用GBK编码还是最佳的选择,我们项目可能会有韩国歌曲名称要存储。

    在配置项目的jdbc连接时,加上编码参数  例如:jdbc:mysql://localhost:3306/test?characterEncoding=utf8

    在数据库my.cnf文件中添加 default-character-set=utf8 来设置编码。设置完成后,发现MySQL无法正常启动了。

    控制台出现 Starting MySQL... ERROR! The server quit without updating PID file (/home/data/mysql/localhost.pid). 这个字样的提示,其实并不是由于还有其他进程锁定了文件。通过查看 localhost.localdomain.err 文件,发现没有识别 default-character-set=utf8 这个配置参数,导致数据库系统无法正常启动。

   我们知道my.cnf里面有好几个section节,用中括号括起来表明一个小节的名称。

   无法识别是因为[mysqld]这里没有这个参数,要配就配在[client]和[mysql](后面没有d这个字符)这两个节里面。

   当然,改过编码以后,数据库原有的汉字信息就全是乱码了,这个目前没有什么好的手段。只能在更改编码前全库导出,改编码后,再导入。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值