1、问题排查

执行 docker container logs mysql8[你的容器名称],然后就能看到错误日志。

(1)mysqld: Error on realpath() on ‘/var/lib/mysql-files‘ (Error 2 - No such file or directory)
  原因:需要挂载 /var/lib/mysql-files 文件夹
  解决:在自己服务器某个位置建个 mysql-files 文件夹,然后挂载

(2)[ERROR] [MY-011087] Different lower_case_table_names settings for server ('1')
  原因:数据库初始化时lower_case_table_names的值和数据库启动时的值需要一样
  解决:
		先在docker容器外面的 my.cnf 挂载文件中添加 lower_case_table_names=1
		然后启动时添加 --lower_case_table_names=1
		再将docker容器外面的 data 挂载目录下的文件全部删掉
		最后重启mysql容器,命令如下。


2、可以启动的命令

docker run --name mysql8.0.27 -d \
-p 3306:3306 \
-v /mysql/v8.0.27/data:/var/lib/mysql \
-v /mysql/v8.0.27/conf/my.cnf:/etc/mysql/my.cnf \
-v /mysql/v8.0.27/logs:/var/log/mysql \
-v /mysql/v8.0.27/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=root \
--restart always \
--privileged=true \
mysql:8.0.27 --lower_case_table_names=1


3、my.cnf文件

[client]
# 客户端默认字符编码
default_character_set=utf8

[mysqld]
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/run/mysqld/mysqld.sock
datadir=/var/lib/mysql
secure-file-priv= NULL
lower_case_table_names=1
# 设置允许数据导出的目录,8 版本以后可能需要指定
# 若此处为 NULL,则 /var/docker_data/mysql/mysql-files 无需创建与挂载
secure-file-priv=/var/lib/mysql-files
# 服务端设置字符编码与规则
collation_server=utf8_general_ci
character_set_server=utf8
# 传输过程当中允许的最大数据包大小
max_allowed_packet=1024M
# 最大连接数
max_connections=1000
# 服务器关闭非交互(客户端)连接之前等待活动的秒数
wait_timeout=2147483
# 服务器关闭交互式(mysql终端)连接前等待活动的秒数
interactive_timeout=2147483
# 连接超时
connect_timeout=20
# 客户端线程最大数量
thread_cache_size=256
# 表名大小写敏感设置(mysql8之后仅初始化时有效):
# # 0 表名存储为给定的大小和比较是区分大小写的
# # 1 表名存储为小写的,但是比较的时候是不区分大小写
# # 2 表名存储为给定的大小写,但是比较的时候是小写的
# # Windows下默认值是 1,Mac OS X下默认值是 2
lower_case_table_names=1
# 设置默认时区
default_time-zone='+08:00'


# Custom config should go here
!includedir /etc/mysql/conf.d/