一、查看MySQL版本
(1)访问远程仓库
访问DokcerHub中的MySQL镜像库地址:https://hub.docker.com//mysql/tags
可以通过 Sort by 查看其他版本的MySQL,查看最新版本MySQL镜像(mysql:latest):https://hub.docker.com//mysql/tags?page=1&name=latest
(2)使用docker命令
docker search mysql
二、拉取mysql镜像
(1)拉取
docker pull mysql:latest
注意:tag是可选的,tag表示标签,多为软件的版本,默认是latest版本(最新版)
(2)验证
docker images
三、根据镜像创建并运行mysql容器
(1)运行
docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
参数说明:
–name:指定了容器的名称,方便之后进入容器的命令行。
-itd:其中,i是交互式操作,t是一个终端,d指的是在后台运行。
-p:指在本地生成一个随机端口,用来映射mysql的3306端口。
-e:设置环境变量。
MYSQL_ROOT_PASSWORD=root123456:指定了MySQL的root密码
-d mysql:指运行mysql镜像,设置容器在在后台一直运行。
(2)验证
docker ps
四、MySQL开启远程访问权限
(1)切换数据库
注意:默认应该就是这个,不切换也行,保险起见还是切换一下
use mysql;
(2)给root用户分配远程访问权限
GRANT ALL PRIVILEGES ON *.* TO root@'%' WITH GRANT OPTION;
参数说明:
GRANT:赋权命令
ALL PRIVILEGES:当前用户的所有权限
ON:介词
.:当前用户对所有数据库和表的相应操作权限
TO:介词
‘root’@’%’:权限赋给root用户,所有ip都能连接
WITH GRANT OPTION:允许级联赋权
(3)强制刷新权限
FLUSH PRIVILEGES;
五 navacat连接
此时测试连接会报错:
2059 - Authentication plugin ‘caching_sha2_password’ cannot be loaded:xxxx;
错误原因:
这是因为MySQL8之前密码加密规则为mysql_native_password,而 MySQL8 之后的加密规则为caching_sha2_password,也就是说,如果要用Navicat连接MySQL,其实只需要将密码规则改回 mysql_native_password 即可;
用如下办法解决。
(1)进入MySQL数据库
docker exec -it mysql-test /bin/bash mysql -uroot -p Enter password:123456
(2)更新加密方式
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
(3)更新本地连接root用户密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
(4)更新远程连接root用户密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
##(5) 刷新权限
FLUSH PRIVILEGES;