本文旨在提供最小可用的啟動(dòng)文檔彬祖,用于測(cè)試驗(yàn)證 MySQL 功能砰粹。通過(guò)本文你可以了解怎么通過(guò) Docker 快速啟動(dòng)一個(gè) MySQL 容器,并進(jìn)行 MySQL 的配置和備份功能缺亮。
官方文檔參考 https://hub.docker.com/_/mysql/
所有代碼提交 Github:https://github.com/aaron0769/docker-mysql
運(yùn)行 MySQL
在本地編排容器最簡(jiǎn)單的方法就是用 docker-compose,一個(gè)配置文件就能把整個(gè)容器環(huán)境拉起來(lái)形庭,配置可以固定下來(lái),不需要每次記憶 docker run 下的配置參數(shù)厌漂。
編寫(xiě) docker-compose.yml
文件萨醒,內(nèi)容如下:
version: '3.1'
services:
db:
image: mysql
ports:
- "3306:3306"
command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpasswd
MYSQL_DATABASE: mydb
MYSQL_USER: myuser
MYSQL_PASSWORD: mypasswd
networks:
localnet:
aliases:
- mysql-default
networks:
localnet:
其中 MySQL_XXX 創(chuàng)建了 root 密碼和普通用戶。localnet 讓容器關(guān)聯(lián)到本地網(wǎng)絡(luò)苇倡,可以通過(guò)本地 127.0.0.1 或者 localhost 進(jìn)行訪問(wèn)富纸。
啟動(dòng) MySQL
shell> docker-compose up -d
停止 MySQL
shell> docker-compose stop # 如果要徹底刪除相關(guān)資源使用命令down
連接 MySQL
一般有三種方式:
- 本地 MySQL 客戶端
- 直接進(jìn)入容器
- 通過(guò)容器啟動(dòng)一個(gè) MySQL 客戶端
方法3由于需要啟動(dòng)另一個(gè)容器囤踩,不是最簡(jiǎn)單的操作,但好處是有隔離的環(huán)境晓褪。這里就不詳細(xì)說(shuō)明了堵漱,有這個(gè)需要的讀者可以參考 Docker MySQL 官方文檔)。
本地 MySQL 客戶端
一般來(lái)說(shuō)本地還是建議安裝個(gè) MySQL 客戶端涣仿,安裝包可以參考 MySQL 官方文檔或者利用各種系統(tǒng)的包管理工具勤庐,比如 MacOS下可以通過(guò)以下命令安裝(這里會(huì)把整個(gè) MySQL Server 都一起安裝了)
brew install mysql
其他系統(tǒng)就不展開(kāi)了。安裝好后好港,直接通過(guò) shell 執(zhí)行以下命令即可進(jìn)入 MySQL愉镰。
shell>mysql -uroot -prootpasswd -h 127.0.0.1
通過(guò)容器直接進(jìn)入 MySQL
這個(gè)方法的原理是 MySQL 容器本身集成了客戶端,所以可以通過(guò)進(jìn)入容器的方式連接 MySQL钧汹。
首先通過(guò)docker ps
命令找到容器的名稱丈探,這里是mysql_db_1
docker exec -it mysql_db_1 mysql -uroot -prootpasswd
配置 MySQL
配置文件
通過(guò)掛載本地目錄到容器中的/etc/mysql/conf.d/
進(jìn)行配置文件導(dǎo)入,假設(shè)以下配置
.
├── config
│ └── my_custom.cnf
└── docker-compose.yml
配置一個(gè)最簡(jiǎn)單的修改拔莱,比如調(diào)整端口為3307
# config/my_custom.cnf
[mysqld]
port = 3307
修改 docker-compose.yml 文件碗降,在 db 項(xiàng)下面添加配置
db:
# 原配置保留,這里省略......
ports:
- "3307:3307"
volumes:
- ./config:/etc/mysql/conf.d
配置參數(shù)
docker 的 mysql 鏡像入口提供很多常用的 mysql 配置塘秦,可以在運(yùn)行容器時(shí)配置參數(shù)遗锣,比如本文中的幾個(gè)配置數(shù)據(jù)庫(kù)用戶和 root 用戶的密碼。更多配置也可以參考官網(wǎng)嗤形。
備份、恢復(fù)數(shù)據(jù)
MySQL Dump
可以像操作普通數(shù)據(jù)庫(kù)一樣進(jìn)行mysqldump
進(jìn)行備份弧圆,并通過(guò) mysql 導(dǎo)入數(shù)據(jù)赋兵。
物理備份
將 MySQL 的文件目錄映射到本地指定的目錄,通過(guò)整個(gè)目錄進(jìn)行備份搔预,在 volumes 配置中新增一個(gè)磁盤(pán)映射
...
volumes:
- ./config:/etc/mysql/conf.d
- ./datadir:/var/lib/mysql
在目錄中新建datadir
目錄霹期。
通過(guò)docker-compose down && docker-compose up
重啟容器,
即可觀察到datadir
目錄中的文件拯田,已經(jīng)包含了相應(yīng)的文件历造。
# ls datadir
ib_logfile0 ibdata1 mysql undo_001
ib_logfile1 ibtmp1 mysql.ibd undo_002
簡(jiǎn)單測(cè)試一下,進(jìn)入 MySQL 后船庇,創(chuàng)建一個(gè)新表
CREATE TABLE mytable( id INT );
這時(shí)關(guān)掉重啟容器吭产,只要datadir
的內(nèi)容沒(méi)有變,重新進(jìn)入之后鸭轮,發(fā)現(xiàn)這個(gè)表依然在臣淤。即可以通過(guò)將datadir
目錄達(dá)到備份和恢復(fù)的目的。現(xiàn)在很多文件系統(tǒng)提供快照功能窃爷,利用磁盤(pán)快照邑蒋,實(shí)現(xiàn)快速的備份功能姓蜂。