MySQL之使用过程中报错及处理记录(持续更新)
一、博文初衷
此博文初衷是记录自己在使用mysql过程中遇到的问题及处理方法进行记录,以便自己在以后遇到同样的问题的时候可以在此处快速找到答案。也供广大网友参考,系统能够提供点滴帮助。
二、报错及处理记录
1、执行视图迁移的时候报错:1449 The user specified as a definer (‘root’@’%’) does not exist
原因:新库里面没有视图定义者root@%这个账户
解决方法:创建改账户或者修改视图定义者
修改视图定义者可以参考修改视图定义者
https://blog.csdn.net/carefree2005/article/details/109812943
2、数据库错误日志告警page_cleaner: 1000ms intended loop took 4897ms
原因:innodb_buffer_pool_size缓存设置偏小,导致sql执行时间慢
解决方法:
调大 innodb_buffer_pool_size值的大小,5.7以上版本可以在线调整
>set global innodb_buffer_pool_size=8589934592;
还需要修改my.cnf文件
innodb_buffer_pool_size = 8G
3、mysqldump备份sql系统库时报错ERROR 3167 (HY000)
报错信息如下:
mysql> select * from information_schema.global_status limit 3;
ERROR 3167 (HY000): The ‘INFORMATION_SCHEMA.GLOBAL_STATUS’ feature is disabled; see the documentation for ‘show_compatibility_56’
原因:从mysql5.7.6开始information_schema.global_status已经开始被舍弃
解决方案:为了兼容性,此时需要打开 show_compatibility_56
>set global show_compatibility_56=on;
4、启动mysql报错“Bind on TCP/IP port: Address already in use”
原因:端口被占用,看err日志如下
#tail -f /database/umc/data/umc.err
141106 10:37:14 [ERROR] Can’t start server: Bind on TCP/IP port: Address already in use
141106 10:37:14 [ERROR] Do you already have another mysqld server running on port: 3306 ?
解决方案:找到占用3306端口进程并kill掉
#ps -ef |grep mysql
#netstat -tnpl |grep 3306
通过如上命令未发现mysql数据库进程
使用命令:netstat –apn |grep 3306
查看所有的进程和端口使用情况。发现下面的进程列表,其中最后一栏是PID/Program name
#netstat -apn | grep 3306
tcp 0 0 ::ffff:192.168.65.211:3306 ::ffff:192.168.65.211:3306 ESTABLISHED 18148/java
使用kill命令杀掉干掉有连接mysql数据库端口的进程服务,然后重启mysql,正常启动。
5、执行update sql语句时报错ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
原因:开发环境执行正常的sql语句在测试环境执行报错,测试环境数据库版本为5.6,开发数据库版本为5.7,innodb_large_prefix参数默认值不一样
解决方案:mysql版本为5.6,innodb_large_prefix参数值默认为OFF,测试环境mysql版本为5.7,innodb_large_prefix参数默认为ON。wx_list表ID字段设置为200字符,字符集为utf8mb4,单个字符长度4字节,200*4=800字节,超过了767字节。实际微信ID仅为36字符,将该字段调整为100字符即可。或者将innodb_large_prefix参数修改为on。
>set global innodb_large_prefix=1;
6、MYSQL导入导出CSV格式文件数据执行提示错误(ERROR 1290)
报错信息:The MySQL server is running with the --secure-file-priv option so it cannot execute this statement.
原因:在安装MySQL的时候限制了导入与导出的目录权限,解压安装默认为NULL,RPM安装默认值为/var/lib/mysql-files/
#SHOW VARIABLES LIKE “secure_file_priv”;
解决方案:修改secure_file_priv为空或者指定目录,然后设置导出文件路径为指定目录。
(1)NULL,表示禁止。
(2)如果value值有文件夹目录,则表示只允许该目录下文件(PS:子目录也不行)。
(3)如果为空,则表示不限制目录。
7、mysqldump时报错Error 2020: Got packet bigger than ‘max_allowed_packet’ bytes
原因:max_allowed_packet设置参数小于表格最大单行值
解决方案:使用myqldump备份时指定–max_allowed_packet值
mysql> show variables like ‘%max_allowed_packet%’;
±-------------------------±-----------+
| Variable_name | Value |
±-------------------------±-----------+
| max_allowed_packet | 1073741824 |
| slave_max_allowed_packet | 1073741824 |
±-------------------------±-----------+
2 rows in set (0.00 sec)
查询结果为max_allowed_packet值已设置为1G,需调整更大满足要求
#mysqldump -uroot -p --max_allowed_packet=2G -B dbname >dbname.sql
8、执行批量插入语句时报错ERROR 1436 (HY000)
报错信息:ERROR 1436 (HY000): Thread stack overrun: 103022 bytes used of a 231022 byte stack, and 128000 bytes needed. Use ‘mysqld --thread_stack=#’ to specify a bigger stack.
原因:Thread_stack:每个连接线程被创建时,MySQL给它分配的内存大小。thread_stack值默认为128K,小于需求。
解决方案:设置thread_stack=512K
9、在线调整参数thread_stack时报错
报错信息:ERROR 1238 (HY000): Variable ‘thread_stack’ is a read only variable
原因:thread_stack参数为只读,需要在配置文件中修改
解决方案:
#vim my.cnf修改数据库配置文件将并重启数据库
thread_stack = 2M
10、(待续)
本文地址:https://blog.csdn.net/carefree2005/article/details/111030156