mysql常见报错及解决
一、MySQL常见报错及解决
<1>MySQL连接报错 1130
用户客户端连接非本地的mysql服务时报错,错误提示 ERROR 1130: Host xxx.xxx.xxx.xxx is not allowed to connect to this MySQL server
解决方案:
1. 在服务器中登录mysql(安装目录下,bin下)
./mysql -u root -p
2. 进入mysql数据库
mysql> use mysql;
3. 查看user 表host 字段(可选)
mysql> select host,user from user;
4. 修改host值(以“%”通配符,增加在主机/ip地址),当然也可以增加一条数据
mysql> update user set host='%' where user='root';
5. 刷新mysql系统权限相关表
mysql> flush privileges;
6.重启mysql服务(确保修改生效)
或者直接使用下列方式、
在服务端找到mysql数据库,找到user表

对需要连接的用户Host字段内容改为 % ,然后flush privileges 即可生效

但这样连接可能出现数据库显示不全的问题,原因是权限不足
解决方案:将刚才创建的用户删除,重新创建,然后授权权限
创建用户:create user 'haha'@'%' identified by 'password';
授权:grant all privileges on *.* to 'haha'@'%' identified by 'password' with grant option;
刷新:flush privileges;
<2>报错超过最大连接数
执行以下sql,
update user set max_questions=0;
flush privileges;
<3>数据库明明有表,但报表不存在
找到数据库安装文件,my.ini或my,cnf,在【mysqld】下面增加一行
lower_case_table_names=1(0:大小写敏感;1:大小写不敏感)
<4>导入sql文件中含有datetime数据类型报错解决
解决:将datetime(100) 改为datetime
<5>导入sql数据库脚本报:Specified key was too long; max key length is 767 bytes
解决:改变varchar的字符数,我改成了64就可以了。varchar(64)
<6>出现锁表
com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException
解决:执行一下sql
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
然后找到进程号,即 trx_mysql_thread_id
KILL 40631;
KILL 40576;
<7>mysql 1126报错 User 'root' has exceeded the 'max_questions' resource (current value: 1001)
报错原因为root用户一次最多只能插入1000条数据,超过了这个限制则报错
解决方案:
创建一个用户:

然后登录root用户后授予这个新建用户所有权限(testDB为数据库名,test为用户名,1234是刚才创建的用户密码)
grant all privileges on testDB.* to test@localhost identified by '1234';
同时记得在javaWeb项目中替换相关db配置文件用户使用刚才创建的用户
<8>开机无法自动启动mysql解决办法
①:C:\WINDOWS\SYSTEM32\ntdll.dll文件存在
②:在注册表中找到:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
在此路径下新建一个名称为ServicesPipeTimeout的DWORD(32位)值
设置值为十进制的180000
重启电脑即可。
<9>Sql查询语句报错: Subquery returns more than 1 row
解决方案:在后面加 limit 1
如sql查字段:select *, (select USERNAME from sysuser WHERE sysid=b.operator_id limit 1)username from studen
<10>报拒绝连接;1045-Access denied for user 'root'@'localhost'解决方法
解决方案: https://www.cnblogs.com/chishaya/p/12953735.html
Linux操作系统:先把/etc/my.cnf 文件的skip-grant-tables代码打开后再登录mysql,
下一步输入命令
grant all privileges on *.* to 'root'@'localhost' identified by 'root' with grant option
flush privileges;
<11>重装系统后连mysql
①.从新添加mysql环境变量,即把mysql的bin路径添加到系统path后面
②.dos窗口进入mysql的bin路径下依次执行
. 输入mysqld install mysql 注册服务
.输入 net start mysql 启动mysql服务
参考原文:
https://blog.csdn.net/weixin_44572376/article/details/122675127
删除mysql服务
https://blog.51cto.com/u_16213354/9847528
<12>mysql下的user表为空
1、首先修改my.cnf文件里面的sql_mode值,因认5.6之后的默认值就是下面的两个
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
需要把STRICT_TRANS_TABLES去掉,即改为:
# vi /usr/local/mysql/my.cnf
sql_mode=NO_ENGINE_SUBSTITUTION
注:
简单来说STRICT_TRANS_TABLES这个是启用严格模式,进入安全模式后如果启用了严格模式向表插入数据插入不了的;
my.cnf的位置:/usr/local/mysql/my.cnf
2、停止mysql服务
# service mysql stop

浙公网安备 33010602011771号