docker
  • docker教程
  • advanced
    • Docker 构建缓存指南
    • Docker分配CPU资源
    • Dockerfile+Maven插件构建SpringBoot镜像(推荐)
    • Dockerfile构建SpringBoot镜像
    • idea配置docker
    • Docker Jenkins进阶配置
    • 基于jenkins容器部署SpringBoot应用构建镜像(基于Dockerfile+Maven插件构建)
    • Maven插件构建SpringBoot镜像(二)
    • 基于Maven插件为SpringBoot应用构建镜像并推送到远程_私人仓库(Docker Hub)
    • Maven插件构建SpringBoot镜像(一)
    • Docker MongoDB进阶配置
    • Docker 多阶段构建指南
    • Docker MySql进阶配置
    • Docker network进阶配置
    • Docker Nginx进阶配置
    • Docker空(none)镜像处理
    • Docker pip install --no-cache-dir
    • Docker redis进阶配置
  • concepts
    • docker、docker engine和docker desktop区别
    • 架构
    • 什么是容器?
    • 什么是镜像?
    • 什么是Docker?
    • 什么是仓库?
  • docker-compose
    • Docker Compose 锚点的用法
    • docker-compose 编排多服务
    • docker-compose 常用命令
    • docker-compose 部署jenkins
    • docker-compose安装mySql
    • docker-compose网络配置
    • docker-compose安装nginx
    • docker-compose安装redis
    • docker Compose 示例1
  • docker-hub
    • Docker Hub账号服务说明
  • install
    • CentOS Docker 安装
    • Debian Docker 安装
    • Docker 安装 Apache
    • Docker 安装 CentOS
    • Docker 安装 Elasticsearch
    • Docker 安装 GitLab
    • Docker 安装 Jenkins
    • Docker 安装 MongoDB
    • Docker 安装 MySQL
    • Docker 安装 Nginx
    • Docker 安装 Node.js
    • Docker 安装 PHP
    • Docker 安装 Portainer
    • Docker Python 官方镜像使用说明(TAG说明)
    • Docker 安装 Python
    • Docker 安装 Redis
    • Docker 安装 Tomcat
    • Docker 安装 Ubuntu
    • Docker 安装 Wordpress
    • Docker 国内镜像加速
    • MacOS Docker 安装
    • Ubuntu Docker 安装
    • Windows Docker 安装
  • manual
    • Docker attach 命令
    • Docker build 命令
    • Docker 清理命令
    • Docker命令大全
    • Docker commit 命令
    • docker-compose-run-command
    • Docker cp 命令
    • Docker create 命令
    • Docker diff 命令
    • Docker rm 命令
    • Docker exec 命令
    • Docker export 命令
    • Docker history 命令
    • Docker images 命令
    • Docker import 命令
    • Docker info 命令
    • Docker inspect 命令
    • Docker kill 命令
    • Docker load 命令
    • Docker login/logout 命令
    • Docker logs 命令
    • Docker network 命令
    • Docker pause/unpause 命令
    • Docker port 命令
    • Docker 常见问题
    • Docker ps 命令
    • Docker pull 命令
    • Docker push 命令
    • Docker rename 命令
    • docker-resources
    • Docker rm 命令
    • Docker rm 命令
    • Docker run 命令
    • Docker save 命令
    • Docker search 命令
    • Docker start/stop/restart 命令
    • Docker stats 命令
    • Docker tag 命令
    • Docker top 命令
    • Docker version 命令
    • Docker version 命令
    • Docker wait 命令
    • diff
      • Docker Compose 和 docker-compose 区别
      • Docker import、export 与 save、load 命令 区别
  • usage
    • Docker docker-compose 使用
    • Docker 容器连接
    • Docker 容器使用
    • Docker Dockerfile Ptyhon实战配置-1
    • Docker Dockerfile Ptyhon实战配置之多阶段构建-2
    • Docker Dockerfile
    • Docker 镜像使用
    • Docker Machine
    • Docker 仓库管理
    • Swarm集群管理
  • assets
    • mysql
      • my.cnf
Powered by GitBook
On this page
  • MySQL(5.7.19)安装(⭐️⭐️⭐️)
  • MySQL(5.7.19)安装高级写法(⭐️⭐️⭐⭐️)
  • MySql8安装(⭐️⭐️⭐️⭐️⭐️)

