Docker安装MySQL

一:安装

   1:拉取镜像:

      docker search mysql

docker pull mysql

拉取成功后验证

docker images

2:创建并设置宿主机mysql配置文件目录和数据文件目录:

mkdir -p  /usr/mysql/data  /usr/mysql/conf /usr/mysql/logs

进入创建的 conf目录

vi my.cnf

添加如下内容

[client] 

port=3306 

default-character-set=utf8

[mysql]

default-character-set=utf8

[mysqld]

character_set_server=utf8

        secure_file_priv=/var/lib/mysql

               log_bin_trust_function_creators=1

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

配置大小写不敏感

lower_case_table_names=1

 

为创建的目录授权

cd usr

chmod -R 777 mysql

 

cd /usr/ mysql/conf

chmod 644 my.cnf  修改权限为只有root用户可以读可写

 

 

 

   3:创建并启动一个MySQL容器

docker run -it --name ocpmysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --privileged=true -v /usr/mysql/conf/my.cnf:/etc/mysql/my.cnf -v /usr/ mysql/data:/var/lib/mysql -v /usr/mysql/logs:/var/log/mysql -d --restart=always mysql

 

参数解释

-- name  为你运行的镜像命名

-p 映射端口  虚拟机端口 : docker端口 

-e 为mysql设置密码

-- privileged=true 为mysql获取root权限

-v 挂载目录/文件   虚拟机目录/文件:docker目录/文件

-d 守护进程后台运行

-it 启动并运行

--restart=always  在docker服务重启后,自动重启mysql服务,也可以吧docker 服务作为开机启动.这样mysql就可以跟着开机启动了

mysql  镜像名称

    

查看容器运行状态:

docker ps -s

可以看到容器的简写ID,容器的源镜像,创建时间,状态,端口映射信息,容器名字等。

4:配置远程连接

      进入容器:

docker exec -it zhhqmysql /bin/bash   (绿色部分为容器名称)

                   mysql -uroot -p

提示输入密码直接回车

use mysql;

select host from user;

update user set host ="%" where user ="root";

重启容器

5:连接测试

      使用Navicat进行连接

ip为docker主机的ip

报错如下信息:

注意  出现  2059 错误  只需要 修改   加密规则就好(

原来,MySql 8.0.11 换了新的身份验证插件(caching_sha2_password), 原来的身份验证插件为(mysql_native_password)。而客户端工具Navicat Premium12 中找不到新的身份验证插件(caching_sha2_password),对此,我们将mysql用户使用的  登录密码加密规则  还原成  mysql_native_password,即可登陆成功。)

 

进入容器:

docker exec -it zhhqmysql /bin/bash   (绿色部分为容器名称)

mysql -uroot -p

输入密码处直接回车

GRANT ALL PRIVILEGES ON *.* TO "root"@"%"WITH GRANT OPTION; 

FLUSH PRIVILEGES;

ALTER USER "root"@"%" IDENTIFIED BY "password" PASSWORD EXPIRE NEVER;

ALTER USER "root"@"%" IDENTIFIED WITH mysql_native_password BY "Fsd101202303";

flush privileges;

现在就可以连接成功了