1 概述
本文講述了如何利用Docker去安裝MySQL,以及MySQL自定義配置文件的相關設置。
2 安裝Docker
首先安裝Docker並開啟服務:
systemctl start docker
如果沒有添加國內源的話建議添加一下,新增/修改/etc/docker/daemon.json,添加如下內容:
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
這里用的是網易的源,其他源如下:
Docker中國區官方鏡像:https://registry.docker-cn.comustc:https://docker.mirrors.ustc.edu.cn- 中科大:
https://docker.mirrors.ustc.edu.cn - 阿里雲:每個人不同,需要到阿里雲容器服務創建,具體請查看文檔
3 拉取MySQL鏡像
docker pull mysql:latest
權限不夠請加sudo,另外這一步需要一點時間,請耐心等待。
拉取完成后可以查看鏡像:
docker images

4 運行容器
docker run -itd -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql-latest mysql
參數說明:
-i:以交互模式運行,通常配合-t-t:為容器重新分配一個偽輸入終端,通常配合-i-d:后台運行容器-p:端口映射,格式為主機端口:容器端口-e:設置環境變量,這里設置的是root密碼--name:設置容器別名

運行之后會返回一個容器ID。
5 測試
先查看運行狀態:
docker ps

接着連接到容器的偽終端上:
docker exec -it mysql-latest /bin/bash
其中mysql-latest是執行運行命令時創建的別名,同時使用mysql測試連接:
mysql -u root -p
輸入環境變量傳遞的root密碼后就可以連接上MySQL了:

也可以在IDEA中添加MySQL數據源並測試連接:

6 配置文件
一般來說僅僅安裝完MySQL是不夠的,還需要自定義一些配置文件,自定義配置文件有兩種方法,一種是進入容器並修改里面的my.cnf,另一種是容器啟動的時候使用-v參數掛載配置文件的目錄。
6.1 容器內修改
首先進入容器:
docker exec -it mysql-latest /bin/bash
請把mysql-latest修改為對應的容器別名,進入后可以通過
mysql --help | grep my.cnf
查看配置文件的位置:

這幾個文件存在讀取順序,可以使用
mysqld --verbose --help --pid-file=/var/run/mysqld/mysqld.pid | grep -A 1 "Default options"
查看:

這里修改的是/etc/mysql/my.cnf,但是。。。

沒有vim?關系不大先用vi將就一下:

當時就人傻了居然vi都沒有,行,關系不大,安裝就行了:

這都什么玩意。。。包都搜不到。。。
查看了一下系統的版本,是Debian 10:

於是就找了對應的源:
deb http://mirrors.aliyun.com/debian/ buster main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib
deb http://mirrors.aliyun.com/debian-security buster/updates main
deb-src http://mirrors.aliyun.com/debian-security buster/updates main
deb http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib
deb http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib
先備份:
cp /etc/apt/sources.list /etc/apt/sources.list.bak
然后修改添加即可:
vim /etc/apt/sources.list
但是沒有這個命令。。。
沒辦法了手動echo添加:
echo deb http://mirrors.aliyun.com/debian/ buster main non-free contrib deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib deb http://mirrors.aliyun.com/debian-security buster/updates main deb-src http://mirrors.aliyun.com/debian-security buster/updates main deb http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib deb-src http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib deb http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib deb-src http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib > sources.list

然后更新:
apt update
apt upgrade
安裝vim:
apt install vim
接着修改配置文件即可:
vim /etc/mysql/my.cnf
下面是示例常用參數:
[mysqld]
character-set-server=utf8mb4
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
6.2 運行容器時掛載
先查看一下原來容器的字符集:
show variables like '%character%';

未修改之前的字符集如圖,下面使用-v參數掛載配置文件目錄並對字符集進行修改,首先先把原來的容器停止掉,以免端口占用:
docker stop mysql-latest
接着在宿主機目錄/etc/mysql下創建一個配置文件my.cnf:
vim /etc/mysql/my.cnf
# 添加如下內容
[mysqld]
character-set-server=utf8mb4
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
重新創建並運行容器,並同時掛載目錄:
docker run -itd -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /etc/mysql:/etc/mysql/conf.d --name mysql mysql
其中-v參數是掛載宿主機的一個目錄,把宿主機的一個目錄掛載到容器上,注意需要修改--name,不允許重復。
根據官網文檔(鏈接戳這里),默認的配置文件位置為/etc/mysql/my.cnf,自定義的配置文件位置可以為/etc/mysql/conf.d或/etc/mysql/mysql.conf.d,因此將宿主機的/etc/mysql掛載到容器的/etc/mysql/conf.d,MySQL會自動合並默認的配置文件/etc/mysql/my.cnf與自定義的配置文件(這里是/etc/mysql/conf.d/my.cnf)。

再次進入容器查看字符集:

可以看到字符集被修改為了utf8bm4。
