• Docker安装MySQL教程


    虽然 docker 安装 mysql 不是一个很好的方案,但是为了个人使用方便,使用 docker 安装 mysql 还是没什么问题的。

    本文为了方便,我们直接通过yum方式安装。所以,我们在安装之前需要电脑可以联网,不然我们这种方式是安装不了的。

    当然,你也可以自行下载mysql镜像,然后再通过 docker 安装,不过这不在本文的讨论范围。

    一、拉取镜像

    docker pull mysql
     
    # 或者
    docker pull mysql:latest
     
    # 以上两个命令是一致的,默认拉取的就是 latest 版本的
     
    # 我们还可以用下面的命令来查看可用版本:
    docker search mysql
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    二、查看镜像

    docker images
    
    • 1

    三、运行镜像

    docker run -p 3306:3306 --name mysql --restart=always --privileged=true \
    -v /usr/local/mysql/log:/var/log/mysql \
    -v /usr/local/mysql/data:/var/lib/mysql \
    -v /usr/local/mysql/conf:/etc/mysql:rw\
    -v /etc/localtime:/etc/localtime:ro \
    -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    命令解释:

     -p 3306:3306:指定宿主机端口与容器端口映射关系
    
    --name mysql:创建的容器名称
    
    --restart=always:总是跟随docker启动
    
    --privileged=true:获取宿主机root权限
    -v /usr/local/mysql/log:/var/log/mysql:映射日志目录,宿主机:容器
    -v /usr/local/mysql/data:/var/lib/mysql:映射数据目录,宿主机:容器
    -v /usr/local/mysql/conf:/etc/mysql:映射配置目录,宿主机:容器
    -v /etc/localtime:/etc/localtime:ro:让容器的时钟与宿主机时钟同步,避免时区的问题,ro是read only的意思,就是只读。
    -e MYSQL_ROOT_PASSWORD=123456:指定mysql环境变量,root用户的密码为123456
    
    -d mysql:latest:后台运行mysql容器,版本是latest。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    四、查看正在运行的容器

    # 查看正在运行的容器
    docker ps
    # 查看所有的docker容器
    docker ps -a
    
    • 1
    • 2
    • 3
    • 4

    这个时候如果显示的是up状态,那就是启动成功了。如果是restarting,说明是有问题的。我们可以查看日志

    docker logs -f mysql
    可能会发现:

    Failed to access directory for --secure-file-priv. Please make sure that dir

    此时如果我们执行第五步也会报错:

    Error response from daemon: Container xxx is restarting, wait until the cont。。。

    此时我们需要执行第六步。

    如果六、七步骤走完还重启报错
    则需要在 /etc/mysql下创建mysql配置文件
    如果不存在mysql 目录则用

    在这里插入图片描述
    则直是由于mysql的配置文件不可读
    主要是挂在配置文件的时候出错了,需要我们把mysql容器的配置文件复制到我们挂在的宿主机的目录下
    在这里插入图片描述
    使用命令docker cp 命令进行赋值

    docker cp mysql:/etc/mysql /usr/local/conf
    
    • 1

    /usr/local/mysql/conf/cnf文件是从mysql容器中复制过来的
    修改启动命令让

    docker run -p 3306:3306 --name mysql --restart=always --privileged=true \
    -v /usr/local/mysql/log:/var/log/mysql \
    -v /usr/local/mysql/data:/var/lib/mysql \
    -v /usr/local/mysql/conf:/etc/mysql/conf.d:rw \
    -v /etc/localtime:/etc/localtime:ro \
    -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    六、修改mysql配置

    在宿主机 创建mysql配置文件:my.cnf 或者直接从mysql容器的/etc/mysql目录下复制

    cd /usr/local/conf
     
    ll
     
    cd conf
     
    vi cnf
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在 cnf 文件中 写入如下内容:

    [client]
    
    default-character-set=utf8mb4
    
    [mysql]
    
    default-character-set=utf8mb4
    
    [mysqld]
    
    # 设置东八区时区
    default-time_zone = '+8:00'
    
    # 设置密码验证规则,default_authentication_plugin参数已被废弃
    
    # 改为authentication_policy
    
    #default_authentication_plugin=mysql_native_password
    authentication_policy=mysql_native_password
    
    # 限制导入和导出的数据目录
    # 为空,不限制导入到处的数据目录;
    # 指定目录,必须从该目录导入到处,且MySQL不会自动创建该目录;
    # 为NULL,禁止导入与导出功能
    #secure_file_priv=/var/lib/mysql
    secure_file_priv=
    
    init_connect='SET collation_connection = utf8mb4_0900_ai_ci'
    
    init_connect='SET NAMES utf8mb4'
    
    character-set-server=utf8mb4
    
    collation-server=utf8mb4_0900_ai_ci
    
    skip-character-set-client-handshake
    
    skip-name-resolve
    
    默认的鉴权方式,我们修改为mysql_native_password,不然的话连接会报错。因为在mysql8以后的默认加密方式改变了,由 mysql_native_password 改为了caching_sha2_password。这种加密凡是在客户端无法访问,客户端支持的是mysql_native_password 。我们先进行第七步。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    七、重启mysql服务,使其配置生效

    docker restart mysql
    
    • 1

    再次查看mysql的启动状态
    在这里插入图片描述

  • 相关阅读:
    React笔记(六)React路由
    起重行业信息汇集
    Compiling TraX library操作
    基于OPENCV和图像减法的PCB缺陷检测
    3.2 配置系统
    Java设计模式之策略模式
    IT 安全方案,但是简易版
    uniapp接口请求api封装,规范化调用
    C++编程中常遇见的问题
    要如何选择报修工单管理系统?需要注意哪些核心功能?
  • 原文地址:https://blog.csdn.net/tian830937/article/details/132653056