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'解決方法
解決方案: http://www.rzrgm.cn/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號