docker高级篇第一章-docker复杂安装说明【案例mysql有问题】
共 3971字,需浏览 8分钟
·
2022-12-17 14:53
大家好,咱们前面通过十篇的文章介绍了docker的基础篇,从本篇开始,咱们的《docker学习系列》将要进入到高级篇阶段(基础篇大家可以查看之前发布的文章)。
咱们先来介绍:docker复杂方式安装软件。通过按照mysql\redis两个案例来讲解
Docker复杂安装说明,两个案例:
1:安装mysql主从复制
2:安装redis集群
本文咱们就先来实现第一个案例:mysql主从复制
大家好,我是凯哥Java(kaigejava),乐于分享,每日更新技术文章,欢迎大家关注“凯哥Java”,及时了解更多。让我们一起学Java。也欢迎大家有事没事就来和凯哥聊聊~~~
直通车,本系列教程已发布文章,快速到达,《Docker学习系列》教程已经发布的内容如下:
【图文教程】Windows11下安装Docker Desktop
【填坑】在windows系统下安装Docker Desktop后迁移镜像位置
【Docker学习系列】Docker学习1-docker安装
【Docker学习系列】Docker学习2-docker设置镜像加速器
【Docker学习系列】Docker学习3-docker的run命令干了什么?docker为什么比虚拟机快?
【Docker学习系列】Docker学习2-常用命令之启动命令和镜像命令
【Docker学习系列】Docker学习系列3:常用命令之容器命令
【Docker学习系列】Docker学习4-常用命令之重要的容器命令
【Docker教程系列】Docker学习5-Docker镜像理解
【Docker教程系列】Docker学习6-Docker镜像commit操作案例
【Docker学习教程系列】7-如何将本地的Docker镜像发布到阿里云
【Docker学习教程系列】8-如何将本地的Docker镜像发布到私服?
「Docker学习系列教程」9-Docker容器数据卷介绍
「Docker学习系列教程」10-Docker容器数据卷案例
Docker学习11-Docker常规方式安装软件
【Docker学习教程系列汇总】笔记及遇到问题解决文章
安装mysql主从搭建步骤:
1:新建主服务器容器实例3307
命令
docker run -p 3307:3306 --name mysql-master \
-v /mydata/mysql-master/log:/var/log/mysql \
-v /mydata/mysql-master/data:/var/lib/mysql \
-v /mydata/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
2:进入/mydata/mysql-master/conf目录下新建my.cnf
修改配置:
cd /mydata/mysql-master/conf
vim my.cnf
## 输入以下内容
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能
log-bin=mall-mysql-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
注意文件权限应该是644
3:修改完配置之后重启master实例
修改完mysql配置后,记得重启实例
docker restart mysql-master
如果重启失败,查看是否因为my.conf文件写错导致。
或者查看错误日志:docker logs 容器id
修改后,重新启动容器。
4:进入mysql-master容器
进入到mysql-master。然后登录mysql试试。
在前台显示进入容器:
docker exec -it mysql-master /bin/bash
进入容器后,登录mysql:
mysql -uroot -p
5:master容器实例内创建数据同步用户
mysql创建用户及密码命令:
命令模板:CREATE USER '用户名'@'可以访问的ip' IDENTIFIED BY '密码'
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
赋权命令模板:GRANT REPLICATION 权限 on 访问ip端口 TO '用户名'@‘ip’
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%';
6:新建从服务器容器实例3308
命令:
docker run -p 3308:3306 --name mysql-slave \
-v /mydata/mysql-slave/log:/var/log/mysql \
-v /mydata/mysql-slave/data:/var/lib/mysql \
-v /mydata/mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
区别:
1:修改了宿主机的端口映射
2:修改了容器名称
3:修改了数据卷挂载的目录
7:进入/mydata/mysql-slave/conf目录下新建my.cnf
修改配置:
cd /mydata/mysql-slave/conf
vim my.cnf
## 输入以下内容
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
## slave设置为只读(具有super权限的用户除外)
read_only=1
重新赋权
8:修改完配置后重启slave实例
修改完mysql配置后,记得重启实例
docker restart mysql-slave
9:在主数据库这查看主从同步状态
在mysql主库的镜像中,进入主mysql,然后执行命令:
show master status;
10:进入mysql-slave容器
进入到mysql-master。然后登录mysql试试。
在前台显示进入容器:
docker exec -it mysql-slave /bin/bash
进入容器后,登录mysql:
mysql -uroot -p
11:在从数据库中配置主从复制
在mysql从库的镜像中,进入从mysql,然后执行命令公式:
change master to master_host='宿主机ip', master_user='在主库上创建用于主从同步的用户账号', master_password='在主数据库创建的用于同步数据的用户密码', master_port=master库的端口, master_log_file='masterlog文件名称', master_log_pos=当前开始点, master_connect_retry=重试;
公式说明:见注释
master_host:主数据库的ip地址
master_port:主数据库的端口
master_user:在主数据库创建的用于同步数据的用户账号
master_password:在主数据库创建的用于同步数据的用户的密码
master_log_file:指定从数据库要复制数据的日志文件。通过查看主数据库的状态,获取File参数;
master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数
master_connect_retry:连接失败充值的时间间隔,单位:秒
12:在从数据库中查看主从同步状态
查看主从同步第二中方法:
show slave status \G;
13:在从数据库中开启主从同步
进入从数据库的mysql后,开启主从同步:
start slave;
14:查看从数据库状态发现已经同步
15:主从复制测试