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

 

以安全模式启动MySQL
# mysqld_safe –skip-grant-tables &
在另一个终端登录mysql
# mysql -uroot -p
回车后提示输入密码,不需要输入密码,直接回车就可以进入mysql

3、查看下有几个实例
mysql> show databases;
使用mysql实例
mysql> use mysql;
查看有多少表
mysql> show tables;
查看user表有没有数据
mysql> select * from user;

4、向user表插入root用户
INSERT   INTO   user   (Host,User,Password)   VALUES( 'localhost', 'root',password( '123456'));

5、更新root用户权限
mysql> update user set
Host='localhost',select_priv='y', insert_priv='y',update_priv='y',Alter_priv='y',delete_priv='y',create_priv='y',drop_priv='y',reload_priv='y',shutdown_priv='y',Process_priv='y',file_priv='y',grant_priv='y',References_priv='y',index_priv='y',create_user_priv='y',show_db_priv='y',super_priv='y',create_tmp_table_priv='y',Lock_tables_priv='y',execute_priv='y',repl_slave_priv='y',repl_client_priv='y',create_view_priv='y',show_view_priv='y',create_routine_priv='y',alter_routine_priv='y',create_user_priv='y' where user='root';commit;

6、停止mysql服务
# service mysql stop

7、将sql_mode修改回原来的值
# vi /usr/local/mysql/my.cnf
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

8、启动mysql服务
# service mysql start
因这个是正常的启动mysql了,这时候验证一下root用户登录是否正常了,也就是正常的登录mysql
# mysql -uroot -p
回车后输入密码,如果不相信是否还需要输入密码,可以先直接回车试验一下;
正常情况下登录进mysql了,再查看一下mysql下的user表是否有数据了。

posted @ 2020-11-17 16:08  登风360  阅读(1022)  评论(0)    收藏  举报