• Docker安装MySql教程步骤


    前置:
    Docker官网:https://www.docker.com/
    MySql官网:https://dev.mysql.com/downloads/mysql/

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

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

    1. # 此命令下载的是最新版
    2. docker pull mysql
    3. # 此命令下载的是指定版本的
    4. docker pull mysql:5.7

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

    二、运行 mysql 容器

    1、执行运行容器命令

    1. # mysql 5.x使用此命令,挂载目录与8.x有所不同
    2. 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
    3. # mysql 8.x使用此命令,挂载目录与5.x有所不同
    4. 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

    运行命令 参数解释:

    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 容器后,数据会自动从主机加载到容器中,数据不会丢失

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

    cd /devtools/mysqldata/conf

    3、创建 my.conf 文件

    touch my.cnf

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

    1. [client]
    2. default_character_set=utf8
    3. [mysqld]
    4. collation_server = utf8_general_ci
    5. character_set_server = utf8

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

    5、查看编辑内容

    cat my.conf

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

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

    1. # 重启mysql容器
    2. docker restart mysql
    3. #启动mysql容器
    4. docker start mysql
    5. # 停止mysql容器
    6. docker stop mysql

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

    docker ps

    成功启动,mysql安装完成

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

    1. # 第一步执行,进入容器,docker exec -it 容器名称 bash
    2. docker exec -it mysql bash
    3. # 第二步执行,连接数据库,mysql -u用户 -p密码
    4. mysql -uroot -proot

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

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

    1. # 第一步,给用户授所有访问特权,all代表所有权限(CRUD),*分别代表库名和表名,%代表所有访问IP
    2. # mysql 5.x 授权方式
    3. grant all privileges on *.* to 'root'@'%' identified by 'root';
    4. grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
    5. # mysql 5.x 和 mysql 8.x 通用授权方式
    6. grant all privileges on *.* to 'root'@'%' with grant option;
    7. # 为root用户授予所有库和表的(CURD)权限
    8. grant select, update, delete, insert on *.* to 'root'@'%' with grant option;
    9. # 撤销root用户的所有权限
    10. revoke all privileges from root;
    11. # 第二步,刷新权限表
    12. flush privileges;

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

    1. # 切换数据库
    2. use mysql
    3. # 查看用户权限信息
    4. select user,host from user;
    5. # 查看用户是否授权成功
    6. show grants for 'root'@'%';

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

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

    6、如果服务启动、用户授权都正常依然连接失败,那就是端口 3306 没有暴露,只需要在防火墙开放此端口号就Ok了
    1、如果防火墙服务启动了,就用命令暴露端口
    2、如果是云服务器,需要登录控制界面,找到防火墙暴露 3306 端口即可
    ​​​​​​​

  • 相关阅读:
    河道采砂执法监管信息化平台:科技赋能,智慧监管
    【C++历险记】面向对象|菱形继承及菱形虚拟继承
    基于Java web的校园滴滴代驾管理系统 毕业设计-附源码260839
    [附源码]java毕业设计火车票预订系统论文2022
    Sublime Text 下载及配置
    fastapi定时任务,增量构建可转债交易数据入mongo和qlib
    【网页前端】CSS常用布局之定位
    Loss模块
    【免费Web系列】大家好 ,今天是Web课程的第十八天点赞收藏关注,持续更新作品 !
    前端架构师之10_JavaScript_DOM
  • 原文地址:https://blog.csdn.net/hkl_Forever/article/details/125454597