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/mysql datadir = /opt/mysql/data log-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 服務了。