• docker安装MySQL


    注意:

    使用docker安装mysql需要注意的是一定要挂载数据卷,通常情况下,并不建议在开发或者生产等环境中使用docker安装mysql。

    1、查询mysql镜像文件

     [root@localhost docker]# docker search mysql

    2、拉取mysql镜像文件

     [root@localhost docker]# docker pull mysql

    注意:

    (1)在不指定版本号的情况下,默认拉取的是最新版本的mysql,即latest,如需要下载特定版本的mysql,可以使用如下方式:

    docker pull mysql:5.7 #指定下载5.7版本的mysql

    docker pull mysql:8.0 #指定下载8.0版本的mysql

    (2)如果下载的速度比较慢,可以通过docker info指令查看当前docker镜像源地址,建议使用阿里云加速器,下载速度比较快。

    3、查看镜像文件

     [root@localhost docker]# docker images

    通过以上指令,可以看出我们已经将mysql的镜像文件成功拉取下来,接下来就开始运行mysql容器。

    4、启动mysql容器

    1.  [root@localhost docker]# docker run --name mysql -p 13306:3306 --restart=always --privileged=true \
    2.  -v /usr/local/mysql/log:/var/log/mysql \
    3.  -v /usr/local/mysql/data:/var/lib/mysql \
    4.  -v /usr/local/mysql/conf:/etc/mysql \
    5.  -v /etc/localtime:/etc/localtime:ro \
    6.  -e MYSQL_ROOT_PASSWORD=root 
    7.  -d mysql:8.0
    4.1、命令解释
    命令功能
    --name mysql创建的容器名称
    -p 13306:3306指定宿主机端口与容器端口映射关系
    --restart=always总是跟随docker启动
    --privileged=true:获取宿主机root权限
    -v /home/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=root指定mysql的root用户的密码为root
    -d mysql:latest后台运行mysql容器,版本是8.0
    4.2、可能的问题

    初次执行本条命令时,mysql容器可能会启动失败,失败原因在于此时容器内部可能尚未配置mysql相关文件的存放位置,此时通过docker ps查看容器运行状态,就会发现mysql容器一直在restart状态,如下图所示。

    如果没有该问题,直接跳到第5步骤。

    4.3、问题解决方案

    此时如果容器一直在重启状态,我们就需要在宿主机映射目录下创建mysql的配置文件my.cnf,这和我们通过常规方式安装mysql的步骤是一样的。执行步骤如下:

    1.  # 进入Linux映射的mysql目录
    2.  [root@localhost docker]# cd /home/usr/local/mysql
    3.  [root@localhost mysql]# ll
    4.  total 0
    5.  drwxr-xr-x. 2 root root 6 Aug  4 23:44 conf
    6.  drwxr-xr-x. 2 root root 6 Aug  4 23:44 data
    7.  drwxr-xr-x. 2 root root 6 Aug  4 23:44 log
    8.  # 进入配置文件目录
    9.  [root@localhost mysql]# cd conf 
    10.  [root@localhost conf]# ll
    11.  total 0
    12.  # 编辑my.cnf文件
    13.  [root@localhost conf]# vim my.cnf

    my.cnf文件中内容如下:

    1.  [client]
    2.  default-character-set=utf8mb4
    3.  [mysql]
    4.  default-character-set=utf8mb4
    5.  [mysqld]
    6.  # 设置东八区时区
    7.  default-time_zone = '+8:00'
    8.  # 设置密码验证规则,default_authentication_plugin参数已被废弃
    9.  # 修改为authentication_policy
    10.  #default_authentication_plugin=mysql_native_password
    11.  authentication_policy=mysql_native_password
    12.  # 限制导入和导出的数据目录为空,不限制导入到该处的数据目录;
    13.  # 指定目录,必须从该目录导入到处,且MySQL不会自动创建该目录;
    14.  # 为NULL,禁止导入与导出功能
    15.  #secure_file_priv=/var/lib/mysql
    16.  secure_file_priv=
    17.  init_connect='SET collation_connection = utf8mb4_general_ci'
    18.  init_connect='SET NAMES utf8mb4'
    19.  character-set-server=utf8mb4
    20.  collation-server=utf8mb4_general_ci
    21.  skip-character-set-client-handshake
    22.  skip-name-resolve

    my.cnf文件修改完成后,重启mysql容器。

    4.4、重启动容
     [root@localhost docker]# docker restart mysql
    4.5、查看容器运行状态
     [root@localhost docker]# docker ps​​​​​​​

    5、设置mysql跟随docker自启动

    1. # 设置mysql跟随docker自启动
    2. [root@localhost docker]# docker update mysql --restart=always
    3. # 重启mysql
    4. [root@localhost docker]# docker restart mysql

    6、开启远程访问授权

    mysql远程访问未授权的情况下,通过外部机器去发起请求连接时,会提示连接拒绝,因为默认的root不具有远程连接的权限。

    此时我们需要进入到mysql容器内部,开启远程连接的权限。

    6.1、进入mysql容器内部并登录

    注意:

    mysql -u root -p 输入完成后,此时不需要输入密码,直接回车就可以进入mysql工作台。

    1. [root@localhost conf]# docker exec -it mysql /bin/bash
    2. root@8dc685cb34ba:/# mysql -u root -p
    3. Enter password:
    4. Welcome to the MySQL monitor. Commands end with ; or \g.
    5. Your MySQL connection id is 8
    6. Server version: 8.0.27 MySQL Community Server - GPL
    7. Copyright (c) 2000, 2021, Oracle and/or its affiliates.
    8. Oracle is a registered trademark of Oracle Corporation and/or its
    9. affiliates. Other names may be trademarks of their respective
    10. owners.
    11. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    12. mysql>
    6.2、选择数据库mysql
    1. mysql> show databases;
    2. +--------------------+
    3. | Database |
    4. +--------------------+
    5. | information_schema |
    6. | mysql |
    7. | performance_schema |
    8. | sys |
    9. +--------------------+
    10. 4 rows in set (0.01 sec)
    11. mysql> use mysql
    12. Reading table information for completion of table and column names
    13. You can turn off this feature to get a quicker startup with -A
    14. Database changed
    6.3、查看用户连接情况
    1. mysql> select host, user from user;
    2. +-----------+------------------+
    3. | host | user |
    4. +-----------+------------------+
    5. | localhost | mysql.infoschema |
    6. | localhost | mysql.session |
    7. | localhost | mysql.sys |
    8. | localhost | root |
    9. +-----------+------------------+
    10. 4 rows in set (0.00 sec)

    通过查询结果,可以看出root用户只有localhost连接权限,接下来开始修改用户登录权限。

    6.4、修改用户登录权限及密码认证方式
    1. mysql> update user set host = '%' where user = 'root';
    2. Query OK, 1 row affected (0.01 sec)
    3. Rows matched: 1 Changed: 1 Warnings: 0
    4. mysql> FLUSH PRIVILEGES;
    5. Query OK, 0 rows affected (0.01 sec)
    6. mysql> ALTER USER root@'%' IDENTIFIED WITH mysql_native_password BY 'root';
    7. Query OK, 0 rows affected (0.02 sec)
    8. mysql> FLUSH PRIVILEGES;
    9. Query OK, 0 rows affected (0.01 sec)
    6.5、Navicate客户端连接mysql

    至此,docker安装mysql的过程已经全部完成。

  • 相关阅读:
    【MySQL】MySQL数据类型
    数据库实践 Hw07
    springboot-定时任务
    寄售抢画字画拍卖-数字藏品竞拍-拍溢价系统古玩文物寄售源码系统
    Linux新建用户、删除用户以及用户之间的切换
    树莓派基础配置
    java计算机毕业设计疫情下发热门诊管理系统源码+系统+mysql数据库+lw文档+部署
    安卓手机如何无线连接adb?
    英语写作中“一致的”、“相似的”、“相等的”identical similar equal等的用法
    SpringBoot集成MyBatis
  • 原文地址:https://blog.csdn.net/threelifeadv/article/details/132125709