Mysql安裝過程問題總結及處理方法

cometwo123發表於2014-12-27

首次安裝、執行MySQL時,可能會遇到一些錯誤,使MySQL伺服器不能啟動。本文件的目的是幫助診斷並糾正這些錯誤。

首先在安裝mysql時,請關閉防火牆以及防毒軟體,因為防火牆和部分防毒軟體會導致mysql安裝、配置失敗,從而無法啟動mysql服務。

解決伺服器問題時的第一資料是錯誤日誌。MySQL伺服器使用錯誤日誌來記錄伺服器不能啟動的資訊。錯誤日誌位於my.ini檔案指定的資料目錄中。預設資料目錄位於C:Program FilesMySQLMySQL Server 5.1dat。

另一個錯誤相關資訊源是MySQL服務啟動時控制檯上顯示的訊息。將mysqld安裝為服務後,從命令列通過NET START mysql命令來檢視MySQL服務啟動相關的錯誤訊息。

下面說明首次安裝並啟動MySQL服務時會遇到的最常見的錯誤訊息:

1. System error 1067 has occurred.

Fatal error: Can`t open privilege tables: Table `mysql.host` doesn`t exist

當MySQL伺服器找不到MySQL許可權資料庫或關鍵檔案時會出現這些訊息。當MySQL基或資料目錄沒有安裝在預設位置(C:mysql和 C:Program FilesMySQLMySQL Server 5.1data),而是安裝到其它位置時通常會遇到該問題。

發生該問題的一種情況是對MySQL進行升級或安裝到了新位置,但是沒有對配置檔案進行更新以對應新的安裝位置。此外還可能是新舊配置檔案衝突,當升級MySQL時,一定要刪除或重新命名舊的配置檔案。

如果你沒有將MySQL安裝到C:Program FilesMySQLMySQL Server 5.1目錄下,而是安裝到了其它目錄下,你需要通過使用配置(my.ini)檔案讓MySQL伺服器知道安裝目錄。my.ini檔案應位於Windows目錄下,典型為C:WINNT或C:WINDOWS。可以在命令提示符下輸入下面的命令從WINDIR環境變數值中確定確切位置:

C:> echo %WINDIR%

可以通過文字編輯器(例如記事本)來建立並修改選項檔案。例如,如果MySQL安裝在E:mysql下,資料目錄在D:MySQLdata,你可以建立選項檔案並設定[mysqld]來指定basedir和datadir引數的值:

[mysqld]

# set basedir to your installation path

basedir=E:/mysql

# set datadir to the location of your data directory

datadir=D:/MySQLdata

請注意應使用(正)斜線而不是反斜線在選項檔案中指定Windows路徑名。如果使用反斜線,則必須使用雙斜線:

[mysqld]

# set basedir to your installation path

basedir=C:\Program Files\MySQL\MySQL Server 5.1

# set datadir to the location of your data directory

datadir=D:\MySQLdata

如果在MySQL配置檔案中更改datadir值,在重新啟動MySQL伺服器之前,必須移動已有MySQL資料目錄中的內容。

 

2. 安裝mysql時可能產生cannot create windows service for mysql.error:0

錯誤,錯誤的原因多數由於重新安裝mysql或者對mydql升級,使用MySQL Configuration Wizard而產生. 

可以使用mysql以外的服務名,比如mysql11,等.但這不是最好的解決方法,我們可以使用windows的sc程式刪除mysql服務. 

C:>sc delete mysql 

[SC] DeleteService SUCCESS 

再重新使用MySQL Configuration Wizard,就不會有此錯誤了.

還有可能這步過了.可是無法啟動.

一般我們在解除安裝前個mysql服務後記得伺服器要重啟下.

然後再安裝.一般就不會出現這樣的錯誤了l

原來只要在HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices中刪除對應服務即可…

 

3. 在Windows中,一個root賬戶用來從本機連線MySQL伺服器,另一個允許從任何主機連線。

可以用幾種方法為root賬戶指定密碼。以下介紹了三種方法:

·使用SET PASSWORD語句

·使用mysqladmin命令列客戶端程式

·使用UPDATE語句

要想使用SET PASSWORD指定密碼,用root連線伺服器並執行兩個SET PASSWORD語句。一定要使用PASSWORD()函式來加密密碼。

在Windows中的語句:

shell> mysql -u root

mysql> SET PASSWORD FOR `root`@`localhost` = PASSWORD(`newpwd`);

mysql> SET PASSWORD FOR `root`@`%` = PASSWORD(`newpwd`);

在Unix中的語句:

shell> mysql -u root

mysql> SET PASSWORD FOR `root`@`localhost` = PASSWORD(`newpwd`);

