大家好,后面的就不是關於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、多實例,不同端口相互之間不影響。
推薦閱讀