docker安装mysql看这一篇就够了

news/2024/11/7 21:13:10/

docker安装mysql

  • 一、 安装docker
  • 二、docker安装mysql
  • 三、设置MySQL远程访问

一、 安装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=utf8mb4collation-server=utf8mb4_0900_ai_ciskip-character-set-client-handshakeskip-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 查看容器日志


http://www.ppmy.cn/news/1287229.html

相关文章

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机的固定帧率(C++)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机的固定帧率(C) Baumer工业相机Baumer工业相机的固定帧率功能的技术背景CameraExplorer如何查看相机固定帧率功能在NEOAPI SDK里通过函数设置相机固定帧率 Baumer工业相机通过NEOAPI SDK设置相机固定…

sublime汉化教程

目录 下载 汉化 使用 快捷键 文件格式 运行文件 替换文件中的内容 sublime是一款很好用的软件,本期尘风就教你们使用这款软件 下载 到官网http://www.sublimetext.com下载 选择你的系统 将其解压后打开其中的有着Sublime Text图标的文件 汉化…

【信息安全原理】——拒绝服务攻击及防御(学习笔记)

📖 前言:拒绝服务攻击(Denial of Service, DoS)是一种应用广泛、难以防范、严重威胁网络安全(破坏可用性)的攻击方式。本章主要介绍DoS的基本概念、攻击原理及防御措施。 目录 🕒 1. 定义&#…

Zookeeper-Zookeeper应用场景实战(二)

1. Zookeeper 分布式锁实战 1.1 什么是分布式锁 在单体的应用开发场景中涉及并发同步的时候,大家往往采用Synchronized(同步)或者其他同一个 JVM内Lock机制来解决多线程间的同步问题。在分布式集群工作的开发场景中,就需要 一种…

【qt】保存debug到log里

新建一个log.h #ifndef LOG_H #define LOG_H#include <QFile> #include <QTextStream> #include <QDateTime> #include <QMutex> #include <QDir>//选择屏幕打印还是输出到文件可以根据这个宏控制或者控制函数调用位置都可以 //#define _DEBUG …

计算机网络【DNS】

DNS 基本概述 与 HTTP、FTP 和 SMTP 一样&#xff0c;DNS 协议也是应用层的协议&#xff0c;DNS 使用客户-服务器模式运行在通信的端系统之间&#xff0c;在通信的端系统之间通过下面的端到端运输协议来传送 DNS 报文。但是 DNS 不是一个直接和用户打交道的应用。DNS 是为因特…

k8s的二进制部署master 和 etcd

k8s的基本架构 k8smaster01&#xff1a; 20.0.0.70 kube-apiserver kube-controller-manager kube-scheduler etcd k8smaster02&#xff1a;20.0.0.71 kube-apiserver kube-controller-manager kube-scheduler node节点01&#xff1a;20.0.0.72 kubelet kube-proxy etcd no…

4.32 构建onnx结构模型-Erf

前言 构建onnx方式通常有两种&#xff1a; 1、通过代码转换成onnx结构&#xff0c;比如pytorch —> onnx 2、通过onnx 自定义结点&#xff0c;图&#xff0c;生成onnx结构 本文主要是简单学习和使用两种不同onnx结构&#xff0c; 下面以 Erf 结点进行分析 方式 方法一&…