Docker 技術系列之安裝多版本Mysql5.6和Mysql5.7


大家好,后面的就不是關於MAC專有的內容,基本是跟Java環境,基礎技術方面有關。所以這個教程對於在linux系統還是macOS都是通用的,不用擔心。

上一篇,我們安裝好對應的Docker之后,感受到了它的便利。接下來我們來安裝Mysql吧,它在開發中經常需要用到。

MySQL 是世界上最受歡迎的開源數據庫。憑借其可靠性、易用性和性能,MySQL 已成為 Web 應用程序的數據庫優先選擇。

說個痛點,如果是在windows,不可想像,你要安裝不同版本的mysql進行測試,而且不想讓他們版本之間有什么交集。比如說,公司用着穩定版本的5.6,但是目前市面上比較新的課程都采用mysql5.7 進行教學,想嘗嘗鮮。這安裝簡直是一個噩夢,有了docker,輕松就能解決這個問題,端口和配置也不會沖突。

如果是centos安裝還好點,如果是通過源碼編譯安裝還是得折騰一會的。所以接下來,我們一起通過docker來安裝mysql。

一、查看可用的 MySQL 版本

方式一:網頁端訪問 MySQL 鏡像庫地址:

https://hub.docker.com/_/mysql

方式二:我們還可以用命令來查看可用版本。

 docker search mysql

看看效果圖:

二、官網獲取 MySQL 鏡像

以下版本供您選擇

# 拉取 mysql 5.7
docker pull mysql:5.7

# 拉取最新版mysql鏡像,如果不寫后面的版本號則會自動拉取最新版
docker pull mysql

這里以5.7版本為例。

docker pull mysql:5.7

第一次拉去,會比較久一點,需要去下載對應的鏡像。

三、查看本地鏡像

使用以下命令來查看是否已安裝了 mysql

docker images

四、運行Mysql容器

安裝完成后,我們可以使用以下命令來運行 mysql 容器:

  • 1、創建掛載目錄

創建掛載目錄,主要是方便修改配置文件達到方便控制的目的。

mkdir -p $HOME/docker/mysql57

是為了方便管理建的目錄,主要是表示docker項目下放置的一些配置文件。mysql57表示應用名字

cd $HOME/docker/mysql57
  • 2、運行Mysql容器

方式一:不需要掛載目錄(不推薦)

docker run -p 3306:3306 --name mysql57 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

方式二:需要掛載目錄(推薦)

docker run -p 3306:3306 --name mysql57 \
-v $PWD/conf:/etc/mysql \
-v $PWD/logs:/var/log/mysql \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci

參數說明

  • –name:容器名,此處命名為mysql57
  • -v :掛載目錄
  • -e:配置信息,此處配置mysql的root用戶的登陸密碼
  • -p:端口映射,此處映射 主機3306端口 到 容器的3306端口
  • -d:源鏡像名,此處為 mysql:5.7並后台運行 后面為設置mysql的默認編碼

3、選項執行,如果不需要mysql56,可以不需要執行。

創建目錄

mkdir -p $HOME/docker/mysql56

進去該目錄

cd $HOME/docker/mysql56

拉取鏡像

docker pull mysql:5.6

mysql5.6 安裝

docker run -p 3307:3306 --name mysql56 \
-v $PWD/conf:/etc/mysql \
-v $PWD/logs:/var/log/mysql \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.6 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci

可能會遇到的問題,如果一開始沒有執行拉取鏡像的命令,會自動拉取鏡像,然后默認已經創建了一個鏡像mysql56,我們通過命令查找回來,然后啟動即可。

查看所有容器

docker ps -a

刪除容器

docker rm 容器id

啟動容器

docker start 容器id

額外提供倆個快速命令

# 停止所有容器
docker stop $(docker ps -a -q)
# remove刪除所有容器
$ docker rm $(docker ps -a -q)

五、安裝成功

通過 docker ps 命令查看是否安裝成功。

docker ps -a

容器狀態的Up狀態,表示容器正在運行,並且可以看到主機和容器的端口映射關系。

重啟mysql容器

docker restart mysql57

查看mysql日志

docker logs -f mysql57

六、Mysql 測試

進入到mysql容器

docker exec -ti mysql57 /bin/bash

參數說明

  • -t 在容器里生產一個偽終端
  • -i 對容器內的標准輸入 (STDIN) 進行交互

登陸到mysql服務器

方式一

mysql -h 127.0.0.1 -u root -p

方式二

mysql -u root -p123456

查詢測試語句

use mysql;
SELECT VERSION(), CURRENT_DATE;

如果需要遠程登錄的,需要執行授權命令 1、直接讓root也可以遠程登陸(不建議)

GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY '123456' WITH GRANT OPTION;

2、創建一個用戶admin遠程登陸(建議)

GRANT ALL PRIVILEGES ON *.* TO admin@"%" IDENTIFIED BY '123456' WITH GRANT OPTION;

3、刷新權限

FLUSH PRIVILEGES;

4、查看用戶

select host,user from user;

5、備份數據

$ docker exec mysql57 sh -c 'exec mysqldump --all-databases -uroot -p"123456"' > /some/path/on/your/host/all-databases.sql

6、恢復數據

$ docker exec -i mysql57 sh -c 'exec mysql -uroot -p"123456"' < /some/path/on/your/host/all-databases.sql

七、其他配置

  • 1、only_full_group_by 問題

如果安裝的版本是 5.7版本, 查詢數據時出現如下錯誤

this is incompatible with sql_mode=only_full_group_by

可以使用使用下列方式解決

  • 2、查詢 sql_mode
select @@sql_mode

結果如下

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
  • 3、重置

刪除其中的 ONLY_FULL_GROUP_BY配置,重新設置到 config-file.cnf中

[mysqld]
# 表名不區分大小寫
lower_case_table_names=1
#server-id=1
datadir=/var/lib/mysql
#socket=/var/lib/mysql/mysqlx.sock
#symbolic-links=0
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

涉及比較深的部分,如果有機會更新mysql方面的教程,再講講。

總結

1、一句命令即可完成mysql的安裝,方便快捷。

2、多實例,不同端口相互之間不影響。

推薦閱讀

Docker 技術系列之安裝Docker Desktop for Mac


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM