一. 新增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;