目錄
前言
一、拉取鏡像
二、查看鏡像
三、運行鏡像
四、查看正在運行的容器
五、查看容器内部
六、修改mysql配置
七、重啓mysql服務,使其配置生效
八、設置docker啓動時啓動mysql
九、重啓mysql
十、授權遠程訪問
10.1 進入容器内部
10.2 登陸mysql
10.3 選擇數據庫
10.4 查看用戶連接情況
10.5 修改密碼認證方式
10.6 退出容器
前言
雖然 docker 安裝 mysql 不是一個很好的方案,但是爲了個人使用方便,使用 docker 安裝 mysql 還是沒什麽問題的。
本文爲了方便,我們直接通過yum方式安裝。所以,我們在安裝之前需要電腦可以聯網,不然我們這種方式是安裝不了的。
當然,你也可以自行下載mysql鏡像,然後再通過 docker 安裝,不過這不在本文的讨論範圍。
一、拉取鏡像
# 拉取鏡像 docker pull mysql # 或者 docker pull mysql:latest # 以上兩個命令是一緻的,默認拉取的就是 latest 版本的 # 我們還可以用下面的命令來查看可用版本: docker search mysql
二、查看鏡像
使用以下命令來查看是否已安裝了 mysql鏡像
docker images
三、運行鏡像
docker run -p 3306:3306 --name mysql --restart=always --privileged=true \ -v /usr/local/mysql/log:/var/log/mysql \ -v /usr/local/mysql/data:/var/lib/mysql \ -v /usr/local/mysql/conf:/etc/mysql \ -v /etc/localtime:/etc/localtime:ro \ -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
命令解決:
-p 3306:3306:指定宿主機端口與容器端口映射關系
--name mysql:創建的容器名稱
--restart=always:總是跟随docker啓動
--privileged=true:獲取宿主機root權限
-v /usr/local/mysql/log:/var/log/mysql:映射日志目錄,宿主機:容器
-v /usr/local/mysql/data:/var/lib/mysql:映射數據目錄,宿主機:容器
-v /usr/local/mysql/conf:/etc/mysql:映射配置目錄,宿主機:容器
-v /etc/localtime:/etc/localtime:ro:讓容器的時鍾與宿主機時鍾同步,避免時區的問題,ro是read only的意思,就是隻讀。
-e MYSQL_ROOT_PASSWORD=123456:指定mysql環境變量,root用戶的密碼爲123456
-d mysql:latest:後台運行mysql容器,版本是latest。
或者使用下面的命令:
docker run --name mysql --restart=always --privileged=true \ -v /usr/local/mysql/data:/var/lib/mysql \ -v /usr/local/mysql/conf.d:/etc/mysql/conf.d \ -v /etc/localtime:/etc/localtime:ro \ -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:latest
四、查看正在運行的容器
# 查看正在運行的容器 docker ps # 查看所有的Docker容器 docker ps -a
這個時候如果顯示的是up狀态,那就是啓動成功了。如果是restarting,說明是有問題的。我們可以查看日志:
docker logs -f mysql
可能會發現:
Failed to access directory for --secure-file-priv. Please make sure that dir
此時如果我們執行第五步也會報錯:
Error response from daemon: Container xxx is restarting, wait until the cont。。。
此時我們需要執行第六步。
五、查看容器内部
docker exec -it mysql /bin/bash
六、修改mysql配置
創建mysql配置文件:my.cnf
cd /usr/local/mysql ll cd conf vi my.cnf
在 my.cnf 文件中 寫入如下内容:
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
# 設置東八區時區
default-time_zone = '+8:00'
# 設置密碼驗證規則,default_authentication_plugin參數已被廢棄
# 改爲authentication_policy
#default_authentication_plugin=mysql_native_password
authentication_policy=mysql_native_password
# 限制導入和導出的數據目錄
# 爲空,不限制導入到處的數據目錄;
# 指定目錄,必須從該目錄導入到處,且MySQL不會自動創建該目錄;
# 爲NULL,禁止導入與導出功能
#secure_file_priv=/var/lib/mysql
secure_file_priv=
init_connect='SET collation_connection = utf8mb4_0900_ai_ci'
init_connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_0900_ai_ci
skip-character-set-client-handshake
skip-name-resolve
默認的鑒權方式,我們修改爲mysql_native_password,不然的話連接會報錯。因爲在mysql8以後的默認加密方式改變了,由 mysql_native_password 改爲了caching_sha2_password。這種加密凡是在客戶端無法訪問,客戶端支持的是mysql_native_password 。我們先進行第七步。
七、重啓mysql服務,使其配置生效
docker restart mysql
八、設置docker啓動時啓動mysql
docker update mysql --restart=always
九、重啓mysql
docker restart mysql
十、授權遠程訪問
不進行授權直接登陸的話會報錯的,如圖:
錯誤内容:
Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
Connection refused: connect
Connection refused: connect
10.1 進入容器内部
docker exec -it mysql /bin/bash
10.2 登陸mysql
mysql -u root -p
此時我們使用mysql客戶端連接服務器是失敗的,因爲默認的root不具有遠程連接的權限。
上面的密碼不要輸入,直接回車進入。
10.3 選擇數據庫
show databases; use mysql;
不要忘記最後的分号。
10.4 查看用戶連接情況
select host, user, plugin, authentication_string, password_expired from user;
我們看到root用戶隻有localhost的連接權限。
10.5 修改密碼認證方式
ALTER USER root@'%' IDENTIFIED WITH mysql_native_password BY '123456'; ALTER USER root@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'; -- 刷新權限 FLUSH PRIVILEGES;
10.6 退出容器
exit
先輸入exit退出mysql,再輸入exit退出容器。
此時,我們通過客戶端工具就可以連接mysql了。