Was this helpful?

  1. advanced

Docker MySql进阶配置

MySQL(5.7.19)安装(⭐️⭐️⭐️)

最新官方MySQL(5.7.19)的docker镜像在创建时映射的配置文件目录有所不同,在此记录并分享给大家:

官方原文:

The MySQL startup configuration is specified in the file /etc/mysql/my.cnf, and that file in turn includes any files found in the /etc/mysql/conf.d directory that end with .cnf. Settings in files in this directory will augment and/or override settings in /etc/mysql/my.cnf. If you want to use a customized MySQL configuration, you can create your alternative configuration file in a directory on the host machine and then mount that directory location as /etc/mysql/conf.d inside the mysql container.

大概意思是说:

MySQL(5.7.19)的默认配置文件是 /etc/mysql/my.cnf 文件。如果想要自定义配置,建议向 /etc/mysql/conf.d 目录中创建 .cnf 文件。新建的文件可以任意起名,只要保证后缀名是 cnf 即可。新建的文件中的配置项可以覆盖 /etc/mysql/my.cnf 中的配置项。

具体操作:

首先需要创建将要映射到容器中的目录以及.cnf文件,然后再创建容器

mkdir -p docker_v/mysql/conf
cd docker_v/mysql/conf
touch my.cnf
docker run -p 3306:3306 --name mysql -v /opt/docker_v/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d imageID
4ec4f56455ea2d6d7251a05b7f308e314051fdad2c26bf3d0f27a9b0c0a71414

[!NOTE]

参数说明:

  • -p 3306:3306:**将容器的3306端口映射到主机的3306端口

  • -v /opt/docker_v/mysql/conf:/etc/mysql/conf.d:**将主机/opt/docker_v/mysql/conf目录挂载到容器的/etc/mysql/conf.d

  • -e MYSQL_ROOT_PASSWORD=123456:**初始化root用户的密码

  • -d imageID: 后台运行容器,imageID: mysql镜像ID

查看容器运行情况

# docker ps
CONTAINER ID IMAGE          COMMAND          ... PORTS                    NAMES
4ec4f56455ea c73c7527c03a  "docker-entrypoint.sh" ... 0.0.0.0:3306->3306/tcp   mysql

MySQL(5.7.19)安装高级写法(⭐️⭐️⭐⭐️)

下载MySQL5.7的docker镜像:

docker pull mysql:5.7

文件夹创建的过程忽略...

使用如下命令启动MySQL服务:

docker run -p 3306:3306 --name mysql \
-e MYSQL_ROOT_PASSWORD=root  \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-d mysql:5.7 
--lower-case-table-names=1 \

[!NOTE]

参数说明:

  • -p 3306:3306:将容器的3306端口映射到主机的3306端口

  • -e MYSQL_ROOT_PASSWORD=root: #初始化root用户的密码

  • -v /mydata/mysql/conf:/etc/mysql: #将配置文件夹挂在到主机

  • -v /mydata/mysql/log:/var/log/mysql: #将日志文件夹挂载到主机

  • -v /mydata/mysql/data:/var/lib/mysql/: #将数据文件夹挂载到主机

  • --lower-case-table-names=1 #忽略数据表名大小写

[!WARNING]

注意:

--lower-case-table-names=1

该属性只有初始化构建时才生效,my.cnf无法覆盖,如果没有设置的话,需要重新配置mysql才可以且记要备份挂载的数据文件,否则会死的很惨

进入运行MySQL的docker容器:

docker exec -it mysql /bin/bash

使用MySQL命令打开客户端:

mysql -uroot -proot --default-character-set=utf8

创建一个账号并授予远程登录权限,使得任何ip都能访问:

CREATE USER 'reader'@'%' IDENTIFIED WITH mysql_native_password BY 'Lzslov123!';
GRANT ALL PRIVILEGES ON *.* TO 'reader'@'%';
flush privileges;

MySql8安装(⭐️⭐️⭐️⭐️⭐️)

下载 、简单运行

# docker 中下载 mysql
docker pull mysql

# 查看mysql镜像
docker images mysql
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
mysql        8         3218b38490ce   22 months ago   516MB

