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
。
注意最後用了一個長長的絕對路徑,是因爲如果直接用--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
來更改密碼。