当前位置:   article > 正文

docker安装mysql8.0教程

docker安装mysql8.0


 

①:环境准备

如果你的云主机已经有下面的这些基础软件包请忽略

假设新拿到一台机器,为了以后使用命令方便,先安装一些基础软件包

# 给每台主机安装基础软件包
yum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate telnet
  • 1
  • 2

 

②:docker安装

接下来安装docker(如果机器上已有docker请忽略)

docker安装
# 1.配置阿里云 repo 源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 2.安装 docker-ce
yum install docker-ce -y

# 3.配置镜像加速
tee /etc/docker/daemon.json << 'EOF'
{
"registry-mirrors":["https://kn0t2bca.mirror.aliyuncs.com", "https://gqs7xcfd.mirror.aliyuncs.com","https://hub-mirror.c.163.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

# 4.docker启动和激活等
systemctl daemon-reload
systemctl restart docker
# 5.设置Docker开机自启
systemctl enable docker
# 查看状态
systemctl status docker



# 查看docker版本
docker -v

  • 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

 

③:mysql8.0.36安装

# 1.创建物理机挂载目录 
sudo mkdir -p /data/mysql/data /data/mysql/logs /data/mysql/conf

# 2.进入mysql配置目录
cd /data/mysql/conf

# 3.创建mysq的my.cnf配置文件,补充mysql8.0的配置文件(如下)
touch my.cnf

# =============== 配置内容如下(可根据自己情况修改)==============

[mysql]
#设置服务器默认字符集为utf8mb4
default-character-set=utf8mb4
[mysqld]
#配置服务器的服务号,具备日后需要集群做准备
server-id = 1
#开启MySQL数据库的二进制日志,用于记录用户对数据库的操作SQL语句,具备日后需要集群做准备
log-bin=mysql-bin
#设置清理超过30天的日志,以免日志堆积造过多成服务器内存爆满
expire_logs_days=30
#允许最大的连接数
max_connections=16384
# 禁用符号链接以防止各种安全风险
symbolic-links=0
# 设置东八区时区
default-time_zone = '+8:00'
#wait_timeout参数值,由默认的8小时,修改为30分钟。
wait_timeout=1800
#修改back_log参数值:由默认的50修改为500 每个线程256K 1.6W线程2G左右
back_log=500
character_set_server=utf8mb4

character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect=SET NAMES utf8mb4

# =========================== 结 束 ===========================


# 4.拉取mysql:8.0.36镜像文件
docker pull mysql:8.0.36

  • 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
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

 

④:mysql8.0.36容器启动

# 5.启动mysql:8.0.36
docker run -p 3306:3306 --name mysql --restart always -v /data/mysql/conf/my.cnf:/etc/mysql/my.cnf -v /data/mysql/logs:/logs -v /data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0.36
  • 1
  • 2

容器运行命令解释

  • docker run: 启动一个新的容器。
  • -p 3306:3306: 将主机的 3306 端口映射到容器的 3306 端口,MySQL 默认使用 3306 端口。
  • --name mysql: 给这个容器命名为 mysql。
  • --restart always: 设置容器自动重启策略,always 表示无论因为什么原因退出,Docker 守护进程都会自动重启容器。
  • -v /data/mysql/conf/my.cnf:/etc/mysql/my.cnf: 将主机的 /data/mysql/conf/my.cnf 文件挂载到容器的 /etc/mysql/my.cnf 文件,这个文件是 MySQL 的配置文件。
  • -v /data/mysql/logs:/logs: 将主机的 /data/mysql/logs 目录挂载到容器的 /logs 目录,用于存储日志文件。
  • -v /data/mysql/data:/var/lib/mysql: 将主机的 /data/mysql/data 目录挂载到容器的 /var/lib/mysql 目录,用于存储数据库数据。
  • -e MYSQL_ROOT_PASSWORD=root: 设置 MySQL 的 root 用户密码为 root,通过环境变量 MYSQL_ROOT_PASSWORD 传递。
  • -d: 后台运行容器并返回容器 ID。
  • mysql:8.0.36: 使用 mysql 镜像的 8.0.36 版本来创建容器。

 
使用docker ps -a 查看所有容器的启动情况

在这里插入图片描述

如果容器状态一直是上面的Restarting,则要通过docker logs -fn 500 mysql 查看docker启动日志

在这里插入图片描述

通过日志可以看到这里需要一个文件 /var/lib/mysql-files
那就在本地创建一个 ,然后停止、删除、并重新启动容器

# 物理机创建mysql-files
mkdir -p /var/lib/mysql-files

# 停止MySQL容器
docker stop mysql

# 删除MySQL容器
docker rm mysql

# 运行MySQL容器(此处增加了/var/lib/mysql-files的挂载文件)
docker run -p 3306:3306 --name mysql --restart always -v  /var/lib/mysql-files:/var/lib/mysql-files  -v /data/mysql/conf/my.cnf:/etc/mysql/my.cnf -v /data/mysql/logs:/logs -v /data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0.36

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

执行完毕 docker ps 看到如下,即启动成功
在这里插入图片描述

 

④:客户端连接(异常解决:修改密码)

启动容器后,使用navicate客户端连接即可,假如出现了以下情况,说明输入的密码错误了,需要修改密码后再进行连接

在这里插入图片描述
注意上面的报错 using password :YES 说明使用了密码,但密码不对! 假如此时无论如何填写密码都不正确,那么就需要修改密码后再次登陆,步骤如下
 

1.首先进入容器内部

docker exec -it mysql ./bin/bash 
  • 1

然后尝试执行命令 mysql -uroot使用无密码登陆,看是否可以登上mysql

  • 如果可以直接登上,则跳到第3步修改密码即可
  • 如果登陆不上,则需要按部就班的从第2步执行
     

2.进入并编辑容器内部的配置文件docker.cnf,使其具有免密码登陆权限

cd ./etc/mysql/conf.d/
  • 1

在这里插入图片描述
当我们使用vim编辑器编辑容器内部的docker.cnf文件时,发现容器内部并没有提供vim工具,那就手动在容器内部安装一个

# 1.运行以下命令来安装Vim

apt-get update
apt-get install -y vim

# 2.验证Vim是否成功安装
vim --version

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

有了vim编辑器就开始修改docker.cnf文件的内容,添加skip-grant-tables属性使其可以免密登陆

docker.cnf原内容如下

 [mysqld]
 skip-host-cache
 skip-name-resolve
  • 1
  • 2
  • 3

vim添加skip-grant-tables,修改后如下

 [mysqld]
 skip-host-cache
 skip-name-resolve
 skip-grant-tables
  • 1
  • 2
  • 3
  • 4

然后退出,并重启mysql容器

 exit​
 docker restart mysql
  • 1
  • 2

 

3.无密码登陆,并重置密码

首先,要无密码登陆进mysql

 mysql -uroot
  • 1

然后修改密码为12345

  • 5.7及以下版本

    set password for 'root' = password('12345');                      //修改本地密码
    set password for 'root'@'localhost' = password('12345');          //修改远程密码
    
    • 1
    • 2
  • 8.0以上版本

    ALTER USER 'root'@'%' IDENTIFIED BY '12345';
    ALTER USER 'root'@'localhost' IDENTIFIED BY '12345';
    
    • 1
    • 2

然后要把上边docker.cnf文件中新增的skip-grant-tables配置去掉,否则的话,密码就是摆设了,还是可以无密码登陆

然后退出容器,重启mysql

 exit​
 docker restart mysql
  • 1
  • 2

 

④:客户端连接(异常解决:允许外部访问)

本机装的MySQL数据库,本机可以正常连接,其他机器访问报错,is not allowed to connect to this MySQL server,防火墙等其他策略均配置没问题 。
在这里插入图片描述

出现该问题的原因是,MySQL数据库只允许自身所在的本机器连接,不允许远程连接。

在这里插入图片描述

注意:上面的图是我在容器内部把root用户修改为允许外部访问之后才截的图,正常情况下使用navicate是进不去的

所以要

  • 先使用 docker exec -it mysql ./bin/bash 进入容器内部

  • 然后mysql -uroot 进入mysql (有密码则使用mysql -uroot -p进入)

  • 然后使用use mysql;进入mysql数据库

  • 然后再执行修改语句,修改语句如下:

    # 1.修改root用户的host
    update user set host = '%' where user = 'root'; 
    
    # 2.刷新配置
    flush privileges;
    
    # 3.查看修改结果
    select host, user from user; 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

以上都做完,即可连接成功
在这里插入图片描述

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

闽ICP备14008679号