当前位置:   article > 正文

docker安装mysql看这一篇就够了

docker安装mysql

一、 安装docker

1、安装依赖环境,yum-utils

yum -y install yum-utils device-mapper-persistent-data lvm2
备注:
  • 1
  • 2

使用yum工具下载
yum是软件包管理工具
通过 执行 man yum
可以查看yum的帮助信息
2、设置镜像源,为yum源添加docker仓库位置

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 1

3、安装Docker
①:执行命令,提高软件安装速度(将软件包信息提前在本地缓存一份,用来提高搜索安装软件的速度)

	yum makecache fast
  • 1

②:安装docker(docker-ce 社区版 而ee是企业版)

yum install docker-ce docker-ce-cli containerd.io
  • 1

③:指定docker镜像存放目录

vim /etc/docker/daemon.json
进行编辑(json格式)
 {"graph": "/data/docker-data"}
  • 1
  • 2
  • 3

④:启动,并设置为开机自启(因为你加了日志生成路径,可能会出错,不要慌!!可以查看后面解决方法)

1):刷新daemon.json文件

systemctl daemon-reload
  • 1

2):启动Docker服务

systemctl start docker
sudo systemctl start docker
-- 重启
systemctl restart docker
  • 1
  • 2
  • 3
  • 4

3):设置开机自动启动

systemctl enable docker
  • 1

4):测试

docker run hello-world
  • 1

5:):查看docker 当前的状态

systemctl status docker
查看具体的错误信息
systemctl status docker -l
systemctl status docker.service

# 查看docker的版本信息
docker version
# 查看docker是否启动
ps -ef | grep docker
# 设置docker开机自启动
systemctl enable docker
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

二、docker安装mysql

1、拉取MySQL镜像
在进行MySQL容器的部署之前,需要先拉取MySQL镜像。可以通过以下命令拉取官方提供的MySQL镜像:

$ docker pull mysql
  • 1

2、创建MySQL容器

  1. 先创建一个简单的mysql容器实例

     docker run -p 3306:3306 --name  sample-mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:xxx(docker拉取的mysql的镜像版本号)
    
    • 1
  2. 复制里面的/etc/mysql文件夹

     docker cp sample-mysql:/etc/mysql/. /mydata/mysql/conf
    
    • 1
  3. 删除掉临时容器

     docker rm -f sample-mysql
    
    • 1
  4. 启动完整的容器命令

     docker run \
     -p 3306:3306 \
     --name mysql \
     -e MYSQL_ROOT_PASSWORD=123456 \
     -v /mydata/mysql/log:/var/log/mysql \
     -v /mydata/mysql/data:/var/lib/mysql \
     -v /mydata/mysql/conf:/etc/mysql \
     --privileged=true \
     -d mysql:xxx(docker拉取的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 \
     -v /etc/localtime:/etc/localtime:ro \
     -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
     自定义端口启动完整命令:
     docker run -p 13306:13306 --name mysql01 --restart=always --privileged=true \
     -v /mydata/mysql/log:/var/log/mysql \
     -v /mydata/mysql/data:/var/lib/mysql \
     -v /mydata/mysql/conf:/etc/mysql \
     -v /etc/localtime:/etc/localtime:ro \
     -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

启动命令解释:
-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。
命令执行之后如下图:
在这里插入图片描述

三、设置MySQL远程访问

1.通过docker进入mysql并修改允许用户远程访问

docker exec -it mysql01 /bin/bash
  • 1

在这里插入图片描述出现报错Error response from daemon: Container 13a5e6e07143788f1fb62b8c344f7dd66a08ed2d2e3fb888ac74693331f7cc8a is restarting, wait until the container is running
查看日志,docker logs -f mysql01
报错信息如下:[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
此时我们需要修改mysql配置
2. 创建mysql配置文件:my.cnf

cd /mydata/mysql/conf
vi my.cnf
  • 1
  • 2

在配置文件中输入以下内容:

[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
  • 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

默认的鉴权方式,我们修改为mysql_native_password,不然的话连接会报错。因为在mysql8以后的默认加密方式改变了,由 mysql_native_password 改为了caching_sha2_password。这种加密凡是在客户端无法访问,客户端支持的是mysql_native_password 。
3. 重启容器

docker restart mysql01
  • 1

4.设置docker启动时启动mysql

docker update mysql01 --restart=always
  • 1

5.重启mysql

docker restart mysql01
  • 1

10.授权远程访问
不进行授权直接登陆的话会报错的,如图:
在这里插入图片描述
6. 进入容器内部

docker exec -it mysql01 /bin/bash
  • 1

7.登录mysql
在这里插入图片描述
提示拒绝登录报错如下:ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES)
此时输入mysql 后直接回车,登录成功(此时MySQL未设置密码)
8.修改远程登录密码及允许的访问ip
查看用户表中root信息,执行如下命令

show databases;
use mysql;
select host, user, plugin,  authentication_string, password_expired from user;
  • 1
  • 2
  • 3

结果如下图:
在这里插入图片描述
执行如下命令,修改登陆的密码

ALTER USER root@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'
  • 1

再次查看后变成
在这里插入图片描述再执行如下命令,修改登录root用户的IP范围,%为允许所有ip

 update user set host='%' where user='root';  FLUSH PRIVILEGES; 
  • 1

在这里插入图片描述到此如果MySQL容器是使用默认3306端口启动的,你就可以通过远程机器连接数据库了。
9. 自定义端口启动
但如果你修改了数据库默认端口,你还需要在/mydata/mysql/conf/下的my.cnf配置文件修改下默认端口
增加port=xxx 具体配置如下图:
在这里插入图片描述
10.修改完后重启容器

 docker restart mysql01
  • 1

如果此时你还无法远程连接,那检查一下云服务的安全规则,比如我使用的是阿里的云服务器,需要检查 网络与安全-安全组,增加入方向的规则,授权对象为远程访问的机器所在网络的出口ip,如下图:
在这里插入图片描述备注:
搜索仓库镜像:docker search 镜像名
拉取镜像:docker pull 镜像名
查看正在运行的容器:docker ps
查看所有容器:docker ps -a
删除容器:docker rm container_id
查看镜像:docker images
删除镜像:docker rmi image_id
启动(停止的)容器:docker start 容器ID
停止容器:docker stop 容器ID
删除容器:docker rm 容器ID
重启容器:docker restart 容器ID
启动(新)容器:docker run -it ubuntu /bin/bash
进入容器:docker attach 容器ID或docker exec -it 容器ID /bin/bash,推荐使用后者。
启动docker服务
systemctl start docker
关闭docker
systemctl stop docker
重启docker
systemctl restart docker
docker设置随服务启动而自启动
systemctl enable docker.service
查看docker 运行状态
systemctl status docker #如果是在运行中 输入命令后 会看到绿色的active
docker logs -f mysql 查看容器日志

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/1008556
推荐阅读
相关标签
  

闽ICP备14008679号