#启动
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=your_pwd -d mysql

无需手动配置.cnf文件,启动时设置相应的参数和挂载文件

docker run -p 3306:3306 --name test_mysql \
--privileged=true \
-e MYSQL_ROOT_PASSWORD=root \
-v /mnt/data2/mysql/data:/var/lib/mysql \
-v /mnt/data2/mysql/log:/var/log/mysql \
-d mysql:8 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci \
--lower-case-table-names=1

[!NOTE]

参数说明: --privileged=true#启动时拥有root 相关的特权,注意位置不用放到 mysql:8 的后面 lower-case-table-names#忽略数据表明大小写, 只能首次初始化设置有效,如果你首次没有加此参数,第二次加的话会报错并且 my.cnf无法覆盖,解决方式:需要重新配置mysql,删除原有的数据库挂载目录且要备份挂载的数据文件,否则会死的很惨 -e MYSQL_ROOT_PASSWORD=<root_password> # 初始化root用户的密码

-v /mnt/data2/mysql/data:/var/lib/mysql# 挂载数据目录 -v /mnt/data2/mysql/log:/var/log/mysql# 挂载日志目录 --character-set-server=utf8mb4#设置服务器的字符集 --collation-server=utf8mb4_0900_ai_ci# 设置服务器的排序规则

手动配置.cnf文件,启动时必须先上传配置文件,创建相应挂载的数据文件、日志文件、配置文件

  • 设置忽略表名大小写

  • 关闭了binlog日志

  • 设置了一些相关的字符集

docker启动创建mysql容器

docker run -p 3306:3306 --name test_mysql \
--privileged=true \
-e MYSQL_ROOT_PASSWORD=root \
-v /mnt/data2/mysql/data:/var/lib/mysql \
-v /mnt/data2/mysql/conf.d:/etc/mysql/conf.d \
-v /mnt/data2/mysql/log:/var/log/mysql \
-d mysql:8

[!NOTE]

参数说明: --privileged=true 启动时拥有root 相关的特权,注意位置不用放到 mysql:8 的后面 lower-case-table-names 忽略数据表明大小写, 只能首次初始化设置有效,如果你首次没有加此参数,第二次加的话会报错并且 my.cnf无法覆盖,解决方式:需要重新配置mysql,删除原有的数据库挂载目录且要备份挂载的数据文件,否则会死的很惨 -e MYSQL_ROOT_PASSWORD=<root_password> # 初始化root用户的密码 -v /mnt/data2/mysql/data:/var/lib/mysql # 挂载数据目录 -v /mnt/data2/mysql/conf.d:/etc/mysql/conf.d # 挂载配置文件目录 -v /mnt/data2/mysql/log:/var/log/mysql # 挂载日志目录

docker同镜像安装多mysql服务

只需设置 容器名字 和 主机映射端口不同即可启动多个mysql服务,具体如下:

docker run -p 33306:3306 --name test_mysql \
--privileged=true \
-e MYSQL_ROOT_PASSWORD=root \
-v /mnt/data2/mysql/data:/var/lib/mysql \
-v /mnt/data2/mysql/conf.d:/etc/mysql/conf.d \
-v /mnt/data2/mysql/log:/var/log/mysql \
-d mysql:8

安装、参数详解略

初始化后修改root密码

#进入mysql容器
docker exec -it mysql bash

#登录mysql
mysql -uroot -p'root'

#查询用户相关信息
select user, host, authentication_string from user;

#修改 root 密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'youpassord';

exit;

#重新登录
mysql -uroot -p'youpassord'

授权用户远程登录的权限

#进入mysql容器
docker exec -it mysql bash

#登录mysql
mysql -u root -p'youpassord'

#授予root远程登录权限
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;

#添加一个新的用户,并授予远程登录的权限
CREATE USER 'tuonioooo'@'%' IDENTIFIED WITH mysql_native_password BY 'Lzslov123!';
GRANT ALL PRIVILEGES ON *.* TO 'tuonioooo'@'%';
flush privileges;
PreviousDocker 多阶段构建指南NextDocker network进阶配置

Last updated 4 months ago

Was this helpful?

my.cnf详细配置含有官网对应的索引目录
my.cnf初始配置