1、下载镜像文件

docker pull mysql:8.0

2、创建实例并启动

docker run -p 3306:3306 --name mysql \

-v /mydata/mysql/log:/var/log/mysql \

-v /mydata/mysql/data:/var/lib/mysql \

-v /mydata/mysql/conf:/etc/mysql \

-v /mydata/mysql/mysql-files:/var/lib/mysql-files \

-e MYSQL_ROOT_PASSWORD=123456 \

--restart=always -d mysql:8.0 \

--lower_case_table_names=1

参数说明

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

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

-v /mydata/mysql/data:/var/lib/mysql\:将mysql产生的数据挂载到主机

-v /mydata/mysql/conf:/etc/mysql\:将配置文件夹挂载到主机

-v /mydata/mysql/mysql-files:/var/lib/mysql-files \ 【mysql8.0需指定 /var/lib/mysql-files的外部目录】

-e MYSQL_ROOT_PASSWORD=root:初始化root用户的密码【mysql8.0不生效,可能需手动配置root用户的密码】

-d mysql:8.0:后台运行mysql

--lower_case_table_names=1:忽略大小写【linux下mysql默认区分大小写,mysql8及以上版本需在创建mysql时设置,否则无效】

(1)若启动失败,且报“Different lower_case_table_names settings for server ('1') and data dictionary ('0')”的错,可能是没有删除mysql旧数据导致,先删除虚拟机中mysql的旧数据再重新启动mysql。

(2)若启动失败,且报“mysqld: Can't read dir of '/etc/mysql/conf.d/' (OS errno 2 - No such file or directory)“以及”command was: mysqld --lower_case_table_names=1 --verbose --help --log-bin-index=/tmp/tmp.“的错误,可通过自定义mysql配置文件,再挂载到mysql容器对应目录(/etc/mysql/conf.d/my.cnf)的方式解决此问题,注意须删除之前因为启动失败而产生的mysql挂载的目录及数据;

参考:Docker-安装MySQL8.x,挂载本地数据目录和配置文件(命令详解) (已验证-可行)

docker 安装mysql mysqld: Can‘t read dir of ‘/etc/my.cnf.d‘ (OS errno 2 - No such file or directory) 【待验证】

3、配置mysql8.0远程连接,修改root密码

(1)使用命令登录mysql:

mysql -uroot -p(此命令需要单独输入密码) 或者是mysql -uroot -pXXX 直接跟密码均可

(2)转到mysql 库

use mysql;

(3)查询当前用户可登录的客户端情况:从mysql 库的user表查询

select user,authentication_string,host from user;

可以看到root用户是只允许在localhost登录的,因此我们需要更改他

(4)更新root用户可登录的客户端情况:

update user set host='%' where user='root' and host='localhost' limit 1;

(5)此时root可能没有设置密码(需自行检验),设置root用户密码:

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

flush privileges; (刷新权限表,使密码生效)

(6)检查忽略大小写配置是否成功:

SHOW GLOBAL VARIABLES LIKE '%lower_case%'

(若 lower_case_file_system 为ON表示大小写不敏感,为OFF表示大小写敏感;

lower_case_table_names 为1表示mysql会先把表名转为小写,再执行操作,为0表示mysql会根据表名直接操作(大小写不敏感))。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