项目开发完毕,移植到服务器的主从分离环境中时,出现了点问题。
问题一: 端口被占用 (与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这个字符)这两个节里面。
当然,改过编码以后,数据库原有的汉字信息就全是乱码了,这个目前没有什么好的手段。只能在更改编码前全库导出,改编码后,再导入。