1. 前言
XXXXX
2. Docker中安裝MySQL服務
以下以mysql8.2版本為例,mysql5.7的步驟也是一樣的
2.1. 查看可用的MySQL版本
# 搜索鏡像
docker search mysql
2.2. 拉取MySQL鏡像
# 拉取鏡像
docker pull mysql# 或者
docker pull mysql:latest
2.3. 查看本地鏡像
使用以下命令來查看是否已安裝了 mysql鏡像
docker images
2.4. 運行容器
MySQL是常用的關系型數據庫,一般的,希望它能永久的保存數據,哪怕是當容器被刪除了數據也不要刪除,此時就需要把主機文件夾掛載到容器上,這樣可以保證即使容器刪除后新建的MySQL容器可以使用之前的數據。
- 先準備好本地的目錄
mkdir -p /usr/local/mysql/log
mkdir -p /usr/local/mysql/data
mkdir -p /usr/local/mysql/conf
- 掛載目錄,啟動容器
# Docker啟動MySQL容器
docker run -p 3306:3306 --name mysql \
-v /usr/local/mysql/log:/var/log/mysql \
-v /usr/local/mysql/data:/var/lib/mysql \
-v /usr/local/mysql/conf:/etc/mysql.d \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql
-p 3306:3306
:指定宿主機端口與容器端口映射關系
-v
:掛載主機文件夾/usr/local/mysql/data
到 容器/var/lib/mysql
掛載點
-e
:指定容器需要的變量
-it
:表示交互式終端;
-d
:后臺運行mysql容器注意:-v /usr/local/mysql/conf:/etc/mysql.d \ 這里對應的是mysql.d很多人都寫成了conf,導致容器啟動失敗
2.5. 查看正在運行的容器
# 查看正在運行的容器
docker ps
# 查看所有的docker容器
docker ps -a
這個時候如果顯示的是up狀態,那就是啟動成功了。如果是restarting,說明是有問題的。我們可以查看日志:
docker logs -f mysql
2.6. 查看容器內部
docker exec -it mysql /bin/bash
2.7. 授權root遠程登錄
- 進入容器
docker exec -it mysql /bin/bash
- 登錄mysql
mysql -uroot -p
- 查看用戶、插件
mysql> use mysql;
Database changed
mysql> select host,user,plugin from user;
+-----------+------------------+-----------------------+
| host | user | plugin |
+-----------+------------------+-----------------------+
| % | root | caching_sha2_password |
| localhost | mysql.infoschema | caching_sha2_password |
| localhost | mysql.session | caching_sha2_password |
| localhost | mysql.sys | caching_sha2_password |
| localhost | root | caching_sha2_password |
+-----------+------------------+-----------------------+
5 rows in set (0.00 sec)
mysql>
查看結果,root@‘localhost’也看到了
root@’%‘,
root@’%‘`。已經有了遠程登錄root@’%',所以可以直接進行遠程連接。
- 直接退出吧
2.8. 在宿主機連接到容器的MySQL
# 用命令行測試端口連通性
[root@bogon ~]# nc -nv 127.0.0.1 3306
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 127.0.0.1:3306.
I
8.2.0
# 查看能不能連接上MySQL
mysql -u root -P 3306 -h 127.0.0.1 -proot
# 查看容器日志
docker logs -f mysql
2.9. 用Navicat連接容器的MySQL
- 配置連接的參數
- 連接上了
3. 授權root遠程登錄
- 進入mysql容器
docker exec -it mysql /bin/bash
- 登錄mysql
mysql -uroot -p
mysql> use mysql
Database changed
mysql> select host,user,plugin from user;
+-----------+------------------+-----------------------+
| host | user | plugin |
+-----------+------------------+-----------------------+
| % | root | caching_sha2_password |
| localhost | mysql.infoschema | caching_sha2_password |
| localhost | mysql.session | caching_sha2_password |
| localhost | mysql.sys | caching_sha2_password |
| localhost | root | caching_sha2_password |
+-----------+------------------+-----------------------+
5 rows in set (0.00 sec)mysql>
可以看到出廠就創建了root@'%'
賬號。如果沒有就自行創建下把
- 創建root@'%'賬號
mysql> create user root@'%' identified by 'root';
Query OK, 0 rows affected (0.01 sec)mysql>
- 授權所有權限給root@'%'賬號
mysql> grant all on *.* to root@'%';
Query OK, 0 rows affected (0.00 sec)mysql>
3.1. 取消密碼強度限制
- 卸載"驗證密碼"組件
mysql> UNINSTALL COMPONENT 'file://component_validate_password';
ERROR 3537 (HY000): Component specified by URN 'file://component_validate_password' to unload has not been loaded before.
mysql>
docker的mysql鏡像默認沒有安裝
- 卸載"驗證密碼"插件
mysql> UNINSTALL PLUGIN validate_password;
ERROR 1305 (42000): PLUGIN validate_password does not exist
mysql>
docker的mysql鏡像默認沒有安裝