🎍目录
- [⛳ Docker 安装 MySQL](#⛳ Docker 安装 MySQL)
-
- [🚜 一、搜索 `mysql` , 查看版本](#🚜 一、搜索
mysql
, 查看版本) - [🎨 二、拉取`mysql`镜像](#🎨 二、拉取
mysql
镜像) - [👣 三、建立容器的挂载文件](#👣 三、建立容器的挂载文件)
- [🧰 四、创建`mysql`配置文件,`my.conf`](#🧰 四、创建
mysql
配置文件,my.conf
) - [🏭 五、根据镜像产生容器](#🏭 五、根据镜像产生容器)
- [🎁 六、远程连接](#🎁 六、远程连接)
- [⭐ 七、`mysql8.0`远程连接不上问题](#⭐ 七、
mysql8.0
远程连接不上问题) -
- [🔮 7.1、Navicat 测试连接](#🔮 7.1、Navicat 测试连接)
- [🏓 7.2、如果出现错误,我们需要授予远程登录权限](#🏓 7.2、如果出现错误,我们需要授予远程登录权限)
- [🏀 7.3、如果接着出现以下错误](#🏀 7.3、如果接着出现以下错误)
- [✨ 7.4、再次测试](#✨ 7.4、再次测试)
- [🚜 一、搜索 `mysql` , 查看版本](#🚜 一、搜索
⛳ Docker 安装 MySQL
🚜 一、搜索 mysql
, 查看版本
docker search mysql
🎨 二、拉取mysql
镜像
docker pull mysql:8.0
docker images
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3ZqrX1Ie-1692703936336)(https://gitee.com/galloping_pony/img-home/raw/master/image-20230822184632848.png)]
👣 三、建立容器的挂载文件
mkdir -p /mydata/mysql/conf
mkdir -p /mydata/mysql/data
mkdir -p /mydata/mysql/logs
🧰 四、创建mysql
配置文件,my.conf
touch /mydata/mysql/conf/my.cnf
在my.cnf
中添加如下配置:
shell
#my.cnf添加自己的配置
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
🏭 五、根据镜像产生容器
shell
docker run \
--restart=always \
--privileged=true \
-p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v /mydata/mysql/conf/conf.d:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=1234 \
-d mysql:8.0
参数说明:
--restart=always
: 开机启动,这里不做设置;--privileged=true
: 提升容器内权限,使容器内的root
真正拥有root
权限,否则容器内root
只是外部普通用户权限;-p
: 将主机的 3306 端口映射到容器中的 3306 端口(主机端口 :容器端口);--name
: 指定容器名;-v
:/mydata/mysql/conf/my.cnf:/etc/mysql/my.cnf
把主机当前文件my.cnf
挂在到容器中的/etc/mysql/my.cnf
文件,改mysql
的配置只需要改动本机的my.cnf
即可,其它同理;-e
: 设置环境,MYSQL_ROOT_PASSWORD=1234
初始化root
密码为 1234。-d
: 后台运行的镜像,mysql:tag ,并返回容器的 ID 或 名称;
在容器内默认不支持vim
,如果要在docker
容器内使用vim
,哪个容器要用就需要各自安装vim(yum install vim)
。所以对于所有涉及到数据和配置的,都不应该放在容器内部。应该用-v
来挂载外部数据目录。
🎁 六、远程连接
使用Navicat
客户端工具测试,连接成功:
至此,Docker
安装MySQL
完成。
⭐ 七、mysql8.0
远程连接不上问题
🔮 7.1、Navicat 测试连接
🏓 7.2、如果出现错误,我们需要授予远程登录权限
-
bash 进入容器:
docker exec -it mysql bash
-
登录:
mysql -uroot -p
-
找到
mysql
库中的user
表:use myql;``select user,host from user;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RTwdZ30Z-1692703936339)(https://gitee.com/galloping_pony/img-home/raw/master/image-20230821202528616.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UXGGGaqZ-1692703936340)(https://gitee.com/galloping_pony/img-home/raw/master/image-20230822095350835.png)]
-
授予权限:
grant all privileges on *.* to 'root'@'%';
%表示
host不受限制,如果是本机使用
localhost`- 网上很多是
GRANT ALL PRIVILEGES ON *.* 'root'@'%' identified by '密码' WITH GRANT OPTION;
,
有可能报错。
- 网上很多是
-
刷新权限:
flush privileges;
-
重新测试
🏀 7.3、如果接着出现以下错误
-
原因是mysql 8以上默认使用的是caching_sha2_password身份验证机制,之前用的是mysql_native_password。
-
从5.7升级到8.0不会改变现有用户的身份验证方式,但新用户会默认使用新的cacthing_sha2_password
-
解决方式:
修改用户的密码加密方式:
mysqlALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码';