Docker安装Mysql

Docker安装

  1. 查看自己的linux的系统版本,检查系统是否满足安装要求 uname - r

    可选: 卸载旧版本sudo apt-get remove docker docker-engine docker.io containerd runc

  2. 安装 Docker CE curl -fsSl https://get.docker.com -o get-docker.sh

    此处的docker ce为社区版,如果是花钱购买,还有docker ee

  3. 通过docker-ce 安装docker sudo sh get-docker.sh

  4. 测试docker是否安装正常 docker -v

  5. 可能会出现的问题:docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.

    解决方法: 出现此错误是因为安装后,docker没有启动,需要使用systemctl start docker 来启动docker 6.如果使用docker pull命令拉取镜像过慢或者超时,需要配置镜像源,具体步骤如下

    1.使用docker info 观察是否有registry 开头的键值对,如果有使用vim /etc/docker/daemon.json来修改镜像源

    2.执行追加写入命令tee /etc/docker/daemon.json <<-'EOF'

    写入的内容:{

    "registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"]

    }

    EOF结尾结束追加内容

    3.重新加载配置 sudo systemctl daemon-reload

    4.重启docker服务 sudo systemctl restart docker

Docker安装Mysql

  1. 拉取mysql镜像 docker pull mysql
  2. 查看拉取成功的镜像 docker images
  3. 运行镜像:
sql 复制代码
 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 \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/loacl/mysql/conf.d:/etc/mysql/conf.d\
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

--命令解释--
-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是只读的意思,
-e MYSQL_ROOT_PASSWORD=123456:指定mysql环境变量,root用户的密码为123456
-d mysql:latest:后台运行mysql容器,版本是latest。
  1. 如果容器启动显示exit ,需要执行命令docker logs -f mysql来查看错误日志。

  2. 进入挂载数据卷的位置cd /usr/local/mysql,创建my.inf配置文件vim my.inf

    • my.inf写入内容:
    inf 复制代码
      [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 
  3. 重启mysql容器,刷新配置 docker restart mysql

  4. 授权远程登录权限

    1. 进入容器内部 docker exec -it mysql /bin/bash
    2. 进入mysql mysql -u root -p
    3. 切换至mysql系统库 use mysql
    4. 查询远程登录root用户的权限 select user,host from user;
    5. 看是否出现%权限,如若都是localhost权限则是属于没有授权远程登录
    6. 授权ALTER USER root@'%' IDENTIFIED WITH mysql_native_password BY '密码';因为mysql8.0版本默认是caching_sha2_password密码规则,不修改无法使用客户端连接,因为客户端通常使用的都是mysql_native_passwor。
    7. 刷新权限 FLUSH PRIVILEGES;
    8. 此时通过客户端就可以连接服务器上的mysql镜像了。

可能遇到的问题

  • 执行进入容器的命令无法退出容器,请使用组合键ctrl+p+q 或者exit
  • 经过一系列操作发现自己还是无法再客户端连接mysql,请检查云服务器是否开放端口3306
  • 查看或监测容器镜像的命令,docker ps -a检查容器运行状态,启动镜像 docker start 镜像名称
  • 请在未使用root用户的前提下,遇到问题多使用su命令开头加待执行命令
相关推荐
老衲提灯找美女3 分钟前
数据库事务
java·大数据·数据库
会飞的大可23 分钟前
Redis 竞品与替代方案选型可行性分析报告
数据库·redis·缓存
周杰伦的稻香29 分钟前
PostgreSQL基础命令
数据库·postgresql
先做个垃圾出来………43 分钟前
JSON序列化问题
数据库·json
yhole1 小时前
springboot三层架构详细讲解
spring boot·后端·架构
我科绝伦(Huanhuan Zhou)1 小时前
InnoDB Undo Log 深度解析:从原理到实现(基于 MySQL 8.0)
数据库·mysql
香香甜甜的辣椒炒肉1 小时前
Spring(1)基本概念+开发的基本步骤
java·后端·spring
jackiehome1 小时前
SQL数据库无法操作,日志文件损坏修复
数据库·sql·oracle
荒川之神1 小时前
ORACLE导入导出实验
数据库·oracle
执笔为剑1 小时前
利用逻辑备份修复误操作的库
数据库·kingbase