今天fahao改版上线,发现数据库中插入字段报错:
Data too long for column ‘number’ at row 1
尝试着插入2条成功,但是插入500条的时候就会报这个错误,查询了大量资料,都说是要修改字符编码为utf8或者将sql-mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION注释掉可以解决,my.cnf修改成utf8字符编码操作如下:
[mysqld]
character_set_server=utf8
collation-server=utf8_general_ci
……
[client]
#设置客户端字符集
default-character-set=utf8
修改完成后测试仍然报错,查看字符编码命令:
mysql> show variables like ‘%char%’;
+————————–+———————————-+
| Variable_name | Value |
+————————–+———————————-+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/charsets/ |
+————————–+———————————-+
8 rows in set (0.00 sec)
如果找不到my.cnf可以通过
mysql –help | grep my.cnf
去寻找my.cnf文件。
最后修改my.cnf中的max_allowed_packet = 16M 这个参数解决,默认值是1M,关于这个参数的具体意思是:
mysql根据配置文件会限制server接受的数据包大小。
有时候大的插入和更新会被max_allowed_packet 参数限制掉,导致失败。
我插入的数据大于了1M,所以导致插入失败,出现了上述的报错。
查看目前配置
mysql> show VARIABLES like ‘%max_allowed_packet%’;
+————————–+————+
| Variable_name | Value |
+————————–+————+
| max_allowed_packet | 16777216 |
| slave_max_allowed_packet | 1073741824 |
+————————–+————+
2 rows in set (0.00 sec)
2015.06.17 程序更新数据库中的字段,导致mysql卡死,服务器负载过高,解决方法,最后将修改的表重新回滚到最近的一个备份点,其中遇到了一些问题,如下:
重启mysql发现下面报错:
出现上面的问题,查了相关资料,说是端口被占用,但是 ps -ef |grep mysql 和 netstat -luntp |grep 3306没有发现有程序运行在3306端口上,然后有人说是权限问题,查看了文件都是mysql的用户和组,配置文件中也没有bind 127.0.0.1 3306的配置,最后更换成3307端口,发现重启mysql成功,研究了下,最后使用netstat -an |grep 3306 发现有个php-fpm的进程占用了3306端口,可能是php-fpm正在往mysql传数据,结果重启mysql,导致php-fpm卡死在127.0.0.1:3306端口上,kill对应进程后,重启mysql恢复
在回滚导入备份数据的时候发现如下报错:
查询资料说是需要在对应的库中执行:
flush tables;
执行完后发现导入仍然报错,最后的解决办法是:
1.关闭mysql服务
2.找到对应的数据库文件,打开你对应的数据库名的文件夹,查看要导入的表的文件,还有损坏的文件,一并删除
3.数据库中的文件名,应该是和你的表名一一对应的,一个表,两个文件,一个数据文件,一个是日志文件,除了这个还有一个“db.opt”文件不要删除。其他的乱码的文件,和原来你出错的文件全部删除。
4.完了以后重新启动mysql服务,重新导入要回滚的表即可
版权属于:
运维之道
转载时必须以链接形式注明原始出处及本声明。