MySQL 目前的最新版本是 5.7.11,在 Linux 下提供特定發行版安裝包(如 .rpm)以及二進位通用版安裝包(.tar.gz)。一般情況下,很多項目都傾向於採用二進位通用安裝包形式來進行安裝配置,自訂非常方便。但在安裝過程中發現,其實官方提供的安裝說明檔案太過簡單,而且裡面的參數還有問題,依照執行後,mysql 服務啟動報錯,尋找了一些資料並反覆實驗後,自己總結出一套切實可行的安裝配置流程,具體如下:
1、下載 MySQL for Linux Generic 二進位版本安裝包(.tar.gz),這裡以 5.7.11 版本為例。
2、我一般習慣於將 MySQL 安裝到 /opt 目錄下,所以我將 MySQL 安裝包檔案複製到 /opt 目錄下,切換為 root 帳號後執行以下命令:
# tar -zxvf mysql-5.7.11-linux-glibc2.5-x86_64.tar.gz# ln -s mysql-5.7.11-linux-glibc2.5-x86_64 mysql # cd mysql
建立一個 mysql 的軟串連,是為了以後方便配置與操作。
3、5.7.11 版本的通用二進位安裝包經解壓後得到的 MySQL 目錄,內部並未包含資料檔案存放的目錄,所以需要單獨再建立一個子目錄用於存放資料檔案,比如取名為 data,在第二步命令後(確保在 /opt/mysql 目錄下),繼續執行如下命令:
# groupadd mysql# useradd -r -g mysql -s /bin/false mysql# mkdir data# chown -R root:root .# bin/mysqld --initialize --user=mysql --basedir=/opt/mysql --datadir=/opt/mysql/data# bin/mysql_ssl_rsa_setup --datadir=/opt/mysql/data
這裡特別說明一下,根據官方文檔說法,從 5.7.6 版本開始,MySQL 初始化使用 mysqld --initialize 命令,不再使用 mysql_install_db 命令了。但是官方文檔給出的 mysqld --initialize 命令並沒有給出 --basedir 以及 --datadir 參數,因為它預設使用 /etc/my.cnf 設定檔。有些 Linux 發行版在安裝過程中可能會預設產生這個 mysql 設定檔並儲存在 /etc 目錄下,而預設設定檔中的 basedir、datadir 是被注釋的,沒有實際內容,這樣 mysqld 實際上還是不知道當前的 basedir、datadir 具體是哪個目錄。所以這裡就通過命令列參數指定我們的自訂目錄。包括 mysql_ssl_rsa_setup 命令也要指定 datadir 目錄,因為資料庫需要的密鑰檔案也都和資料檔案儲存在一起,都位於 datadir 目錄內。
4、上述工作完成後,先不慌啟動資料庫服務,這時還要建立 MySQL 服務的設定檔 my.cnf。這個檔案可以從 /opt/mysql/support-files 子目錄下找到一個叫 my-default.cnf 的配置範例檔案,然後複製一個出來,改名為 my.cnf 並放到 /opt/mysql 下即可。根據 MySQL 的規則,它的設定檔必須以 my.cnf 命名,讀取的順序是先嘗試讀取 /etc/my.cnf,如果不存在則再讀取 basedir 目錄下的 my.cnf,如果系統內容變數沒有 basedir,則嘗試讀取服務啟動所在目前的目錄下的 my.cnf,這裡就是 /opt/mysql/my.cnf 這種情況,如果還是不存在,則讀取目前使用者家目錄下的 .mysql/my.cnf(需要看官方文檔確認一下,記不清了)。所以,我們這裡只需保證在 /opt/mysql 下有一個 my.cnf,修改其中的內容為如下:
basedir = /opt/mysqldatadir = /opt/mysql/datalog-error = /var/log/mysql-error.log
其餘的不變。根據官方文檔,log-error 用來指定服務啟動後的運行資訊記錄檔路徑,運行資訊包括 Notice、Error 等類型的日誌。
5、設定檔修改儲存好後,就可以啟動服務了,確保目前的目錄為 /opt/mysql,然後運行以下命令:
# bin/msyqld_safe --user=mysql &
這時服務就可以正常啟動了。你還可以通過命令 netstat -na -t 查看 MySQL 服務的連接埠 3306 是否已經處在監聽狀態,如果是,則表示服務啟動正常。當然,你也可以查看記錄檔的內容來確定,我們這裡因為在已在設定檔中指定記錄檔為 /var/log/mysql-error.log,所以查看該檔案即可。
6、在本機登入 MySQL 服務,從 5.7.10 版本開始不允許 root 空密碼登入了。其實在執行 mysqld --initialize 後系統就會為 root 產生一個初始化密碼,並在螢幕標準輸出時顯示出來,這個要記住!用這個密碼第一次登入後,才能再修改密碼,這裡假定系統產生的初始化密碼為 xxxxxx,命令如下:
# bin/mysql --user=root --password=xxxxxx
這樣就可以登入 MySQL 伺服器了。
7、登入以後,系統要求必須修改 root 帳號的密碼,MySQL 命令如下:
mysql> set password=password('1234');
這樣就可以把 root 帳號改為 1234 了。
8、在 Linux 下為了安全,預設是不允許 MySQL 伺服器本機以外的機器訪問 MySQL 資料庫服務的,因此需要重新授權 root 帳號。方便其他機器遠端存取 MySQL 伺服器,MySQL 命令如下:
mysql> grant all privileges on *.* to root@'%' identified by '1234';mysql> flush privileges;
這樣就可以允許從其他機器用 root 帳號遠程登入 MySQL 伺服器了,可以用下面的 MySQL 命令來驗證一下:
mysql> use mysql;mysql> select host,user from user;+-----------+-----------+| host | user |+-----------+-----------+| % | root || localhost | mysql.sys || localhost | root |+-----------+-----------+3 rows in set (0.00 sec)
證明系統資料表 user 中已經增加了一條關於 root 遠程登入的記錄。
9、補充一下如何停止 mysql 服務的命令:
# mysqladmin --user=root --password shutdown
這裡 root 是 mysql 資料庫的 root,並不是作業系統的帳號,這點不要搞混了,該命令會提示輸入 mysql root 的密碼,正確的話就會停止 mysql 服務了。