Docker Compose 部署 MySqL
编写docker-compose.yml文件
version: '3'
services:
# 服务名称
mysql:
# 或其它mysql版本
image: mysql:8.0.32
# 容器名称
container_name: mysql
command: #构建容器后所执行的命令
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
--lower-case-table-names=1 #忽略数据表明大小写
environment:
# root用户密码
- MYSQL_ROOT_PASSWORD=123456
volumes:
# 映射日志目录,宿主机:容器
- /root/mysql/log:/var/log/mysql
- /root/mysql/data:/var/lib/mysql
- /root/mysql/conf.d:/etc/mysql/conf.d
# 让容器的时钟与宿主机时钟同步,避免时间的问题,ro是read only的意思,就是只读。
- /etc/localtime:/etc/localtime:ro
ports:
# 指定宿主机端口与容器端口映射关系,宿主机:容器
- 3306:3306
# 容器随docker启动自启
restart: always
配置参数说明:
-
image
镜像名称 -
container_name
容器名称 -
command
#容器启动后执行的命令 -
--character-set-server=utf8mb4
设置服务器字符编码,可通过my.cnf覆盖 -
--collation-server=utf8mb4_unicode_ci
设置服务器字符编码,可通过my.cnf覆盖 -
--lower-case-table-names=1
#忽略数据表明大小写 注意:该属性只有初始化构建时才生效,my.cnf无法覆盖,如果没有设置的话,需要重新配置mysql才可以且记要备份挂载的数据文件,否则会死的很惨 -
restart
重启的方式,常用跟随docker的启动而启动
-
environment
设置环境变量- MYSQL_ROOT_PASSWORD: root #设置root帐号密码
-
ports
宿主主机端口映射到容器端口 -
volumes
数据卷的挂载
部署
准备工作
创建目录
$ mkdir -p mysql
$ cd mysql
$ mkdir -p data log conf
说明:
最新官方MySQL(5.7.19)的docker镜像在创建时映射的配置文件目录有所不同 MySQL(5.7.19)的默认配置文件是 /etc/mysql/my.cnf
文件。如果想要自定义配置, 建议向 /etc/mysql/conf.d
目录中创建 *.cnf
文件。新建的文件可以任意起名,只要保证后缀名是 cnf 即可。 新建的文件中的配置项可以覆盖 /etc/mysql/my.cnf
中的配置项。 又由于宿主主机 /mydata/mysql/conf.d
目录 已经挂载到docker容器 /etc/mysql/conf.d
目录,所以只需在 /mydata/mysql/conf.d
目录下自定义*.cnf文件即可生效。
配置文件模板
- 官方配置文件模板 my.cnf
我的模板my.cnf
###### [client]配置模块 ######
[client]
default-character-set=utf8mb4
socket=/var/lib/mysql/mysql.sock
###### [mysql]配置模块 ######
[mysql]
# 设置MySQL客户端默认字符集
default-character-set=utf8mb4
socket=/var/lib/mysql/mysql.sock
###### [mysqld]配置模块 ######
[mysqld]
port=3306
user=mysql
# 设置sql模式 sql_mode模式引起的分组查询出现*this is incompatible with sql_mode=only_full_group_by,这里最好剔除ONLY_FULL_GROUP_BY
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
server-id = 1
# MySQL8 的密码认证插件 如果不设置低版本navicat无法连接
default_authentication_plugin=mysql_native_password
# 禁用符号链接以防止各种安全风险
symbolic-links=0
# 允许最大连接数
max_connections=1000
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 表名存储在磁盘是小写的,但是比较的时候是不区分大小写
lower_case_table_names=1
max_allowed_packet=16M
# 设置时区
default-time_zone='+8:00'
将 docker-compose.yml
文件上传到Linux服务器 /root/mysql
目录下
启动MySQL
$ cd /root/mysql
$ docker compose up mysql -d #指定mysql 后台运行
[+] Running 1/1
⠿ Container mysql Started
验证
$ docker exec -it mysql mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 679
Server version: 8.0.32 MySQL Community Server - GPL
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
注意
如果无法登录提示没有sock,那么重启一下docker或者直接虚拟机重启即可
评论区