Docker部署MySQL

作者: 小喜_ww | 来源:发表于2020-01-15 11:43 被阅读0次

    一、拉取MySQL镜像

    1、拉取命令
    docker pull mysql
    2、查看镜像,检查是否拉取成功
    docker images

    images.png

    二、创建MySQL容器

    1、建立目录映射
    mkdir /opt
    mkdir /opt/mysql
    mkdir /opt/mysql/conf/
    mkdir /opt/mysql/logs/
    mkdir /opt/mysql/data/

    2、创建my.cnf配置文件
    touch /opt/mysql/my.cnf

    my.cnf添加以下内容:

    [mysqld]
    user=mysql
    character-set-server=utf8
    default_authentication_plugin=mysql_native_password
    secure_file_priv=/var/lib/mysql
    expire_logs_days=7
    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    max_connections=1000
    
    [client]
    default-character-set=utf8
    
    [mysql]
    default-character-set=utf8
    

    3、创建容器,并后台启动

    docker run --restart=always --privileged=true  \
    -v /opt/mysql/data/:/var/lib/mysql \
    -v /opt/mysql/logs/:/var/log/mysql \
    -v /opt/mysql/conf/:/etc/mysql \
    -v /opt/mysql/my.cnf:/etc/mysql/my.cnf  \
    -p 3306:3306 --name my-mysql \
    -e MYSQL_ROOT_PASSWORD=123456 -d mysql
    
    • -v:主机和容器的目录映射关系,":"前为主机目录,之后为容器目录
    • --restart=always: 当Docker 重启时,容器会自动启动。
    • --privileged=true:容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限

    ⚠️注意:启动mysql报如下错误,那是因为MYSQL新特性secure_file_priv对读写文件的影响。

    ERROR: mysqld failed while attempting to check config
    command was: "mysqld --verbose --help"
    
    mysqld: Error on realpath() on '/var/lib/mysql-files' (Error 2 - No such file or directory)
    2019-09-14T09:52:51.015937Z 0 [ERROR] [MY-010095] [Server] Failed to access directory for --secure-file-priv. Please make sure that directory exists and is accessible by MySQL Server. Supplied value : /var/lib/mysql-files
    2019-09-14T09:52:51.018328Z 0 [ERROR] [MY-010119] [Server] Aborting
    
    解决问题:
    windows下:修改my.ini 在[mysqld]内加入secure_file_priv=/var/lib/mysql
    linux下:修改my.cnf 在[mysqld]内加入secure_file_priv=/var/lib/mysql
    

    三、连接MySQL

    1、进入mysql容器
    docker exec -it my_mysql /bin/bash

    2、登陆mysql
    mysql -u root -p

    3、mysql 8 设置允许远程用户访问
    update user set host = '%' where user = 'root' and host='localhost'; # 更新root - localhost 为 root - %

    GRANT ALL ON *.* TO 'root'@'%'; # 设置允许远程用户访问

    flush privileges;# 刷新权限

    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码';#更新用户加密方式,mysql8默认的加密方式为caching_sha2_password 与mysql5的加密方式mysql_native_password 不同

    image.png
    image.png
    image.png

    4、使用Navicat 或者 MySQL Workbench 远程连接mysql
    我们在创建容器的时候已经将容器的3306端口和主机的3306端口映射到一起,所以我们应该访问:

    host: 127.0.0.1
    port: 3306
    user: root
    password: 123456
    
    image.png

    看这里,加关注:

    简书:一手文实时更新~~
    博客:都是干货!!!
    Github:开源代码,仅供参考~~

    相关文章

      网友评论

        本文标题:Docker部署MySQL

        本文链接:https://www.haomeiwen.com/subject/uiqtzctx.html