写点什么

docker setup mysql

作者:平凡人生
  • 2023-02-09
    河南
  • 本文字数:2654 字

    阅读完需:约 9 分钟

# mysql 5

docker run -d -p 3306:3306 --name mysql5.7 -v /data/mysql/data/log:/var/log/mysql -v /data/mysql/data/data:/var/lib/mysql -v /data/mysql/data/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root mysql:5.7

# mysql 8

docker run -d -p 3306:3306 --name mysql -v /data/docker/mysql/data/log:/var/log/mysql -v /data/docker/mysql/data/data:/var/lib/mysql -v /data/docker/mysql/data/conf:/etc/mysql -v /data/docker/mysql/data/mysql-files:/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=root mysql:latest

# mysql 8.x 分多行写法

docker run --name mysql8 -d -p 3306:3306 \

-v /data/mysql/data/log:/var/log/mysql \

-v /data/mysql/data/data:/var/lib/mysql \

-v /data/mysql/data/conf:/etc/mysql \

-v /data/mysql/data/mysql-files:/var/lib/mysql-files \

-e MYSQL_ROOT_PASSWORD=root \

mysql:latest


前置:

Docker 官网:https://www.docker.com/

MySql 官网:https://dev.mysql.com/downloads/mysql/

安装:

一、在 docker 官方镜像仓库中搜索需要安装的镜像,地址https://hub.docker.com/

1、搜索 mysql 镜像,如下图

2、执行如下命令拉取 mysql 镜像

# 此命令下载的是最新版

docker pull mysql

# 此命令下载的是指定版本的

docker pull mysql:5.7

分别执行后,拉取镜像结果如下:

二、运行 mysql 容器

1、执行运行容器命令

# mysql 5.x 使用此命令,挂载目录与 8.x 有所不同

docker run -d -p 3306:3306 --name mysql5.7 -v /devtools/mysqldata/log:/var/log/mysql -v /devtools/mysqldata/data:/var/lib/mysql -v /devtools/mysqldata/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root mysql:5.7

# mysql 8.x 使用此命令,挂载目录与 5.x 有所不同

docker run -d -p 3306:3306 --name mysql8 -v /devtools/mysqldata/log:/var/log/mysql -v /devtools/mysqldata/data:/var/lib/mysql -v /devtools/mysqldata/conf:/etc/mysql -v /devtools/mysqldata/mysql-files:/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=root mysql:8.0.29

# mysql 8.x 分多行写法

docker run --name mysql8 -d -p 3306:3306 \

-v /devtools/mysqldata/log:/var/log/mysql \

-v /devtools/mysqldata/data:/var/lib/mysql \

-v /devtools/mysqldata/conf:/etc/mysql \

-v /devtools/mysqldata/mysql-files:/var/lib/mysql-files \

-e MYSQL_ROOT_PASSWORD=root \

mysql:8.0.28

运行命令 参数解释:

docker run:运行一个容器实例

-d:该容器在后台运行,不挂断

-p 3306:3306:把 doker 容器里面的端口暴露到宿主机端口。左为宿主机端口、右为容器端口

--name mysql:容器运行后的名称,容器名称

-v /devtools/mysqldata/log:/var/log/mysql:将容器 /var/log/mysql 目录下的数据,备份到宿主机的 /devtools/mysqldata/log 目录下

-v /devtools/mysqldata/data:/var/lib/mysql:将容器 /var/lib/mysql 目录下的数据,备份到宿主机的 /devtools/mysqldata/data 目录下

-v /devtools/mysqldata/conf:/etc/mysql:将容器 /etc/mysql 目录下的数据,备份到宿主机的 /devtools/mysqldata/conf 目录下

-v /devtools/mysqldata/mysql-files:/var/lib/mysql-files:将容器 /var/lib/mysql-files 目录下的数据,备份到宿主机的 /devtools/mysqldata/mysql-files 目录下。(mysql 8.x 必须挂载此项,否则报错。5.x 版本不需要挂载此项)

-e MYSQL_ROOT_PASSWORD=root:设置当前 mysql 实例的用户密码为 root

mysql:5.7:需要运行的容器名称及版本号

说明:

做了上述 -v 参数命令备份后,就算当前的 mysql 容器被删了,那么再次启动 mysql 容器后,数据会自动从主机加载到容器中,数据不会丢失

挂载语法:

-v xxx:yyy:把宿主机的 xxx 目录挂载到容器中的 yyy 目录下

2、切换到上述备份的宿主机配置的 /devtools/mysqldata/conf 目录下

cd /devtools/mysqldata/conf

3、创建 my.conf 文件

touch my.conf

4、编辑刚才创建的 my.conf 文件,添加如下内容。在 docker 中安装的 mysql 容器默认字符集是 latin1,需要把存储引擎编码改成 utf8 防止乱码

[client]

default_character_set=utf8

[mysqld]

collation_server = utf8_general_ci

character_set_server = utf8

编辑完成后,按 Esc 输入 :wq! 保存并退出即可

5、查看编辑内容

cat my.conf

输出如下代表内容添加成功

6、完成上述步骤之后,重启 mysql 容器,使刚才的配置文件生效

# 重启 mysql 容器

docker restart mysql

#启动 mysql 容器

docker start mysql

# 停止 mysql 容器

docker stop mysql

7、查看容器是否启动成功

docker ps -a

成功启动,mysql 安装完成

三、测试连接

1、发现测试连接失败,进入容器连接测试

# 第一步执行,进入容器,docker exec -it 容器名称 bash

docker exec -it mysql bash

# 第二步执行,连接数据库,mysql -u 用户 -p 密码

mysql -uroot -proot

在容器中连接成功,说明 mysql 容器启动没问题,服务启动正常

2、既然 mysql 服务启动没问题,那可能就是当前用户没有开放所有访问权,将 root 开放所有访问权

# 第一步,给用户授所有访问特权,all 代表所有权限(CRUD),*分别代表库名和表名,%代表所有访问 IP

# mysql 5.x 授权方式

grant all privileges on *.* to 'root'@'%' identified by 'root';

grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;

# mysql 5.x 和 mysql 8.x 通用授权方式

grant all privileges on *.* to 'root'@'%' with grant option;

# 为 root 用户授予所有库和表的(CURD)权限

grant select, update, delete, insert on *.* to 'root'@'%' with grant option;

# 撤销 root 用户的所有权限

revoke all privileges from root;

# 第二步,刷新权限表

flush privileges;

3、切换为使用 mysql 数据库,查看被授权的用户信息

# 切换数据库

use mysql

# 查看用户权限信息

select user,host from user;

# 查看用户是否授权成功

show grants for 'root'@'%';

4、显示用户成功授权所有访问权限

5、重启 mysql 容器,测试连接成功

6、如果服务启动、用户授权都正常依然连接失败,那就是端口 3306 没有暴露,只需要在防火墙开放此端口号就 Ok 了

1、如果防火墙服务启动了,就用命令暴露端口

2、如果是云服务器,需要登录控制界面,找到防火墙暴露 3306 端口即可

————————————————

版权声明:本文为 CSDN 博主「拄杖忙学轻声码」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/hkl_Forever/article/details/125454597

用户头像

平凡人生

关注

一眼看透本质的人...... 2020-07-17 加入

花半秒钟就看透事物本质的人,和花一辈子都看不清事物本质的人,注定是截然不同的命运。

评论

发布
暂无评论
docker setup mysql_MySQL_平凡人生_InfoQ写作社区