mysql的ERROR 1231 (42000)問題原因及解決方法

漠效發表於2019-05-15

報錯如下:


在這裡插入圖片描述

ERROR 1231 (42000): Variable ‘time_zone’ can’t be set to the value of ‘NULL’
常見於使用source執行sql檔案

MySQL server has gone away
常見於外部匯入sql檔案,如看到該報錯應先檢視sql檔案大小是否超過max_allowed_packet,如不超過,則再排查其他原因




報錯原因



常見於mysql資料庫中執行source匯入太大的sql檔案的情況,原因是由於執行的sql檔案過大,超過max_allowed_packet的值導致失敗。

如果是使用備份進行資料庫回滾或修復出現此問題,建議主庫備份時就分庫備份或使用xtrabackup備份,也可從mysqldump備份出的大sql檔案中,篩出單個庫或者單個表進行恢復(方法如下:)
https://blog.csdn.net/GX_1_11_real/article/details/85263863




解決方法


修改max_allowed_packet的值

如不設定此引數,通常預設為4M

max_allowed_packet 最大值是1G(1073741824) 設定超過1G,最終結果也只有1G


方法一:臨時修改



<1>檢視當前max_allowed_packet的值

   show variables like 'max_allowed_packet';

在這裡插入圖片描述

select @@max_allowed_packet;

在這裡插入圖片描述



<2>資料庫中臨時修改(重啟資料庫後失效)

下列演示的是20M的設定,可根據需求設定,要大於執行的sql檔案大小

不直接使用set global max_allowed_packet=20M的原因是:命令列進行修改時,通常要算成位元組數設定

set global max_allowed_packet = 20 * 1024 * 1024;

or 

set global max_allowed_packet = 2 * 1024 * 1024 * 10;


exit退出資料庫,再重新進入,即可生效



方法二:持久化修改



<1>修改該資料庫配置檔案

通常是/etc/my.cnf,根據實際情況修改配置檔案

下列演示的是20M的設定,可根據需求設定

vim /etc/my.cnf

[mysqld]
max_allowed_packet = 1024M

或者

max_allowed_packet = 1G


<2>重啟資料庫

根據安裝方法不同,重啟方法不同,通常為下列命令

service mysql restart
systemctl restart mysql


<3>進入資料庫後,檢視是否生效

show variables like 'max_allowed_packet';

在這裡插入圖片描述

相關文章