一. 新增mysql compose文件

cd /usr/local
mkdir docker-file
vim mysql-docker-compse.yml
version : '3'
services:
  mysql:
    container_name: mysql
    image: mysql:8.0.25
    restart: always
    ports:
      - "3309:3306"
    volumes:
      - /mydata/mysql/data/db:/var/lib/mysql #数据文件挂载
      - /mydata/mysql/conf:/etc/mysql #配置文件挂载
      - /mydata/mysql/log:/var/log #日志文件挂载
      - /mydata/mysql/logs:/logs
      - /mydata/mysql/mysql-files:/var/lib/mysql-files/


二.执行docker compose文件

创建docker挂载文件夹

mkdir -p /mydata/mysql/conf
chmod -R 777 /mydata


进入挂载配置目录

cd /mydata/mysql/conf


新建挂载配置文件my.cnf

## 客户端参数配置
###########################################################################
[client]
# 字符集
default-character-set=utf8

## 服务端参数配置
###########################################################################
[mysqld]
# 最大连接数
max_connections=400
# 最大错误连接数
max_connect_errors=600
bind-address=0.0.0.0
# 若你的MySQL数据库主要运行在境外,请务必根据实际情况调整本参数
default_time_zone="+8:00"
# 数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
character-set-server=utf8mb4
# 数据库字符集对应一些排序等规则,注意要和character-set-server对应
collation-server=utf8mb4_general_ci
# 设置client连接mysql时的字符集,防止乱码
init_connect='SET NAMES utf8mb4'
# 是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names=1
# TIMESTAMP如果没有显示声明NOTNULL,允许NULL值
explicit_defaults_for_timestamp=true
# 记录系统时区
log_timestamps=SYSTEM
# 修改为密码认证为 mysql_native_password
default_authentication_plugin=mysql_native_password
# 跳过认证鉴权
skip-grant-tables


执行docker-compose

docker-compose -f mysql-docker-compose.yml up -d


连接mysql

# 查看docker容器
docker ps

# 进入容器
docker exec -it 02c5820c70bc /bin/bash

# 连接mysql
mysql -u root -p
(skip-grant-tables配置,没有密码)

# 清空root密码
update user set authentication_string='' where user='root'; 
flush privileges;

# 退出mysql, 删除/etc/my.cnf文件里的 skip-grant-tables ,重启 mysql 服务,再次登陆的时候是空密码登陆:
# 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY '123456';
flush privileges;

# 退出mysql
exit;

# 退出容器
exit;


MySQL报错"Host ' is not allowed to connect to this MySQL server" 解决办法

# 进入容器,连接mysql,选择mysql库,查询表
use mysql;
show tables;

# 查询账号host
select host from user;(user为root,host为localhost的话,说明mysql只允许本机连接)

# 设置host = % 任何程序可访问
update user set host ='%' where user ='root';

# 刷新权限
flush privileges;