MySQL 數據庫在 Windows 下修復 only_full_group_by 的錯誤


本機上新安裝了個MySQL數據庫,在插入數據的時候一直提示這個錯誤:

[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

這個錯誤的原因在於sql_mode的值,我們需要去掉only_full_group_by 

尋找配置文件

1、Windows下MySQL的配置文件是my.ini,一般會在安裝目錄的根目錄。

2、Linux下MySQL的配置文件是my.cnf,一般會放在/etc/my.cnf,/etc/mysql/my.cnf。如果找不到,可以用find命令查找。

3、Linux用rpm包安裝的MySQL是不會安裝/etc/my.cnf文件的。

至於為什么沒有這個文件而MySQL卻也能正常啟動和作用,有兩個說法:

第一種說法,my.cnf只是MySQL啟動時的一個參數文件,可以沒有它,這時MySQL會用內置的默認參數啟動;

第二種說法,MySQL在啟動時自動使用/usr/share/mysql目錄下的my-medium.cnf文件,這種說法僅限於rpm包安裝的MySQL。

解決方法:只需要復制一個/usr/share/mysql目錄下的.cnf文件到/etc目錄,並改名為my.cnf即可。

修改配置文件

我只是添加了一行配置sql_mode,值是通過查詢數據庫中的值去掉only_full_group_by。

SELECT @@sql_mode;

文件內容:

[mysqld]
# 設置3306端口
port=3306
# 設置mysql的安裝目錄
basedir=D:\Programmer\mysql\mysql-8.0.11-winx64
# 設置mysql數據庫的數據的存放目錄
datadir=D:\Programmer\mysql\mysql-8.0.11-winx64\data
# 允許最大連接數
max_connections=200
# 允許連接失敗的次數。這是為了防止有人從該主機試圖攻擊數據庫系統
max_connect_errors=10
# 服務端使用的字符集默認為UTF8
character-set-server=utf8
# 創建新表時將使用的默認存儲引擎
default-storage-engine=INNODB
# 默認使用“mysql_native_password”插件認證
default_authentication_plugin=mysql_native_password
[mysql]
# 設置mysql客戶端默認字符集
default-character-set=utf8
[client]
# 設置mysql客戶端連接服務端時默認使用的端口
port=3306
default-character-set=utf8
# 設置sql_mode,去掉了ONLY_FULL_GROUP_BY
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'

重啟數據庫

在手動修改了Mysql的配置文件之后,我們要重啟Mysql服務才能使之生效,這里提供幾種重啟方法:

1、windows下重新啟動mysql5的方法:
在安裝mysql時系統會添加服務,可以通過管理工具里面的 <服務> 一項來停止和啟動mysql。這樣修改的my.ini就會生效了。

2、也可以用命令行模式,在運行里輸入:
停止:

net stop mysql

(其中mysql為你安裝的mysql服務名稱)

啟動:

net start mysql

3、如果你沒安裝系統服務,也可在命令行模式定位到mysql下的bin目錄里,輸入:

關閉:

mysqladmin shutdown

啟動:

mysqladmin start

不過我在停止服務的時候遇到了問題,提示訪問被拒絕。

這是權限不足,必須使用管理員身份啟動命令行窗口。

在 C:\Windows\System32 目錄下找到了 cmd.exe 文件,右鍵“以管理員身份運行”,然后再執行停止的命令就OK了。

最后並沒有解決問題,可能是我的mysql8版本過高了,上面方法應該對mysql5有效吧。。。。。。。。。。有時間研究下為啥?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM