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.com
ustc
: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
。