在 Docker 的 CentOS7 鏡像 中安裝 mysql
本來以為是個很簡單的過程居然折騰了這么久,之前部署雲服務器時也沒有好好地記錄,因此記錄下。
特別提醒:本文的操作環境是在 Docker 的 CentOS7 鏡像中,與實際的 CentOS7 環境會略有不同(在 CentOS7 中使用 yum 安裝后即可直接使用,而在鏡像中多了很多配置步驟和報錯解決)。而如果啟動容器使用 docker run -it --privileged --name centos7 centos:7 /usr/sbin/init 似乎與真實環境比較接近。本文可作為 Linux 下安裝 mysql 的參考,但在容器中安裝 mysql 實際意義不大,官方已經有了啊233333。
簡要注意點:下載並安裝源、啟動時錯誤解決、開啟關閉服務、首次登陸修改密碼、允許從任意 ip 以 root 身份登陸
-
首先使用:wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm 下載mysql的官方源(可能需要先安裝 wget )
-
之后使用:rpm -ivh mysql57-community-release-el7-9.noarch.rpm 安裝源
-
使用 yum install mysql-server 安裝,並啟動 mysqld --user root (由於雲服務器默認使用 root)。
此時可能立刻停止后退出,並報 Can't open and lock privilege tables: Table 'mysql.user' doesn't exist 錯誤,查看配置文件 /etc/my.conf,發現其中有一句 datadir=/var/lib/mysql,因此使用 mysqld --initialize --user=mysql --datadir=/var/lib/mysql 初始化mysql。
再次報錯並提示 --initialize specified but the data directory has files in it. Aborting,則刪除並重建/var/lib/mysql 目錄后即可。
-
使用 cat /var/log/mysqld.log | grep password 查看臨時密碼,登陸后用 SET PASSWORD FOR root@localhost = password('<PASSWORD>'); 修改密碼。如果提示密碼不合要求,用 SET global validate_password_policy=LOW; 降低密碼要求 。
-
設置允許 root 從任意 ip 登陸
use mysql; select user, host from user; update user set host = '%' where user = 'root'; # 原值為localhost flush privileges;
亦可使用:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '<YOUR_ROOT_PASSWORD>' WITH GRANT OPTION; flush privileges;
其中 “ *.* ” 代表所有資源所有權限, “ 'root'@% ” 其中 root 代表賬戶名,% 代表所有的訪問地址,也可以使用一個唯一的地址進行替換,只有一個地址能夠訪問。如果是某個網段的可以使用地址與%結合的方式,如 10.0.42.%。IDENTIFIED BY 'root',這個 root 是指訪問密碼。WITH GRANT OPTION 允許級聯授權。
切記無論什么時候一定要搞清命令的含義再執行!!!
鄙人就是因為沒有搞清楚此條命令的含義,照抄照搬。別人的 <YOUR_ROOT_PASSWORD> 寫 “root” 我也跟着寫 “root”,自然搞得一團糟而且登陸不上去。
-
啟動 mysql 服務。有兩種方式,但必須組合使用,不能混用:
- 使用 systemctl (針對CentOS 7.0及以上版本,7.0 以下版本使用 service 命令)
systemctl start mysqld systemctl stop mysqld
- 使用 mysql 程序自帶的命令
# 由於雲服務器默認root登陸,需要加上 --user root # & 號表示后台運行,否則會阻塞 mysqld start --user root & mysqladmin -u root -p shutdown
完成!
參考
mysql 安裝配置:
https://www.cnblogs.com/zymnstlm/p/12381627.html
https://www.cnblogs.com/zhongxinWang/p/10606733.html
mysql 設置允許 root 遠程登錄:
https://blog.csdn.net/zhazhagu/article/details/81064406
mysql 服務的啟動和關閉:
https://blog.csdn.net/lihuarongaini/article/details/100119869
mysql 密碼強度設置:
https://blog.csdn.net/hello_world_qwp/article/details/79551789
mysql 初始化:
https://blog.csdn.net/weixin_42654817/article/details/88722778