一、添加MySQL Yum存儲庫
首先,將MySQL Yum存儲庫添加到系統的存儲庫列表中。這是一次性操作,可以通過安裝MySQL提供的RPM來執行。
MySQL Developer Zone中的下載MySQL Yum存儲庫頁面: https://dev.mysql.com/downloads/repo/yum/
注意
一旦在您的系統上啓用了MySQL Yum存儲庫,如果yum update 命令(或Fedora的dnf升級)找到更高的版本,都將升級系統上的MySQL軟件包並替換任何本機第三方軟件包。
官網最新的庫包含MySQL8.0,穩妥起見提供一個官方的舊版本repo地址,防止yum update把MySQL更新到最新。當然,最穩妥的辦法是安裝完畢後把庫文件刪除。
https://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm
shell> rpm -Uvh mysql57-community-release-el7-8.noarch.rpm
安裝命令將MySQL Yum存儲庫添加到系統的存儲庫列表中,並下載GnuPG密鑰以檢查軟件包的完整性。
shell> yum repolist enabled | grep "mysql.*-community.*"
二、確認選擇發佈系列
vi /etc/yum.repos.d/mysql-community.repo,找到要配置的子存儲庫的條目,然後編輯該enabled選項。
指定 enabled=0禁用子存儲庫,或 enabled=1啓用子存儲庫,確認mysql57爲開啓狀態,其餘爲關閉狀態。
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/6/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
您應該確保只啓用一個MySQL系列的存儲庫。當啓用多個版本系列的子存儲庫時,Yum將使用最新的系列。
shell> yum repolist enabled | grep mysql
三、安裝MySQL
通過以下命令安裝MySQ:
shell> sudo yum install mysql-community-server
這將安裝MySQL server(mysql-community-server)以及運行服務器所需組件的,包括client(mysql-community-client)
客戶端和服務器的常見錯誤消息和字符集(mysql-community-common)以及共享客戶端庫(mysql-community-libs)
最後建議把 mysql-community-lib-compat也裝上(替換mariadb-lib)。
yum 安裝的好處就是自動幫助處理缺少的依賴包和解決衝突包,例如安裝libaio和net-tools,刪除mariadb-lib……否則RPM安裝的時候還要手工處理這些問題,這裏就不展開了
四、初始化
1、編輯systemd和my.cnf
從MySQL 5.7.10開始,通過yum、RPM安裝時,已經把默認使用systemd替換掉了原來的mysqld_safe;
使用systemctl edit mysqld或者修改/etc/systemd/system/mysqld.service.d/override.conf來更改PIDFile和Execstart的路徑,從而實現自定義參數,/etc/systemd/system/mysqld.service.d若不存在請自行創建。
原有SQL的配置文件(這裏一般指/etc/my.cnf)任何關於PIDFile的設置將被忽略,部分mysql_safe的參數要進行修改,部分可以配置到[mysqld],這裏不做展開了
啓動參數(ExecStart)必須設置PIDFile的路徑,第一個“ExecStart=”這一行不能省去,刪掉的話將不能啓動;猜測邏輯是先用空參數覆蓋/usr/lib/systemd/system/mysqld.service 的啓動參數,再通過第二個含參數的ExecStart實現自定義參數啓動
最後,systemd配置方式和mysqld_safe是相互衝突的,因此自編譯的時候尤其注意(RPM、yum安裝的默默接受systemd這個事實吧……)
編寫override.conf
[Service]
PIDFile=/opt/mysql/mysqld.pid
ExecStart=
ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/opt/mysql/DB_Server01.pid $MYSQLD_OPTS
編寫/etc/my.cnf
[mysqld]
server-id = 1
port = 3306
event_scheduler = 1
character-set-server = utf8
collation-server = utf8_general_ci
default-storage-engine = INNODB
default-time-zone = '+08:00'
bind-address = 0.0.0.0
symbolic-links = 0
user = mysql
socket = /opt/mysql/mysqld.sock
datadir = /opt/mysql/data
tmpdir = /opt/mysql/tmp
skip-external-locking
max_connections = 1000
max_allowed_packet = 500M
key_buffer_size = 16M
thread_stack = 192K
thread_cache_size = 8
query_cache_limit = 1M
query_cache_size = 16M
#########log file setting##########
log_timestamps = SYSTEM
log_error = /opt/mysql/log/error.log
log-bin = /opt/mysql/log/DB_Server01-mysql-bin
binlog-format=Row
expire_logs_days = 10
max_binlog_size = 100M
slow-query-log-file = /opt/mysql/DB_Server01-slow.log
general-log-file = /opt/mysql/log/DB_Server01.log
[client]
default-character-set = utf8
socket = /opt/mysql/mysqld.sock
初始化的時候必須設置--defaults-file,否則不會自動讀取/etc/my.cnf(從5.6過來最常見的隕石巨坑)
mysqld --defaults-file=/etc/my.cnf --initialize
劃重點:my.cnf內標識了使用mysql用戶,因此my.cnf內所有提及到的目錄的所有者必須爲mysql,否則將不能成功啓動。
chown -Rh mysql.mysql /opt/mysql
五、啓動MySQL服務器
使用以下命令啓動MySQL服務器:
shell> sudo service mysqld start
您可以使用以下命令檢查MySQL服務器的狀態:
shell> sudo service mysqld status
在服務器初始啓動時,如果服務器的數據目錄爲空,則會發生以下情況:
服務器已初始化。
SSL證書和密鑰文件在數據目錄中生成。
validate_password 已安裝並已啓用。
將'root'@'localhost創建一個超級用戶帳戶。設置超級用戶的密碼並將其存儲在錯誤日誌文件中。要顯示它,請使用以下命令:
獲取root初始自動生成的臨時密碼:
shell> sudo grep 'temporary password' /var/log/mysqld.log | awk -F":" '{print $4}' (這是默認情況)
如果使用上文的my.cnf初始化,並且修改過log的路徑,則自行替換,如上面列出的my.cnf,log_error = /opt/mysql/log/error.log,那麼就對應修改爲:
shell> sudo grep 'temporary password' /opt/mysql/log/error.log | awk -F":" '{print $5}'
(由於my.cnf裏面增加了+08:00,修改後就是print $5,不要照搬)
通過使用生成的臨時密碼登錄併爲超級用戶帳戶設置自定義密碼,儘快更改root密碼:
shell> mysql -uroot -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';
題外話:沒事不要亂升級,有可能因爲一個小版本導致你在安裝的過程中懷疑人生,這是我折騰了3天的真實感受……