mysql> SET PASSWORD FOR `root`@`host_name` = PASSWORD(`newpwd`);

用伺服器主機名替換第二個SET PASSWORD語句中的host_name。這是指定匿名賬戶密碼的主機名。

要想使用mysqladmin為root賬戶指定密碼,執行下面的命令:

  shell> mysqladmin -u root password “newpwd”

  shell> mysqladmin -u root -h host_name password “newpwd”

上述命令適用於Windows和Unix。用伺服器主機名替換第二個命令中的host_name。不一定需要將密碼用雙引號引起來,但是如果密碼中包含空格或專用於命令解釋的其它字元,則需要用雙引號引起來。

還可以使用UPDATE直接修改user表。下面的UPDATE語句可以同時為兩個root賬戶指定密碼:

shell> mysql -u root

mysql> UPDATE mysql.user SET Password = PASSWORD(`newpwd`) WHERE User = `root`;

mysql> FLUSH PRIVILEGES;

ERROR 1045 (28000): Access denied for user `root`@`localhost` 

第一步:開啟開始裡Mysql的MySQL Command Line Client 輸入密碼[就是安裝時設的那個] 

第二步:在mysql>後輸入:UPDATE mysql.user SET Password = OLD_PASSWORD(`密碼`) WHERE Host = `localhost` AND User = `使用者名稱`; 

回車後提示:Query OK, 0 rows affected (0.16 sec)

 Rows matched: 0 Changed: 0 Warnings:

第三步:在mysql>後輸入:FLUSH PRIVILEGES;

回車後提示:Query OK, 0 rows affected (0.19 sec) 

 

4. ERROR 1130:不能遠端連線mysql伺服器,但是可以本地連線:

遠端連結mysql伺服器的時候發生的這個錯誤:ERROR 1130:…….

User表中存在兩行,其中localhost是允許本機登陸Mysql伺服器的,host是允許遠端客戶端連線該伺服器若host為“%”則表示任何遠端均可登陸該mysql伺服器,若host為具體IP則只允許相應的IP的PC登陸該伺服器;

更改 mysql 資料庫裡的 user表裡的 host項localhost改稱%

mysql -u root –proot

mysql>use mysql;

mysql>update user set host = `%` where user =`root`;

mysql>flush privileges;

mysql>select `host`,`user` from user where user=`root`;

現在就可以連線了

 

安裝完MySQL後,連線資料庫的時候,出現 ERROR 1130 (HY000): Host `192.168.0.1` is not allowed to connect to this MySQL server提示資訊,不能遠端連線資料庫。考慮可能是因為系統資料庫mysql中user表中的host是localhost的原因,於是,我嘗試把這個值改為自己伺服器的ip,果然就好用了,不過用 mysql -u root -p命令就連不上資料庫了,需要用mysql -h 伺服器ip -u root -p因為預設的連線mysql資料庫user表中host的值,而這個命令的預設host是localhost,就連不上了,

具體操作方法:

用localhost連線上mysql後,
use mysql;
update user set host=`123.145.214.188`;
q;

退出mysql,然後重新啟動mysql就可以了。

其他解決方案

2. 改表法。可能是你的帳號不允許從遠端登陸,只能在localhost。這個時候只要在localhost的那臺電腦,登入mysql後,更改 “mysql” 資料庫裡的 “user” 表裡的 “host” 項,從”localhost”改稱”%”,與之前講解的修改方法一致;
mysql -u root –proot
mysql>use mysql;
mysql>update user set host = `%` where user = `root`;
mysql>select host, user from user;
3. 授權法。例如,想myuser使用mypassword從任何主機連線到mysql伺服器的話。
GRANT ALL PRIVILEGES ON *.* TO `myuser`@`%` IDENTIFIED BY `mypassword` WITH GRANT OPTION;
如果想允許使用者myuser從ip為192.168.1.3的主機連線到mysql伺服器,並使用mypassword作為密碼
GRANT ALL PRIVILEGES ON *.* TO `myuser`@`192.168.0.1` IDENTIFIED BY `mypassword` WITH GRANT OPTION;

備註:若出現1130錯誤時提示“localhost”不能登陸mysql伺服器

時,此時只能將Mysql解除安裝,並刪除相應的配置檔案重新安裝,否則無法解決;

 

5. 不能啟動mysql服務,錯誤顯示為無法啟動mysql服務:

剛開始的解決辦法是刪除my.ini配置檔案,然後重新配置mysql,但是在配置的過程中仍然會出現無法重新啟動mysql服務的問題;

最後解決的辦法是:解除安裝mysql程式,並且將安裝路徑下的mysql所有資料夾全部刪除,然後再重新安裝並且配置,則無問題。

 


相關文章