win10配置mysql

Win10配置MySql8.0

安裝完MySql Server8.0,按照網上的說法,首先配置一個 my.ini 文件,如下

[client]
port=3306
[mysqld]

basedir="C:\Program Files\MySQL\MySQL Server 8.0"
datadir="C:\Program Files\MySQL\MySQL Server 8.0\data"
skip-grant-tables
bind-address=127.0.0.1
port=3306

這個文件其實就像是運行 mysqld.exe 時的參數,比如 skip-grant-tables就對應運行時加入--skip-grant-tables,表示不檢查權限表,即任何人都可以登錄數據庫。後面兩項則表示這個服務會運行在”127.0.0.1:3306”地址,即本機的3306端口。

然後先初始化數據庫,採用的是 mysqld --initialize --user=mysql --console

根據官方文檔,這是初始化數據庫的”data”目錄,就是初始化一些內置的數據庫。否則無法啓動數據庫。當執行完這個語句後,會分配給root用戶一個默認的密碼。

--console 命令是爲了讓錯誤信息直接在命令行裏顯示。

--user 選項表示執行命令的“系統用戶”名稱,在這裏似乎填寫任意用戶名都可以。

然後需要安裝mysql服mysqld –install mysql –defaults-file=”C:\Program Files\MySQL\MySQL Server 8.0\bin\my.ini”務,採用的方法是

mysqld --install mysql --defaults-file="C:\Program Files\MySQL\MySQL Server 8.0\bin\my.ini"

根據文檔,--install後面跟的是服務名,可以任取,我們就讓他爲mysql

--install [*service_name*\]

注意最後用了一個長長的絕對路徑,是因爲如果直接用--defaults-file=my.ini很可能會找不到文件,除非加入了系統環境變量。

這時候使用net start mysql,就會顯示服務已經成功啓動。

Can’t connect to MySQL server on ‘localhost’

然而在命令行輸入mysql,卻發現出現了Can't connect to MySQL server on 'localhost' 報錯信息,但是查看任務管理器-服務,卻發現mysql服務明明在運行。這時候查看安裝目錄下的 data 文件夾,可以看到一個後綴名爲.err的文件。打開可以看到如下的報錯信息:

2018-09-13T02:07:54.423068Z 0 [ERROR][MY-010131] [Server] TCP/IP, –shared-memory, or –named-pipe should be configured on NT OS
2018-09-13T02:07:54.423571Z 0 [ERROR][MY-010119] [Server] Aborting
2018-09-13T02:07:54.606308Z 0 [Warning][MY-011311] [Server] Plugin mysqlx reported: ‘All I/O interfaces are disabled, X Protocol won’t be accessible’

於是懷疑mysql並沒有成功地設置好網絡,於是看命令行netstat -ano,發現的確3306端口沒有佔用。

懷疑是防火牆的問題,把防火牆關閉,或者新建規則,卻依然不能連接。在網上搜索了大量時間後,才發現是skip-grant-tables的問題。在官方文檔裏,有:

If the server is started with the --skip-grant-tables option to disable authentication checks, the server enables --skip-networking automatically to prevent remote connections.

好像是MySql8.0版本才加入了這個特性。

於是把skip-grant-tables 從my.ini去掉,或者加上shared-memory,可以解決這個問題。注意當skip-grant-tables去掉後,就必須記住生成的隨機密碼,然後要新建數據庫,就需要alter user來更改密碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章