1.拉取镜像

sudo docker pull mysql:8.0

2.创建mysql容器

在主目录下创建 mysql 目录:

mkdir -p /home/mysql/conf /home/mysql/log /home/mysql/data

使用以下命令创建 MySQL 8.0.20 的 Docker 容器:

docker run -id \
  -p 3307:3306 \
  --name mysql8 \
  --restart always \
  -v /home/mysql/conf:/etc/mysql/conf.d \
  -v /home/mysql/log:/var/log/mysql \
  -v /home/mysql/data:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=123456 \
  mysql:8.0.20 \
  --lower_case_table_names=1

参数说明

-p3307:3306:将容器的3306端口映射到宿主机的3306端口

(这里的3307是宿主机端口后期访问虚拟机ip的3307端口就能连接虚拟机的3306端口)

-v$PWD/conf:/etc/mysql/conf.d:将主机当前目录下的conf/目录挂载到容器的

/etc/mysql/conf.d目录。

-v$PWD/log:/var/log/mysql:将主机当前目录下的log目录挂载到容器的 /var/log/mysql日志目

-v $PWD/data:/var/lib/mysql:将主机当前目录下的data目录挂载到容器的/var/lib/mysql数据

目录

-eMYSQL ROOT PASSWORD=123456:初始化root用户的密码。

--lower_case_table_names:用于控制表名和数据库名在比较时是否应该忽略大小写。它的值可

以是0、1或2,分别表示:

。0:表名存储为给定的大小和比较是区分大小写的。

。1:表名存储在磁盘是小写的,但是比较的时候是不区分大小写

3. 查看当前启动的容器

docker ps

status为up的就是启动的

4. 查看是否已经开放3307端口,配置防火墙

 firewall-cmd --list-port

 # 如果没有开放,使用以下命令开放

 firewall-cmd --add-port=3307/tcp --permanent

 # 重新加载防火墙

 firewall-cmd --reload


5.测试远程连接

1.这里需要先去获取一下虚拟机ip

   ip addr

找到inet后面的就是ip地址

2.测试连接

指令连接

mysql -h 虚拟机ip -P 3307 -u root -p

navcait连接

6.调整mysql参数

 #
进入目录修改配置
cd /home/mysql/conf
 #
创建配置文件
vi my.cnf

写入以下内容(不要有中文,去掉注释)

   [mysqld]
   sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
   max_connections=1000

解释:

[mysqld]

# 修改 sql_mode 内容,目的在于去掉 ONLY_FULL_GROUP_BY sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZE RO,NO_ENGINE_SUBSTITUTION

# 调整 mysql 最大连接数 max_connections=1000

7.测试修改是否有用

重启MySQL容器

docker restart mysql8

show variables like 'sql_mode' 命令来查看对 应变量值是否正确,示例如如下图所示