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

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

Mysql

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

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

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

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

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

docker

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

一、查看可用的 MySQL 版本

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

<code>https://hub.docker.com/_/mysql/<code>

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

<code> docker search mysql/<code>

看看效果圖:

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

docker

二、官網獲取 MySQL 鏡像

以下版本供您選擇

<code># 拉取 mysql 5.7
docker pull mysql:5.7

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

這裡以5.7版本為例。

<code>docker pull mysql:5.7/<code>

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

三、查看本地鏡像

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

<code>docker images/<code>

四、運行Mysql容器

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

  • 1、創建掛載目錄

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

<code>mkdir -p $HOME/docker/mysql57/<code>

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

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

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

<code>docker run -p 3306:3306 --name mysql57 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7/<code>

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

<code>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/<code>

參數說明

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

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

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

docker

創建目錄

<code>mkdir -p $HOME/docker/mysql56/<code>

進去該目錄

<code>cd $HOME/docker/mysql56/<code>

拉取鏡像

<code>docker pull mysql:5.6/<code>

mysql5.6 安裝

<code>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/<code>

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

查看所有容器

<code>docker ps -a/<code>

刪除容器

<code>docker rm 容器id/<code>

啟動容器

<code>docker start 容器id/<code>

額外提供倆個快速命令

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

五、安裝成功

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

<code>docker ps -a/<code>

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

重啟mysql容器

<code>docker restart mysql57/<code>

查看mysql日誌

<code>docker logs -f mysql57/<code>

六、Mysql 測試

進入到mysql容器

<code>docker exec -ti mysql57 /bin/bash/<code>

參數說明

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

登陸到mysql服務器

方式一

<code>mysql -h 127.0.0.1 -u root -p/<code>

方式二

<code>mysql -u root -p123456/<code>

查詢測試語句

<code>use mysql;
SELECT VERSION(), CURRENT_DATE;/<code>

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

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

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

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

3、刷新權限

<code>FLUSH PRIVILEGES;/<code>

4、查看用戶

<code>select host,user from user;/<code>

5、備份數據

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

6、恢復數據

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

七、其他配置

  • 1、only_full_group_by 問題

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

<code>this is incompatible with sql_mode=only_full_group_by/<code>

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

  • 2、查詢 sql_mode
<code>select @@sql_mode/<code>

結果如下

<code>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/<code>
  • 3、重置

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

<code>[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/<code>

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

總結

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

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



分享到:


相關文章: