Linux上面docker部署MySQL8遇到的坑汇总

步骤一:docker安装MySQL8

下载mysql8镜像

docker pull mysql:8

创建mysql容器

mkdir /root
mkdir /root/mysql
mkdir /root/mysql/log/
mkdir /root/mysql/conf/
mkdir /root/mysql/data/
touch /root/mysql/my.cnf
my.cnf添加如下内容:
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

docker 运行命令

docker run -di -p 3306:3306 --privileged=true -v /root/mysql/log:/var/log/mysql -v /root/mysql/data:/var/lib/mysql -v /root/mysql/conf/:/etc/mysql -v /root/mysql/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:8 --lower-case-table-names=1

命令解释

-e MYSQL_ROOT_PASSWORD=root     //mysql数据库密码设置为root
--privileged=true   //容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限
--lower-case-table-names=1  //忽略大小写,docker mysql默认区分大小写的(这个必须要加上,不然会报错)

步骤二:解决问题

这时候使用会报错,初始化的密码并没有用

docker 安装报错 ERROR 1045 (28000): Access denied for user 'mysql'@'localhost' (using password: YES)解决方法

解决:

1:vi my.cnf文件,加入下面的内容

[mysqld]
skip-grant-tables

重启mysql服务。即可以mysql -u用户名 -p  登录进去。(注:docker需进入docker容器)

进入docker容器命令:

docker exec -it 容器id /bin/bash

2:更新root密码

select user,authentication_string from user;
update user set authentication_string=''  where user='root';

3:注释掉my.cnf 文件中的 skip-grant-tables

重新启动MySQL,并进入MySQL执行如下命令

alter user'root'@'%' IDENTIFIED BY 'Mysql@123'; 
alter user'root'@'localhost' IDENTIFIED BY 'Mysql@123'; 

flush privileges;

至此就差不多了

如果发现用mysql客户端SQLyog连接,报 连不上。

MYSQL 8.0内新增加mysql_native_password函数,通过更改这个函数密码来进行远程连接。更改ROOT用户的native_password密码

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY'Mysql@123';

执行完成。既可以连接了。

查看变量值:

SHOW VARIABLES LIKE 'lower%'; 
 

上一篇:0.7 docker 安装mysql8


下一篇:京东强推 995 工作制,中国式变态加班何时休?