---------- 20190110 MySQL-Install.TXT ---------- 20190110 ref: https://blog.xuite.net/tolarku/blog/542563206-CentOS7+安裝+MySQL+5.7++-+改用+yum+install+mysql-community-server+安裝 官方安裝程序: 這個比較正確 https://dev.mysql.com/doc/refman/8.0/en/linux-installation-yum-repo.html CentOS7 安裝 MySQL 5.7 - 改用 yum install mysql-community-server 安裝 不管是安裝 MySQL 或 LAMP 在 CentOS 的環境幾乎都是一步驟「sudo yum install -y mysql mysql-server」就搞定了,但今天發現偷懶以「這篇」的指令順序執行,卻發現怎麼 MySQL 無法啟動呢?一查發現 MySQL 根本沒安裝,當然無法啟動...。 發現以 yum install mysql-server 出現了「Error: No matching Packages to list」這是之前沒發生過的,怎麼會找不到呢?難道要額外裝 epel 嗎? 於是到了 https://dev.mysql.com/downloads/repo/yum/ 發現目前最新的版本為「mysql57-community-release-el7-11.noarch.rpm」 安裝套件庫 sudo rpm -Uvh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 發現還是無法以 yum install mysql-server 來安裝,要改用底下的方式來安裝 ,名稱為 mysql-community-server sudo yum install mysql-community-server 20190110 確認可安裝如下: yum install -y mysql mysql-server Dependencies Resolved ======================================================================================= Package Arch Version Repository Size ======================================================================================= Installing: mysql-community-server x86_64 5.7.24-1.el7 mysql57-community 165 M Installing for dependencies: mysql-community-client x86_64 5.7.24-1.el7 mysql57-community 24 M mysql-community-common x86_64 5.7.24-1.el7 mysql57-community 274 k mysql-community-libs x86_64 5.7.24-1.el7 mysql57-community 2.2 M Transaction Summary ======================================================================================= 安裝後檢查: # rpm -qa | grep -i mysql mysql-community-server-5.7.24-1.el7.x86_64 mysql-community-common-5.7.24-1.el7.x86_64 mysql-community-client-5.7.24-1.el7.x86_64 mysql-community-libs-5.7.24-1.el7.x86_64 重新開機, (適當的在每個清理步驟後重新開機, 有助於系統徹底清除工作記憶) # shutdown -r now # 啟動 mysqld # service mysqld start # 檢查 mysqld # service mysqld status Active: active(running) since.... 表示正在執行中 Main PID: 8881 (mysqld) # ps -ef | grep mysql mysql 8881 1 0 13:35 ? 00:00:01 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid At the initial start up of the server, the following happens, given that the data directory of the server is empty: 1. The server is initialized. 2. SSL certificate and key files are generated in the data directory. 3. validate_password is installed and enabled. 4. A superuser account 'root'@'localhost is created. A password for the superuser is set and stored in the error log file. To reveal it, use the following command: shell> sudo grep 'temporary password' /var/log/mysqld.log 首次啟動mysql後, 資料庫目錄會清空, 並完成以下工作: 1. 初始化 2. 建立 SSL 憑證於資料庫目錄中. 3. 啟用 validate_password. 4. 建立系統管理者: 'root'@'localhost, 並設定密碼存放於記錄檔中, 可以如下指令檢視: shell> sudo grep 'temporary password' /var/log/mysqld.log 檢查mysql 版本: # mysql -V mysql Ver 14.14 Distrib 5.7.24, for Linux (x86_64) using EditLine wrapper 查出暫存密碼 # grep 'temporary password' /var/log/mysqld.log 2019-01-10T05:07:54.432801Z 1 [Note] A temporary password is generated for root@localhost: ???????????? 2019-01-10T05:35:02.710125Z 1 [Note] A temporary password is generated for root@localhost: ???????????? 盡快以以上查到的暫存密碼, 登入mysql後, 變更為新的密碼: Change the root password as soon as possible by logging in with the generated, temporary password and set a custom password for the superuser account: 以暫存密碼登入: shell> mysql -uroot -p 變更為新密碼: 密碼必須包含(1個大寫英文字母, 1個小寫字母, 1個數字, 1個特殊符號, 長度至少為8碼) mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!'; ALTER USER 'root'@'localhost' IDENTIFIED BY '????????'; Note validate_password is installed by default. The default password policy implemented by validate_password requires that passwords contain at least one upper case letter, one lower case letter, one digit, and one special character, and that the total password length is at least 8 characters. # 開啟 Mysql 3306 防火牆 # firewall-cmd --zone=public --permanent --add-rich-rule 'rule family="ipv4" source address="220.128.199.127/24" service name="mysql" accept' # firewall-cmd --zone=public --permanent --add-rich-rule 'rule family="ipv4" source address="60.250.98.232/24" service name="mysql" accept' 重新載入防火牆, 變更後要重新載入, 才會看到變更後的結果 firewall-cmd --reload 重新啟動防火牆 systemctl restart firewalld.service 列出所有rich-rules # firewall-cmd --zone=public --list-rich-rules # 允許 root 帳號連線 There's two steps in that process: a) Grant privileges. As root user execute: GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '????????'; b) bind to all addresses: 繫結 網址. 預設只繫結到 localhost(127.0.0.1), 只要遮掉或改為 bind-address=* 實際上是連這行都沒有! The easiest way is to comment out the line in your /etc/my.cnf file: #bind-address = 127.0.0.1 and restart mysql service mysql restart By default it binds only to localhost, but if you comment the line it binds to all interfaces it finds. Commenting out the line is equivalent to bind-address=*. To check where mysql service has binded execute as root: 檢查 bind # netstat -tupan | grep mysql tcp6 0 0 :::3306 :::* LISTEN 8881/mysqld 登入mysql: # mysql -uroot -p 新增使用者, 不要使用root. 參考: MySQL-CreateUser.txt. ---------- 在Cent OS 7安裝MySQL-1 2019-01-10, 再次驗證: 建議改成以下步驟 CentOS 7中安裝Mysql 5.7的注意事項 https://hk.saowen.com/a/079c8cee31701cb237dcb8c0cd8d88bc638fb920f82ac081fe6c904d632538e8 2018-03-16, 測試ok! 1) 安裝前需要卸載CentOS 7自帶的mariadb數據庫。 CentOS從7開始,從自帶的yum源中取消了MySQL,改為默認安裝MySQL分支mariadb,如果想安裝MySQL官方版本,可以卸載mariadb數據庫。方法是先執行rpm -qa|grep mariadb,對於所有出現的rpm包都執行rpm卸載。 2) 在/etc/yum.repos.d目錄下創建MySQL yum安裝所需的Repo文檔mysql-community.repo [mysql57-community] name=MySQL 5.7 Community Server baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/ enabled=1 gpgcheck=0 #gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql 這裏有兩點要注意 1.如果本機沒有安裝gpg密鑰,gpgcheck設置為0,gpgkey一行註釋掉。 2.在CentOS 7上安裝MySQL 5.7,community/el後面的版本號必須改為7,官網的例子是el/6,這是針對CentOS 6版本。如果不這幺改,在安裝MySQL Community Server必須的安裝包時,會安裝錯對應的版本,而導致後續安裝因為找不到對應包而無法安裝,這一點必須注意,MySQL官網的指南沒有説清楚,值得吐槽。 3) 在執行安裝前最好執行指令 yum update 更新所有可能的依賴包。 4) 安裝MySQL Community Server只需要執行 yum install -y mysql-community-server 即可,安裝過程中會自動安裝依賴的包,例如mysql-community-common等。 檢查目前安裝的mysql: # rpm -qa | grep -i mysql mysql-community-common-5.7.24-1.el7.x86_64 mysql-community-libs-5.7.24-1.el7.x86_64 mysql-community-server-5.7.24-1.el7.x86_64 mysql-community-client-5.7.24-1.el7.x86_64 5) 安裝完成後執行 systemctl status mysqld.service 20190110, 錯誤無法通過. 改成 service mysqld {start|stop|restart|status} ref: https://dev.mysql.com/doc/refman/5.7/en/using-systemd.html service mysqld start 檢查MySQL是否啟動 系統顯示服務狀態是inactive,沒有啟動,執行 systemctl start mysqld.service 執行完後再運行systemctl status mysqld.service查看mysql運行狀態 6) 重置root用户密碼 從MySQL 5.7後,第一次啟動MySQL,會生成root用户的隨機密碼,可以執行以下命令查看 grep 'temporary password' /var/log/mysqld.log example: [root@60-250-98-236 yum.repos.d]# grep 'temporary password' /var/log/mysqld.log 2018-03-16T15:19:38.975505Z 1 [Note] A temporary password is generated for root@localhost: yPdTsk(jk1Zu 2018-03-19T07:27:21.313947Z 1 [Note] A temporary password is generated for root@localhost: Nn&j?Ty.y1_X 這個密碼是臨時密碼,必須修改為正式密碼,否則使用這個密碼登錄MySQL Server後,執行任何命令,都會顯示以下錯誤 登入MySQL Server: mysql -u root -p 我們可以執行以下命令,修改root用户密碼 mysql> alter user user() identified by 'pass0'; 但是會顯示以下錯誤 ... 這是因為MySQL默認使用的validate_password_policy是MEDIUM的緣故,MySQL的官網介紹validate_password_policy有以下三種: Policy, Tests Performed 0 or LOW, Length //只檢查密碼長度 1 or MEDIUM, Length; numeric, lowercase/uppercase, and special characters //檢查密碼長度,是否包含數字,大小寫字母,特殊字符 2 or STRONG, Length; numeric, lowercase/uppercase, and special characters; dictionary file //檢查密碼長度,是否包含數字,大小寫字母,特殊字符,以及是否包含字典文檔 引用地址 https://dev.mysql.com/doc/refman/5.7/en/validate-password-options-variables.html#sysvar_validate_password_policy MySQL安裝後默認的validate_password_policy為MEDIUM,我們重新設置的密碼不符合這個policy的要求,所以命令執行失敗。 如果要修改密碼成功,我們需要修改validate_password_policy為0 mysql> set global validate_password_poilcy=0; 默認的validate_password_length是8,我們可以修改為5 mysql> set global validate_password_length=5; 完成這兩步後我們可以修改root用户的密碼為admin,命令和前面一樣。 mysql> alter user user() identified by 'pass0'; root/pass0 7) 允許遠程主機訪問 在MySQL服務器主機上使用root用户登錄MySQL後,切換到mysql數據庫,再執行以下命令 mysql> use mysql; mysql> update user set host='%' where user='root'; mysql> quit 運行完後重啟MySQL服務 systemctl restart mysqld.service 再在防火牆上打開MySQL 3306端口,重啟firewalld服務 firewall-cmd --permanent --add-port=3306/tcp systemctl restart firewalld.service 之後可以使用MySQL客户端工具或者應用進程從遠程訪問MySQL服務器了。 ---------- 在Cent OS 7安裝MySQL-2 ref: 2018-03-16, 測試OK! https://dotblogs.com.tw/supershowwei/2017/08/28/173107 但是建議改成前面的步驟: 在Cent OS 7安裝MySQL-1 https://hk.saowen.com/a/079c8cee31701cb237dcb8c0cd8d88bc638fb920f82ac081fe6c904d632538e8 CentOS 7中安裝Mysql 5.7的注意事項 1. 移除 CentOS 7 內建的 MariaDB Libraries CentOS 7 預設內建 MariaDB Libraries,我們可以執行下面這兩行指令的其中一行,就能列出已經安裝的 MariaDB Packages。 rpm -qa | grep mariadb # or yum list installed | grep mariadb 移除也挺簡單的,我建議用 yum remove 指令來移除套件,讓 yum 幫我們處理套件相依的問題。 yum remove -y mariadb-libs 啟動 MySQL 服務時 libnuma.so.1 報錯 如果我們看到下列這串錯誤訊息,那很有可能是我們少裝了 numactl 套件。 bin/mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory 執行 yum install 指令把它裝起來就行了 yum install -y numactl 2. MySQL 從 5.7.18 開始 my-default.cnf 不再內含在二進制包內 從 5.7.18 版本開始沒有 my.cnf 設定檔也可以執行 MySQL 服務,如果有朋友參考到 5.7.18 版本以前的二進制包安裝教學文章,通常會有一個步驟是複製 support-files/my-default.cnf 到 /etc 底下,這個步驟從 5.7.18 開始可以省略了。 可是如果要自訂環境變數怎麼辦? 一樣可以產生一個 my.cnf 放到 /etc 底下,而設定檔的內容只要設定我們想要調整的環境變數就行了,其他會維持預設值,這個連結說明了 MySQL 讀取設定檔位置的順序。 3. 底下附上安裝 MySQL 5.7.19 的指令 yum install -y libaio yum install -y numactl yum install -y wget cd /tmp wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz # -C: 如果要解壓縮到某個目錄,必須加上這個參數。 tar -zxvf mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz -C /usr/local cd /usr/local mv mysql-5.7.19-linux-glibc2.12-x86_64 mysql cd mysql groupadd mysql # -r: 建立一個系統的帳號,這個帳號的 UID 會有限制(/etc/login.defs)。 # -g: 帳號的 Initial Group # -s: 後面接一個 Shell,預設是 /bin/bash。 # /bin/false: 這是最嚴格的禁止 Login 選項,一切服務都不能用,這樣該用戶即使登錄,也不能夠執行 Linux 下的命令。 useradd -r -g mysql -s /bin/false mysql mkdir data chmod 750 data # -R: 進行遞迴(Recursive)的持續變更,亦即連同次目錄下的所有檔案都變更。 # 小數點(.): 目前的工作目錄 chown -R mysql . chgrp -R mysql . # 初始化MySQL,記得把臨時密碼記下來。 bin/mysqld --initialize --user=mysql A temporary password is generated for root@localhost: a=I)ip%7oltq # 產生 RSA 私鑰 bin/mysql_ssl_rsa_setup chown -R root . chown -R mysql data # 建立啟動腳本 cp support-files/mysql.server /etc/init.d/mysql.server # 啟動 mysql.server 服務 service mysql.server start # 使用剛剛生成的密碼登入 mysql bin/mysql -u root -p # 重設密碼 set password=password('{密碼}'); set password=password('hondamysql'); # 開啟 root 的遠端登入權限 grant all privileges on *.* to 'root'@'%' identified by '{密碼}' with grant option; grant all privileges on *.* to 'root'@'%' identified by 'hondamysql' with grant option; flush privileges; exit # 開啟防火牆 3306 埠號 firewall-cmd --permanent --add-port=3306/tcp firewall-cmd --reload