⛳ 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、再次测试

相关推荐
嘤嘤怪呆呆狗1 小时前
【开发问题记录】使用 Docker+Jenkins+Jenkins + gitee 实现自动化部署前端项目 CI/CD(centos7为例)
前端·vue.js·ci/cd·docker·gitee·自动化·jenkins
一只搬砖的猹1 小时前
cJson系列——常用cJson库函数
linux·前端·javascript·python·物联网·mysql·json
冰镇毛衣1 小时前
4.3 数据库HAVING语句
数据库·sql·mysql
Carry_NJ2 小时前
docker-compose样例
运维·docker·容器
zhenryx2 小时前
微涉全栈(react,axios,node,mysql)
前端·mysql·react.js
梁萌8 小时前
Linux安装Docker
linux·运维·docker·helloworld·容器化部署
翱翔-蓝天8 小时前
在 CentOS 系统上安装 ClickHouse
运维·docker·容器
ROCKY_8178 小时前
Mysql复习(二)
数据库·mysql·oracle
问道飞鱼11 小时前
【知识科普】认识正则表达式
数据库·mysql·正则表达式
HaiFan.11 小时前
SpringBoot 事务
java·数据库·spring boot·sql·mysql