本文介绍: 默认的鉴权方式我们修改mysql_native_password,不然的话连接报错。虽然 docker 安装 mysql 不是一个很好的方案,但是为了个人使用方便,使用 docker 安装 mysql 还是什么问题的。所以,我们安装之前需要电脑可以联网,不然我们这种方式安装不了的。当然,你也可以自行下载mysql镜像然后通过 docker 安装,不过这不在本文的讨论范围。此时我们使用mysql客户端连接服务器失败的,因为默认root具有远程连接权限。此时我们需要执行六步

目录

前言

一、拉取镜像

 二、查看镜像

 三、运行镜像

四、查看正在运行的容器

五、查看容器内部

六、修改mysql配置

七、重启mysql服务,使其配置生效

八、设置docker启动时启动mysql

九、重启mysql

十、授权远程访问

10.1 进入容器内部

 10.2 登陆mysql

10.3 选择数据库

10.4 查看用户连接情况

10.5 修改密码认证方式

 10.6 退出容器


前言

虽然 docker 安装 mysql 不是一个很好的方案,但是为了个人使用方便,使用 docker 安装 mysql 还是什么问题的。

本文为了方便,我们直接通过yum方式安装。所以,我们在安装之前需要电脑可以联网,不然我们这种方式是安装不了的。

当然,你也可以自行下载mysql镜像然后通过 docker 安装,不过这不在本文的讨论范围

一、拉取镜像

# 拉取镜像
docker pull mysql

# 或者
docker pull mysql:latest

# 以上两个命令是一致的,默认拉取就是 latest 版本的

# 我们还可以用下面的命令查看可用版本docker search mysql

 二、查看镜像

使用以下命令查看是否已安装了 mysql镜像

docker images

 三、运行镜像

docker run -p 3306:3306 --name mysql --restart=always --privileged=true 
-v /usr/local/mysql/log:/var/log/mysql 
-v /usr/local/mysql/data:/var/lib/mysql 
-v /usr/local/mysql/conf:/etc/mysql 
-v /etc/localtime:/etc/localtime:ro 
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

命令解决

 –p 3306:3306:指定宿主机端口容器端口映射关系

name mysql:创建容器名称

restart=always:总是跟随docker启动

privileged=true获取宿主机root权限
v /usr/local/mysql/log:/var/log/mysql:映射日志目录宿主机:容器
v /usr/local/mysql/data:/var/lib/mysql:映射数据目录宿主机:容器
v /usr/local/mysql/conf:/etc/mysql:映射配置目录,宿主机:容器
v /etc/localtime:/etc/localtime:ro:让容器的时钟与宿主机时钟同步,避免时区的问题,roread only的意思,就是只读
-e MYSQL_ROOT_PASSWORD=123456:指定mysql环境变量,root用户密码为123456

d mysql:latest后台运行mysql容器,版本latest

或者使用下面的命令

docker run --name mysql --restart=always --privileged=true 
-v /usr/local/mysql/data:/var/lib/mysql 
-v /usr/local/mysql/conf.d:/etc/mysql/conf.d 
-v /etc/localtime:/etc/localtime:ro 
-e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:latest

 四、查看正在运行的容器

# 查看正在运行的容器
docker ps
# 查看所有的docker容器
docker ps -a

这个时候如果显示的是up状态,那就是启动成功了。如果是restarting说明是有问题的。我们可以查看日志:

docker logs -f mysql

 可能发现

Failed to access directory for —securefilepriv. Please make sure that dir

 此时如果我们执行第五步也会报错

Error response from daemon: Container xxx is restarting, wait until the cont。。。

此时我们需要执行六步。 

五、查看容器内部

docker exec -it mysql /bin/bash

六、修改mysql配置

 创建mysql配置文件:my.cnf

cd /usr/local/mysql

ll

cd conf

vi my.cnf

在 my.cnf 文件写入如下内容

[client]

defaultcharacter-set=utf8mb4

[mysql]

defaultcharacter-set=utf8mb4

[mysqld]

# 设置东八区时区
defaulttime_zone = ‘+8:00’

# 设置密码验证规则default_authentication_plugin参数已被废弃

# 改为authentication_policy

#default_authentication_plugin=mysql_native_password
authentication_policy=mysql_native_password

# 限制导入导出数据目录
# 为空,不限制导入到处的数据目录;
# 指定目录,必须从该目录导入到处,且MySQL不会自动创建该目录;
# 为NULL,禁止导入导出功能
#secure_file_priv=/var/lib/mysql
secure_file_priv=

init_connect=’SET collation_connection = utf8mb4_0900_ai_ci

init_connect=’SET NAMES utf8mb4′

character-set-server=utf8mb4

collation-server=utf8mb4_0900_ai_ci

skipcharacter-set-clienthandshake

skipnameresolve

默认的鉴权方式,我们修改为mysql_native_password,不然的话连接报错。因为在mysql8以后的默认加密方式改变了,由 mysql_native_password 改为caching_sha2_password。这种加密凡是在客户端无法访问客户端支持的是mysql_native_password 。我们先进行第七步。

七、重启mysql服务,使其配置生效

docker restart mysql

八、设置docker启动时启动mysql

docker update mysql --restart=always

九、重启mysql

docker restart mysql

十、授权远程访问

不进行授权直接登陆的话会报错的,如图

错误内容

Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
  Connection refused: connect
  Connection refused: connect

10.1 进入容器内部

docker exec -it mysql /bin/bash

 10.2 登陆mysql

mysql -u root -p

 此时我们使用mysql客户端连接服务器失败的,因为默认的root不具有远程连接的权限。

 上面的密码不要输入,直接回车进入

10.3 选择数据库

show databases;
use mysql;

不要忘记最后的分号。

10.4 查看用户连接情况

select host, user, plugin,  authentication_string, password_expired from user;

我们看到root用户只有localhost的连接权限。

10.5 修改密码认证方式

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

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

-- 刷新权限
FLUSH PRIVILEGES;

 10.6 退出容器

exit

输入exit退出mysql,再输入exit退出容器。

此时,我们通过客户端工具就可以连接mysql了。

原文地址:https://blog.csdn.net/qq_42971035/article/details/127831101

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_39568.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注