大家好昵仅,后面的就不是關(guān)于MAC專有的內(nèi)容,基本是跟Java環(huán)境梢卸,基礎(chǔ)技術(shù)方面有關(guān)走诞。所以這個(gè)教程對于在linux系統(tǒng)還是macOS都是通用的副女,不用擔(dān)心蛤高。
上一篇,我們安裝好對應(yīng)的Docker之后碑幅,感受到了它的便利戴陡。接下來我們來安裝Mysql吧,它在開發(fā)中經(jīng)常需要用到沟涨。
MySQL 是世界上最受歡迎的開源數(shù)據(jù)庫恤批。憑借其可靠性、易用性和性能裹赴,MySQL 已成為 Web 應(yīng)用程序的數(shù)據(jù)庫優(yōu)先選擇喜庞。
說個(gè)痛點(diǎn),如果是在windows棋返,不可想像延都,你要安裝不同版本的mysql進(jìn)行測試,而且不想讓他們版本之間有什么交集睛竣。比如說晰房,公司用著穩(wěn)定版本的5.6,但是目前市面上比較新的課程都采用mysql5.7 進(jìn)行教學(xué)射沟,想嘗嘗鮮殊者。這安裝簡直是一個(gè)噩夢,有了docker验夯,輕松就能解決這個(gè)問題猖吴,端口和配置也不會沖突。
如果是centos安裝還好點(diǎn)挥转,如果是通過源碼編譯安裝還是得折騰一會的距误。所以接下來簸搞,我們一起通過docker來安裝mysql。
一准潭、查看可用的 MySQL 版本
方式一:網(wǎng)頁端訪問 MySQL 鏡像庫地址:
https://hub.docker.com/_/mysql
方式二:我們還可以用命令來查看可用版本趁俊。
docker search mysql
看看效果圖:
二、官網(wǎng)獲取 MySQL 鏡像
以下版本供您選擇
# 拉取 mysql 5.7docker pull mysql:5.7# 拉取最新版mysql鏡像,如果不寫后面的版本號則會自動拉取最新版docker pull mysql
這里以5.7版本為例刑然。
docker pull mysql:5.7
第一次拉去,會比較久一點(diǎn),需要去下載對應(yīng)的鏡像寺擂。
三、查看本地鏡像
使用以下命令來查看是否已安裝了 mysql
docker images
四泼掠、運(yùn)行Mysql容器
安裝完成后怔软,我們可以使用以下命令來運(yùn)行 mysql 容器:
- 1、創(chuàng)建掛載目錄
創(chuàng)建掛載目錄择镇,主要是方便修改配置文件達(dá)到方便控制的目的挡逼。
mkdir -p $HOME/docker/mysql57
是為了方便管理建的目錄,主要是表示docker項(xiàng)目下放置的一些配置文件腻豌。mysql57表示應(yīng)用名字
cd $HOME/docker/mysql57
- 2家坎、運(yùn)行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
參數(shù)說明
- –name:容器名,此處命名為mysql57
- -v :掛載目錄
- -e:配置信息吝梅,此處配置mysql的root用戶的登陸密碼
- -p:端口映射虱疏,此處映射 主機(jī)3306端口 到 容器的3306端口
- -d:源鏡像名,此處為 mysql:5.7并后臺運(yùn)行 后面為設(shè)置mysql的默認(rèn)編碼
3苏携、選項(xiàng)執(zhí)行
做瞪,如果不需要mysql56,可以不需要執(zhí)行右冻。
創(chuàng)建目錄
mkdir -p $HOME/docker/mysql56
進(jìn)去該目錄
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
可能會遇到的問題装蓬,如果一開始沒有執(zhí)行拉取鏡像的命令,會自動拉取鏡像纱扭,然后默認(rèn)已經(jīng)創(chuàng)建了一個(gè)鏡像mysql56牍帚,我們通過命令查找回來,然后啟動即可跪但。
查看所有容器
docker ps -a
刪除容器
docker rm 容器id
啟動容器
docker start 容器id
額外提供倆個(gè)快速命令
# 停止所有容器docker stop $(docker ps -a -q)# remove刪除所有容器$ docker rm $(docker ps -a -q)
五履羞、安裝成功
通過 docker ps 命令查看是否安裝成功。
docker ps -a
容器狀態(tài)的Up狀態(tài)屡久,表示容器正在運(yùn)行忆首,并且可以看到主機(jī)和容器的端口映射關(guān)系。
重啟mysql容器
docker restart mysql57
查看mysql日志
docker logs -f mysql57
六被环、Mysql 測試
進(jìn)入到mysql容器
docker exec -ti mysql57 /bin/bash
參數(shù)說明
- -t 在容器里生產(chǎn)一個(gè)偽終端
- -i 對容器內(nèi)的標(biāo)準(zhǔn)輸入 (STDIN) 進(jìn)行交互
登陸到mysql服務(wù)器
方式一
mysql -h 127.0.0.1 -u root -p
方式二
mysql -u root -p123456
查詢測試語句
use mysql;SELECT VERSION(), CURRENT_DATE;
如果需要遠(yuǎn)程登錄的糙及,需要執(zhí)行授權(quán)命令 1、直接讓root也可以遠(yuǎn)程登陸(不建議)
GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY '123456' WITH GRANT OPTION;
2筛欢、創(chuàng)建一個(gè)用戶admin遠(yuǎn)程登陸(建議)
GRANT ALL PRIVILEGES ON *.* TO admin@"%" IDENTIFIED BY '123456' WITH GRANT OPTION;
3浸锨、刷新權(quán)限
FLUSH PRIVILEGES;
4唇聘、查看用戶
select host,user from user;
5、備份數(shù)據(jù)
$ docker exec mysql57 sh -c 'exec mysqldump --all-databases -uroot -p"123456"' > /some/path/on/your/host/all-databases.sql
6柱搜、恢復(fù)數(shù)據(jù)
$ 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版本, 查詢數(shù)據(jù)時(shí)出現(xiàn)如下錯(cuò)誤
this is incompatible with sql_mode=only_full_group_by
可以使用使用下列方式解決
- 2聪蘸、查詢 sql_mode
select @@sql_mode
結(jié)果如下
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配置,重新設(shè)置到 config-file.cnf中
[mysqld]# 表名不區(qū)分大小寫lower_case_table_names=1#server-id=1datadir=/var/lib/mysql#socket=/var/lib/mysql/mysqlx.sock#symbolic-links=0sql_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.logpid-file=/var/run/mysqld/mysqld.pid
涉及比較深的部分健爬,如果有機(jī)會更新mysql方面的教程控乾,再講講。
總結(jié)
1娜遵、一句命令即可完成mysql的安裝蜕衡,方便快捷。
2设拟、多實(shí)例慨仿,不同端口相互之間不影響。
推薦閱讀