⛳ Docker 安装 MySQL

🎍目录

  • [⛳ Docker 安装 MySQL](#⛳ Docker 安装 MySQL)
    • [🚜 一、搜索 `mysql` , 查看版本](#🚜 一、搜索 mysql , 查看版本)
    • [🎨 二、拉取`mysql`镜像](#🎨 二、拉取mysql镜像)
    • [👣 三、建立容器的挂载文件](#👣 三、建立容器的挂载文件)
    • [🧰 四、创建`mysql`配置文件,`my.conf`](#🧰 四、创建mysql配置文件,my.conf)
    • [🏭 五、根据镜像产生容器](#🏭 五、根据镜像产生容器)
    • [🎁 六、远程连接](#🎁 六、远程连接)
    • [⭐ 七、`mysql8.0`远程连接不上问题](#⭐ 七、mysql8.0远程连接不上问题)
      • [🔮 7.1、Navicat 测试连接](#🔮 7.1、Navicat 测试连接)
      • [🏓 7.2、如果出现错误,我们需要授予远程登录权限](#🏓 7.2、如果出现错误,我们需要授予远程登录权限)
      • [🏀 7.3、如果接着出现以下错误](#🏀 7.3、如果接着出现以下错误)
      • [✨ 7.4、再次测试](#✨ 7.4、再次测试)

⛳ Docker 安装 MySQL

🚜 一、搜索 mysql , 查看版本

docker search mysql

🎨 二、拉取mysql镜像

  • docker pull mysql:8.0
  • docker images

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3ZqrX1Ie-1692703936336)(https://gitee.com/galloping_pony/img-home/raw/master/image-20230822184632848.png)

👣 三、建立容器的挂载文件

  • mkdir -p /mydata/mysql/conf
  • mkdir -p /mydata/mysql/data
  • mkdir -p /mydata/mysql/logs

🧰 四、创建mysql配置文件,my.conf

touch /mydata/mysql/conf/my.cnf

my.cnf中添加如下配置:

shell 复制代码
#my.cnf添加自己的配置
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password 

🏭 五、根据镜像产生容器

shell 复制代码
docker run \
--restart=always \
--privileged=true \
-p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v /mydata/mysql/conf/conf.d:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=1234 \
-d mysql:8.0

参数说明:

  • --restart=always : 开机启动,这里不做设置;
  • --privileged=true : 提升容器内权限,使容器内的root真正拥有root权限,否则容器内root只是外部普通用户权限;
  • -p : 将主机的 3306 端口映射到容器中的 3306 端口(主机端口 :容器端口);
  • --name : 指定容器名;
  • -v : /mydata/mysql/conf/my.cnf:/etc/mysql/my.cnf 把主机当前文件my.cnf挂在到容器中的/etc/mysql/my.cnf文件,改mysql的配置只需要改动本机的my.cnf即可,其它同理;
  • -e : 设置环境,MYSQL_ROOT_PASSWORD=1234 初始化root密码为 1234。
  • -d : 后台运行的镜像,mysql:tag ,并返回容器的 ID 或 名称;

​ 在容器内默认不支持vim,如果要在docker容器内使用vim,哪个容器要用就需要各自安装vim(yum install vim)。所以对于所有涉及到数据和配置的,都不应该放在容器内部。应该用-v来挂载外部数据目录。

🎁 六、远程连接

使用Navicat客户端工具测试,连接成功:

至此,Docker安装MySQL完成。

⭐ 七、mysql8.0远程连接不上问题

🔮 7.1、Navicat 测试连接

🏓 7.2、如果出现错误,我们需要授予远程登录权限

  1. bash 进入容器:docker exec -it mysql bash

    1. 登录:mysql -uroot -p

    2. 找到mysql库中的user表:use myql;``select user,host from user;

      外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RTwdZ30Z-1692703936339)(https://gitee.com/galloping_pony/img-home/raw/master/image-20230821202528616.png)\]\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UXGGGaqZ-1692703936340)(https://gitee.com/galloping_pony/img-home/raw/master/image-20230822095350835.png)

    3. 授予权限:grant all privileges on *.* to 'root'@'%';%表示host不受限制,如果是本机使用localhost`

      • 网上很多是GRANT ALL PRIVILEGES ON *.* 'root'@'%' identified by '密码' WITH GRANT OPTION;
        有可能报错。
    4. 刷新权限:flush privileges;

    5. 重新测试

🏀 7.3、如果接着出现以下错误

  1. 原因是mysql 8以上默认使用的是caching_sha2_password身份验证机制,之前用的是mysql_native_password。

  2. 从5.7升级到8.0不会改变现有用户的身份验证方式,但新用户会默认使用新的cacthing_sha2_password

  3. 解决方式:

    修改用户的密码加密方式:

    mysql 复制代码
    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码';

✨ 7.4、再次测试

相关推荐
风落无尘3 小时前
Stable Diffusion WebUI & ComfyUI 完整安装教程:官方部署+一键整合包+Docker容器化(2026最新)
docker·容器·stable diffusion
廿一夏4 小时前
MySql存储引擎与索引
数据库·sql·mysql
敲个大西瓜7 小时前
Java项目常用数据归档方式
mysql
CodeMartain8 小时前
Dify Windows 原生部署(无 Docker、纯本地)
运维·docker·容器
kyriewen9 小时前
面试官让我查各部门工资最高的员工,我用AI三秒写出窗口函数,他愣了
后端·mysql·面试
小码工作室9 小时前
使用 HAVING 进行 MySQL 集合筛选
mysql
罗超驿9 小时前
18.事务的隔离性和隔离级别:MySQL面试高频考点全解析
数据库·mysql·面试
llrraa201010 小时前
配置docker国内镜像源
运维·docker·容器
小江的记录本10 小时前
【Java基础】Java 8-21新特性:JDK21 LTS:虚拟线程、模式匹配switch、结构化并发、序列集合(附《思维导图》+《面试高频考点清单》)
java·数据库·python·mysql·spring·面试·maven
木心术110 小时前
Windows系统下MySQL与AI工具集成方案:数据存储与调用实践
人工智能·windows·mysql