1. 程式人生 > >使用 docker 安裝多版本的 MySQL

使用 docker 安裝多版本的 MySQL

首先從 docker 官網下載安裝 docker。

檢查 docker 安裝是否成功,出現類似下面的資訊就是安裝好了

$ docker version
Client: Docker Engine - Community
 Version:           18.09.0
 API version:       1.39
 Go version:        go1.10.4
 Git commit:        4d60db4
 Built:             Wed Nov  7 00:47:43 2018
 OS/Arch:           darwin/amd64
 Experimental:      false
Server: Docker Engine - Community Engine: Version: 18.09.0 API version: 1.39 (minimum version 1.12) Go version: go1.10.4 Git commit: 4d60db4 Built: Wed Nov 7 00:55:00 2018 OS/Arch: linux/amd64 Experimental: true

從 docker hub 上找到 MySQL 的映象,查詢得到 MySQL 的版本主要有 5.6 5.7 和 8.0。

下面我們分別拉取映象進行啟動

docker pull mysql:5.6
docker pull mysql:5.7
docker pull mysql:8.0

mysql 是官方的映象,冒號後面跟的是版本號。為了方便,我們把三個 mysql 的容器分別叫做 mysql56, mysql57, mysql80

docker run -p 3316:3306 --name mysql56 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
docker run -p 3317:3306 --name mysql57 -e MYSQL_ROOT_PASSWORD=
123456 -d mysql:5.7 docker run -p 3318:3306 --name mysql80 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0

-p 3316:3306 是把容器的3306埠對映到本機的3316埠
–name 是給執行的容器一個別名
-e MYSQL_ROOT_PASSWORD=123456 是初始化 MySQL 的密碼

這樣的話我們連線 MySQL 的命令就是下面的

mysql --port 3316 -uroot -h127.0.0.1 -p123456
mysql --port 3317 -uroot -h127.0.0.1 -p123456
mysql --port 3318 -uroot -h127.0.0.1 -p123456

但是這樣可能不太行。

因為直接從外面連 MySQL 可能是沒有許可權的

我們先進入容器

docker exec -it mysql80 bash

這樣就相當於進入了容器中的 bash

mysql -uroot -p123456

進入 MySQL

update mysql.user set host="%" where user="root";
flush privileges;

這樣就可以了。

一般情況下 MySQL5.6 和 MySQL5.7 應該是沒問題了,但是 MySQL8.0 的密碼驗證方式變了,我們應該要改一下

update mysql.user set host="%" where user="root";
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;

這樣就大功告成

$ mysql --port 3318 -uroot -h127.0.0.1 -p123456
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 49
Server version: 8.0.13 MySQL Community Server - GPL

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.13    |
+-----------+
1 row in set (0.01 sec)

最後我們看一下 docker 其他常用的命令

命令 功能
docker ps 檢視正在執行的容器
docker ps -a 檢視所有的容器
docker stop mysql56 停止 mysql56 這個容器
docker start mysql56 啟動 mysql56 這個容器
docker images 檢視 docker 所有映象
docker image list 同上
docker rm mysql56 刪除 mysql56 這個容器
docker rmi mysql:5.6 刪除 mysql 5.6 版本的 image

原文連結

https://notes.0xl2oot.cn/docker/2018/11/21/docker-mysql.html