侧边栏壁纸
博主头像
Mr·Ldd Blog 博主等级

今天也是充满希望的一天!✍️

  • 累计撰写 48 篇文章
  • 累计创建 10 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Docker Compose 部署 MySqL

Mr·ldd
2024-05-04 / 0 评论 / 2 点赞 / 66 阅读 / 0 字

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或者直接虚拟机重启即可

参考链接:docker-compose安装mySql

2

评论区