docker启动mysql配置、持久化及cachin_sha2_password的解决方法

docker启动mysql配置、持久化及cachin_sha2_password的解决方法

准备

1.已经按照好docker
2.docker已拉取mysql docker pull mysql

启动mysql

docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql

-e:设置环境变量,此处MYSQL_ROOT_PASSWORD=root配置mysql的root用户的登陆密码为root

用客户端连接,会发现报错,可能是mysql8.0才会有的问题
在这里插入图片描述

出现cachin_sha2_password的解决办法:

终端输入:

#进入mysql的容器
docker exec -it mysql-test bash
#登录mysql,然后输入docker run时配置的密码(root)
mysql -u root -p

用下面的sql看有没有远程用户

use mysql
select host,user from user

在这里插入图片描述
如果看到有两个root用户,一个的host=localhost,另一个host=%,host=%代表这个用户是可以远程访问的

如果已经存在host=%的root用户,可以依次执行下面sql语句,就可以解决上面cachin_sha2_password的问题了,如果没有远程用户,可以滑到下面“创建用户”的标题,先进行创建用户

#修改密码规则
ALTER USER 'root'@'%' PASSWORD EXPIRE NEVER;
#更新用户密码,密码设置为root,也可以改成别的
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
#刷新权限
FLUSH PRIVILEGES; 

然后用root,密码root就可以顺利连接了
在这里插入图片描述

修改密码

若需要修改密码,可使用下面的sql

# IDENTIFIED BY 'password' -> 把密码改成password
ALTER USER 'root'@'%' IDENTIFIED BY 'password';

创建用户

如果上面没有远程的root用户,可以使用下面的sql

#添加远程登录用户root,密码为password
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
#授予全部权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

建立目录映射

有时候不小心容器关了,数据就没了,希望数据能够保存在硬盘上,进行持久化,就需要建立目录映射了

首先需要建立保存的文件夹,我这里保存在了/usr下(-p会自动创建父文件夹)

mkdir -p /usr/docker/mysql/config /usr/docker/mysql/data

然后启动命令添加个-v:
-v:主机和容器的目录映射关系,":"前为主机目录,之后为容器目录

docker run -itd --name mysql-test -p 3306:3306 -v /usr/docker/mysql/config:/etc/mysql/conf.d -v /usr/docker/mysql/data:/var/lib/mysql -m 500m -e MYSQL_ROOT_PASSWORD=root mysql

比上面的命令多了三个:
-v /usr/docker/mysql/config:/etc/mysql/conf.d ------挂载配置文件
-v /usr/docker/mysql/data:/var/lib/mysql -------------挂载数据文件
-m 500m -----------------------------------------------------限制内存使用大小

配置文件 /config 挂载到容器内 /etc/mysql/conf.d(挂载点存疑,不起作用???
数据文件 /data 挂载到容器内 /var/lib/mysql

首次启动还是需要像上面那样配置好,以后容器就算remove了,只要挂载了data目录,数据还会保留的