Linux使用docker搭建Mysql

(一)引言

MySQL是开源数据库。凭借其可靠性、易用性和性能,MySQL已成为Web应用程序的数据库优先选择。aa5694c14a8441843a968b329db571b6.png

 (二)docker搭建Mysql

1、查看可用的 MySQL 版本

访问MySQL镜像库地址:Docker Hub 。

  此外,我们还可以用 docker search mysql 命令来查看可用版本:

[root@icoolkj ~]# docker search mysql
NAME                           DESCRIPTION                         STARS     OFFICIAL   AUTOMATED
mysql                          MySQL is a widely used, open-source relation…   12687     [OK]       
mariadb                        MariaDB Server is a high performing open sou…   4864      [OK]       
percona                        Percona Server is a fork of the MySQL relati…   579       [OK]                 
...
[root@icoolkj ~]# 

2、拉取 MySQL 镜像

这里拉取官方的最新版本的镜像:

[root@icoolkj ~]# docker pull mysql:latest

  3、查看本地镜像

使用以下命令来查看本地镜像:

[root@icoolkj ~]# docker images
REPOSITORY        TAG       IMAGE ID       CREATED       SIZE
mysql             latest    65b636d5542b   8 days ago    524MB
sonatype/nexus3   latest    aab1398bb647   2 weeks ago   705MB
[root@icoolkj ~]# 

REPOSITORY:来自哪一个仓库,比如ubuntu仓库

TAG:镜像的标签信息,最新的

IMAGE ID:镜像的id号:这个是唯一的

CREATED:镜像创建时间

SIZE:镜像大小

在上图中可以看到我们已经拉取最新版本(latest)的 mysql 镜像。

 4、运行容器(建立目录映射)

docker run -p 3306:3306 --name mysql-test \
-v /usr/local/docker/mysql/mysql-files:/var/lib/mysql-files \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:latest

39549ed6de9c3a79455b92eed833db2f.png 5、安装成功

通过docker ps命令查看是否安装成功:

[root@icoolkj ~]# docker ps

 可以看到容器ID,容器的源镜像,启动命令,创建时间,状态,端口映射信息,容器名字

(三)连接mysql

1、进入docker本地连接mysql服务

## 进入mysql容器
[root@icoolkj ~]# docker exec -it ecc75bf3bd65 /bin/bash
## 访问mysql服务
root@ecc75bf3bd65:/# mysql -h localhost -u root -p123456

 2、使用远程连接软件连接mysql服务

ed1d59c01aabd15adb55d04fa97951f9.png

  (四)问题处理

1、问题一

a)问题描述

在使用Docker部署 mysql8.0 并登录用户的时候报错:

Access denied for user 'root'@'localhost' (using password: YES)

fc379814b7275ac56fbc082b80c303ea.png

b)​​​​问题分析处理

Access denied : 拒接访问数据库

using password: YES : YES 表示密码输入正确 / 当NO 时表示密码错误

其中最大的原因就是因为密码输入不正确,请认真检查输入的密码是否与容器启动时设置的是否一致。

如果确认明文密码是正确的,请参考如下解决:

通过Docker启动命令设置了root的密码(MYSQL_ROOT_PASSWORD=123456),但是登录的时候一直显示错误(Access denied for user ‘root’@‘localhost’ (using password: YES))。

如果确认明文密码是正确的,原因有可能是mysql8.0使用的默认加密插件是 caching_sha2_password 而非5.6的 mysql_native_password,当你在控制台使用明文密码登录的时候走的是mysql_native_password加密,而数据库记录的是caching_sha2_password加密后的密码,匹配自然不正确。

#my.cnf 文件的存放路径根据自己需求自定义即可
vim /usr/local/docker/mysql/conf/my.cnf
#编辑内容 在vi编辑器中输入以下内容
[mysqld]
default_authentication_plugin=mysql_native_password
#保存并退出vi编辑器
#停止早期mysql容器,重新启动

docker run -p 3306:3306 --name mysql-test \
-v /usr/local/docker/mysql/mysql-files:/var/lib/mysql-files \
-v /usr/local/docker/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:latest

2、问题二

a)问题描述

容器运行正常,本地客户端可以访问,但是远程无法访问到MySQL。

 b)问题分析处理

需要进入docker本地客户端设置远程访问账号。

## 进入mysql容器
[root@icoolkj ~]# docker  exec -it d5223c1f0afc bash
## 进入mysql
root@d5223c1f0afc:/# mysql -uroot
## 打开mysql库
mysql> use mysql
## 允许使用root账户连接的ip为任意
mysql> update user set host='%' where user='root';
## 刷新权限
mysql> flush privileges;
mysql> 
## 如果前面步骤没有报错且刷新权限了还是不可以远程连接,就重新启动数据库。

3、问题三

a)问题描述

进入Navicat连接MySQL出现下面的2059界面。

 b)问题分析处理

mysql8之前版本中加密规则为mysql_native_password,mysql8以后的加密规则为caching_sha2_password,将mysql用户登录加密规则修改为mysql_native_password即可!

mysql> use mysql;
mysql>  ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
mysql> flush privileges;

  a1297f0e9fa9e7934a48c843ef0c6371.png


版权声明:本文为qq_29768197原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。