docker mysql日志写入本地_Docker Compose搭建MySQL主从复制集群
转载自https://zhuanlan.zhihu.com/p/45193580
前言
随着应用业务数据不断的增大,应用的 响应速度不断下降,在检测过程中我们不难发现大多数的请求都是 查询操作。此时,我们可以将数据库扩展成 主从复制模式,将 读操作 和 写操作 分离开来,多台数据库 分摊请求,从而 减少单库 的 访问压力,进而应用得到优化。
正文
主从复制的方式
MySQL 5.6 开始主从复制有两种方式:基于日志(binlog)和 基于 GTID(全局事务标示符)。
本文只涉及基于日志 binlog 的 主从配置。
主从复制的流程
MySQL 同步操作通过 3 个线程实现,其基本步骤如下:
- 主服务器 将数据的更新记录到 二进制日志(Binary log)中,用于记录二进制日志事件,这一步由 主库线程 完成;
- 从库 将 主库 的 二进制日志 复制到本地的 中继日志(Relay log),这一步由 从库I/O线程 完成;
- 从库 读取 中继日志 中的 事件,将其重放到数据中,这一步由 从库SQL线程 完成。
主从模式的优点
1. 负载均衡
通常情况下,会使用 主服务器 对数据进行 更新、删除 和 新建 等操作,而将 查询 工作落到 从库 头上。
2. 异地容灾备份
可以将主服务器上的数据同步到 异地从服务器 上,极大地提高了 数据安全性。
3. 高可用
数据库的复制功能实现了 主服务器 与 从服务器间 的数据同步,一旦主服务器出了 故障,从服务器立即担当起主服务器的角色,保障系统持续稳定运作。
4. 高扩展性
主从复制 模式支持 2 种扩展方式:
- scale-up
向上扩展或者 纵向扩展,主要是提供比现在服务器 性能更好 的服务器,比如 增加 CPU 和 内存 以及 磁盘阵列等,因为有多台服务器,所以可扩展性比单台更大。
- scale-out
向外扩展或者 横向扩展,是指增加 服务器数量 的扩展,这样主要能分散各个服务器的压力。
主从模式的缺点
1. 成本增加
搭建主从肯定会增加成本,毕竟一台服务器和两台服务器的成本完全不同,另外由于主从必须要开启 二进制日志,所以也会造成额外的 性能消耗。
2. 数据延迟
从库 从 主库 复制数据肯定是会有一定的 数据延迟 的。所以当刚插入就出现查询的情况,可能查询不出来。当然如果是插入者自己查询,那么可以直接从 主库 中查询出来,当然这个也是需要用代码来控制的。
3. 写入更慢
主从复制 主要是针对 读远大于写 或者对 数据备份实时性 要求较高的系统中。因为 主服务器 在写中需要更多操作,而且 只有一台 可以写入的 主库,所以写入的压力并不能被分散。
主从复制的前提条件
- 主从服务器 操作系统版本 和 位数 一致。
- 主数据库和从数据库的 版本 要一致。
- 主数据库和从数据库中的 数据 要一致。
- 主数据库 开启 二进制日志,主数据库和从数据库的 server_id 在局域网内必须 唯一。
具体配置
1. 环境准备
创建网络
docker network create docker_bridge
2. 配置docker-compose.yml
docker-compose.yml
version: '2'services: mysql-master: build: context: ./ dockerfile: master/Dockerfile environment: - "MYSQL_ROOT_PASSWORD=root" - "MYSQL_DATABASE=replicas_db" ports: - "33065:3306" restart: always hostname: mysql-master #使用桥接,保证docker容器之间通信正常 networks: - docker_bridge mysql-slave: build: context: ./ dockerfile: slave/Dockerfile environment: - "MYSQL_ROOT_PASSWORD=root" - "MYSQL_DATABASE=replicas_db" ports: - "33066:3306" restart: always hostname: mysql-slave #使用桥接,保证docker容器之间通信正常 networks: - docker_bridge#使用桥接,保证docker容器之间通信正常networks: docker_bridge: external: true
3. 主数据库配置
3.1. 配置Dockerfile
Dockerfile
FROM mariadb:latestMAINTAINER harrisonADD ./master/my.cnf /etc/mysql/my.cnf
3.2. 配置my.cnf文件
my.cnf
[mysqld]## 设置server_id,一般设置为IP,注意要唯一server_id=100 ## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)binlog-ignore-db=mysql ## 开启二进制日志功能,可以随便取,最好有含义(关键就是这里了)log-bin=replicas-mysql-bin ## 为每个session分配的内存,在事务过程中用来存储二进制日志的缓存binlog_cache_size=1M ## 主从复制的格式(mixed,statement,row,默认格式是statement)binlog_format=mixed ## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。expire_logs_days=7 ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致slave_skip_errors=1062
4. 从数据库配置
4.1. 配置Dockerfile
Dockerfile
FROM mariadb:latestMAINTAINER harrisonADD ./slave/my.cnf /etc/mysql/my.cnf
4.2. 配置my.cnf文件
[mysqld]## 设置server_id,一般设置为IP,注意要唯一server_id=101 ## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)binlog-ignore-db=mysql ## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用log-bin=replicas-mysql-slave1-bin ## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存binlog_cache_size=1M ## 主从复制的格式(mixed,statement,row,默认格式是statement)binlog_format=mixed ## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。expire_logs_days=7 ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致slave_skip_errors=1062 ## relay_log配置中继日志relay_log=replicas-mysql-relay-bin ## log_slave_updates表示slave将复制事件写进自己的二进制日志log_slave_updates=1 ## 防止改变数据(除了特殊的线程)read_only=1
5. 创建容器
进入 docker 目录,运行 docker-compose 启动命令。
$ docker-compose up -d
如图所示,MySQL 主数据库 和 从数据库 的容器创建成功。
分别配置 主数据库 和 从数据库 的连接信息如下:
- 主数据库
- 从数据库
6. 配置从数据库
检查从库的起始状态
$ show master status;
如图所示,从数据库处于 未同步复制状态。
检查主库的状态
$ show master status;
记录 主数据库 binary-log 的 文件名称 和 数据同步起始位置。
- File: replicas-mysql-bin.000003
- Position: 154
从库配置主库信息
在 从数据库 上运行 主数据库 的相关配置 sql 进行主从关联
CHANGE MASTER TO MASTER_HOST='mysql-master', MASTER_USER='root', MASTER_PASSWORD='root', MASTER_LOG_FILE='replicas-mysql-bin.000003', MASTER_LOG_POS=154;
重新启动 slave 服务
$ stop slave$ start slave
进一步检查 从数据库 的状态信息,两者已经进行 数据同步 关联。
7. 创建目标表
在 主数据库 中创建一张测试数据表 course
SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for ivy_user-- ----------------------------DROP TABLE IF EXISTS `ivy_user`;CREATE TABLE `ivy_user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID', `name` varchar(100) NOT NULL COMMENT '用户名字', `phone` varchar(20) NOT NULL COMMENT '用户手机号码', `create_time` bigint(13) unsigned NOT NULL COMMENT '创建时间', `update_time` bigint(13) unsigned NOT NULL COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
主数据库 和 从数据库 的 数据处于 同步状态,主从复制集群搭建完成。
转载自https://zhuanlan.zhihu.com/p/45193580
docker mysql日志写入本地_Docker Compose搭建MySQL主从复制集群相关推荐
- centos7 docker-compose安装_Docker Compose 搭建 Redis Cluster 集群环境
在前文<Docker 搭建 Redis Cluster 集群环境>中我已经教过大家如何搭建了,本文使用 Docker Compose 再带大家搭建一遍,其目的主要是为了让大家感受 Dock ...
- 本地连接服务器搭建的 Redis 集群
本地连接服务器搭建的 Redis 集群 在实际运行测试中,存在两个问题 安全组或防火墙开放端口 主要开放+10000端口. 如果要连接 Redis集群的应用服务不和 Redis集群在一个局域网下,会出 ...
- 单机 搭建kafka集群 本地_10分钟搭建单机Kafka集群
单机版kafka集群有什么作用 练习上手用. 搭建zookeeper集群首先下载zookeeper解压 apache zookeeper tar -zxvf apache-zookeeper-3.5. ...
- 利用Docker搭建Redis主从复制集群
查看容器IP地址 docker inspect cd27261ad940(容器id) 追随主节点 slaveof 主节点IP 端口号 查看主节点的从节点信息 info replication 测试 从 ...
- CentOS 7 上搭建 Nacos Cluster 集群
全部在WMWare虚拟机上实现,一共准备4个节点,IP 分别为 192.168.216.128/138/148/198. 整体架构: 1)Nginx,部署在1个节点198,负责负载均衡Nacos 请求 ...
- Docker学习总结(43)——Docker Compose 搭建Mysql主从复制集群
前言 随着应用业务数据不断的增大,应用的 响应速度不断下降,在检测过程中我们不难发现大多数的请求都是 查询操作.此时,我们可以将数据库扩展成 主从复制模式,将 读操作 和 写操作 分离开来,多台数据库 ...
- 使用docker compose部署MySQL主从复制集群
使用docker compose部署MySQL主从复制集群 环境说明 宿主机:Ubuntu 14.04.6 LTS Docker Engine: 18.06.3-ce docker compose: ...
- 学习Docker容器网络模型 - 搭建分布式Zookeeper集群
ZooKeeper是一个流行的分布式协调服务.它提供了两种不同的部署方式:单机模式和分布式模式.其中单机模式的部署非常简单,网上也有很多资料,我们今天会利用Docker搭建分布式Zookeeper集群 ...
- Docker中搭建redis分片集群,搭建redis哨兵结构,实现springboot中对redis分片集群、哨兵结构的访问,Redis缓存雪崩、缓存击穿处理(非关系型数据库技术课程 第十二周)
文章目录 一.要求: 二.知识总结 缓存雪崩 解决方案 docker中redis分片集群搭建 配置好配置文件 redis-6380.conf redis-6381.conf redis-6382.co ...
最新文章
- python如何将视频流实时传输到手机?(有问题,一次只能被一台访问)
- boost::fusion::make_fused_function_object用法的测试程序
- LeetCode—213. 打家劫舍 II
- 【HDU - 1083 】Courses (二分图)
- php数据回显是什么意思,jquery回显是什么意思
- Eclipse插件安装方式
- 数据操作语言DML及数据定义语言DDL的区别
- javax.comm的API
- SLF4J源码解析-LoggerFactory(二)
- GCC Link Time Optimization
- Keil 5 安装教程
- Google Earth Engine(GEE)——计算NDVI\EVI\RVI\DVI\SAVI归一化植被指数、比值植被指数、差值植被指数、土壤调节植被指数、增强型植被指数和绿度植被指数计算并下载
- 计算机组成原理 学后感,【计算机组成原理实验心得体会】_计算机组成原理实验心得_计算机组成原理实验感想...
- 计算机无法识别出硬件,电脑检测不到硬盘,电脑硬件故障检测工具
- MySQL实战系列3:视图、存储过程、函数、索引全解析
- 揪出系统中秘密隐藏的木马(下)
- 呕心沥血踩坑之:外星人M17电脑在一块硬盘上成功安装Windows与Ubuntu16.04双系统
- 今日学习之SQL基本语法与操作
- 牛客国庆集训派对Day1 New Game!+计算几何
- 华为交换机查看网口光功率命令
热门文章
- python中常见的流程结构-【Python2】04、Python程序控制结构
- python语言特点有哪些-python语言的有何特点?
- python和linux哪个难学-请不要重复犯我在学习Python和Linux系统上的错误
- python爬虫框架排行榜-公认8个效率最高的爬虫框架
- python处理数据的优势-选择python进行数据分析的理由和优势
- python实训项目-Python开发基础-项目实训-在线投票系统.pptx
- hduoj1021 Fibonacci Again
- java设计模式:prototype模式
- Vector的使用方法和自我理解
- HDU 1712 裸分组dp