docker安装mysql看这一篇就够了

发布时间:2023年12月31日

一、 安装docker

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

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

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

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

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

	yum makecache fast

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

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

③:指定docker镜像存放目录

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

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

1):刷新daemon.json文件

systemctl daemon-reload

2):启动Docker服务

systemctl start docker
sudo systemctl start docker
-- 重启
systemctl restart docker

3):设置开机自动启动

systemctl enable docker

4):测试

docker run hello-world

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

二、docker安装mysql

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

$ docker pull mysql

2、创建MySQL容器

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

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

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

     docker rm -f sample-mysql
    
  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
    

启动命令解释:
-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

在这里插入图片描述出现报错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

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

[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 。
3. 重启容器

docker restart mysql01

4.设置docker启动时启动mysql

docker update mysql01 --restart=always

5.重启mysql

docker restart mysql01

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

docker exec -it mysql01 /bin/bash

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;

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

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

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

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

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

 docker restart mysql01

如果此时你还无法远程连接,那检查一下云服务的安全规则,比如我使用的是阿里的云服务器,需要检查 网络与安全-安全组,增加入方向的规则,授权对象为远程访问的机器所在网络的出口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 查看容器日志

文章来源:https://blog.csdn.net/daringdart/article/details/134537140
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。