浅谈MYSQL之级联复制(附带实验)
浅谈MYSQL之级联复制
级联复制
原理:级联结构就是通过减少直接从属于 Master 的 Slave 数量,减轻 Master 的压力,分散复制请求,从而提高整体的复制效率。
级联复制的应用场景
- 跨机房复制,A—>B–|-->C(C跨机房),A挂,B提升为主,此时C不用做change master,缺点是复制延迟大,无法避免
- 库的拆分,某库压力很大,可以使用级联复制将其独立出去
中间从服务器需要注意的参数设置
缺点:
- 这种架构可以降低主库的负载,但是存在的问题是由于存在了多级复制,而主从复制由于是异步复制存在延迟问题,故最底层的从库会延迟更大,并且延迟随着级联层次的增大而增大,故如果读服务不能容忍太大的数据延迟,则不能采用这种架构模式。
[mysqld]
log_bin / 开启二进制日志
log_slave_updates
/ log-slave-updates这个参数用来配置从服务器的更新是否写入二进制日志,这个选项默认是不打开的,
/ 但是,如果这个从服务器B是 服务器A的从服务器,同时还作为服务器C的主服务器,
/ 那么就需要开发这个选项,这样它的从服务器C才能获得它的二进制日志进行同步操作
实验:实现级联复制
结构图如下
- 准备工作
- 三台干净环境的主机
- 时间同步完成
- 防火墙关闭
- SELINUX关闭
- 设置主MASTER配置
vim /etc/my.cnf
[mysqld]
server_id=1 / IP地址最后一位,局域网唯一ID
log-bin / 二进制日志
systemctl start mariadb
/ 创建复制权限账户
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'repliuser'@'172.20.%.%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> SHOW MASTER LOGS;
+--------------------+-----------+
| Log_name | File_size |
+--------------------+-----------+
| mariadb-bin.000001 | 401 |
+--------------------+-----------+
1 row in set (0.00 sec)
- 二级级联机器172.20.54.2配置
vim /etc/my.cnf
[mysqld]
server_id=2
log-bin
log-slave-updates=1 / 从服务器写入二进制日志参数MariaDB [(none)]> CHANGE MASTER TO-> MASTER_HOST='172.20.54.1',-> MASTER_USER='repliuser',-> MASTER_PASSWORD='123456',-> MASTER_PORT=3306,-> MASTER_LOG_FILE='mariadb-bin.000001',-> MASTER_LOG_POS=401,-> MASTER_CONNECT_RETRY=10;
Query OK, 0 rows affected (0.03 sec)MariaDB [(none)]> START SLAVE;
Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 172.20.54.1Master_User: repliuserMaster_Port: 3306Connect_Retry: 10Master_Log_File: mariadb-bin.000001Read_Master_Log_Pos: 401Relay_Log_File: mariadb-relay-bin.000002Relay_Log_Pos: 531Relay_Master_Log_File: mariadb-bin.000001Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0Last_Error: Skip_Counter: 0Exec_Master_Log_Pos: 401Relay_Log_Space: 827Until_Condition: NoneUntil_Log_File: Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error: Last_SQL_Errno: 0Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1
1 row in set (0.00 sec)ERROR: No query specified
/ 给三号机器建立访问账号权限
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'repliuser'@'172.20.54.%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec).
/ 查看二进制日志 POS点
MariaDB [(none)]> SHOW MASTER LOGS;
+--------------------+-----------+
| Log_name | File_size |
+--------------------+-----------+
| mariadb-bin.000001 | 245 |
+--------------------+-----------+
- 第三台机器设置
vim /etc/my.cnf
[mysqld]
server-id=3systemctl start mariadbMariaDB [(none)]> CHANGE MASTER TO-> MASTER_HOST='172.20.54.2',-> MASTER_USER='repliuser',-> MASTER_PASSWORD='123456',-> MASTER_PORT=3306,-> MASTER_LOG_FILE='mariadb-bin.000001',-> MASTER_LOG_POS=245,-> MASTER_CONNECT_RETRY=10;
Query OK, 0 rows affected (0.03 sec)MariaDB [(none)]> START SLAVE;MariaDB [(none)]> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 172.20.54.2Master_User: repliuserMaster_Port: 3306Connect_Retry: 10Master_Log_File: mariadb-bin.000001Read_Master_Log_Pos: 402Relay_Log_File: mariadb-relay-bin.000003Relay_Log_Pos: 531Relay_Master_Log_File: mariadb-bin.000001Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0Last_Error: Skip_Counter: 1Exec_Master_Log_Pos: 402Relay_Log_Space: 1270Until_Condition: NoneUntil_Log_File: Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error: Last_SQL_Errno: 0Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 2
1 row in set (0.00 sec)ERROR: No query specified
- 测试过程
/ 在1号master主机
MariaDB [(none)]> CREATE DATABASE TESTDB1;
Query OK, 1 row affected (0.01 sec)MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| TESTDB1 |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.00 sec)
/ 2号级联SLAVEMariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| TESTDB1 |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.00 sec)
/ 3号SLAVE机器MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| TESTDB1 |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.00 sec)
- 测试完成
浅谈MYSQL之级联复制(附带实验)相关推荐
- mysql怎么在海量数据上ddl_浅谈MySQL Online DDL(中)
本文首发于个人微信公众号<andyqian>,期待你的关注! 前言 在上一篇文章中<浅谈MySQL Online DDL (上)>中,我们谈到了MySQL Online DDL ...
- 浅谈mysql主从复制的高可用解决方案
1.熟悉几个组件(部分摘自网络) 1.1.drbd -- DRBD(Distributed Replicated Block Device),DRBD号称是 "网络 RAID&qu ...
- 浅谈mysql的主键和索引
在上一篇文章<count(1).count(*).count(字段)哪个更靠谱>中,我们提到过主键是优化不了count的查询效率的,需要建索引才可以,那么,是不是意味着主键的效率还不如一般 ...
- 支付宝的数据库是MySQL变种_浅谈MySql的储存引擎(表类型)
浅谈mysql的存储引擎(表类型) 什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合. 我们通常说的MySql数据库, ...
- 【转载】运维角度浅谈MySQL数据库优化
运维角度浅谈MySQL数据库优化 2015-06-02 14:22:02 标签:mysql优化 mysql分库分表分区 mysql读写分离 mysql主从复制 原创作品,允许转载,转载时请务必以 ...
- 浅谈 MySQL 新的身份验证插件 caching_sha2_password
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. GreatSQL是MySQL的国产分支版本,使用上与MySQL一致. 介绍 从 MySQL 8.0.4 开始,MySQL ...
- 浅谈MySQL存储引擎-InnoDBMyISAM
浅谈MySQL存储引擎-InnoDB&MyISAM 存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式 ...
- 浅谈 MySQL 子查询及其优化
2019独角兽企业重金招聘Python工程师标准>>> 使用过oracle或者其他关系数据库的DBA或者开发人员都有这样的经验,在子查询上都认为数据库已经做过优化,能够很好的选择驱动 ...
- mysql declare与set的区别_浅谈MySQL存储过程中declare和set定义变量的区别
在存储过程中常看到declare定义的变量和@set定义的变量.简单的来说,declare定义的类似是局部变量,@set定义的类似全局变量. 1.declare定义的变量类似java类中的局部变量,仅 ...
最新文章
- 用DOS命令来运行Java代码
- 软件測试基本方法(一)之软件測试
- javascript 忍者秘籍读书笔记
- 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1082:求小数的某一位
- 简单了解各种序列化技术-kyro序列化框架
- python 3d大数据可视化_Python大数据可视化编程实践-绘制图表
- call() , apply() ,bind()的用法
- MySQL : MySQL如何查看操作记录
- php上传word并展示_这2种简单方法能将Word批量转换PDF
- Python接口测试
- python简明教程_04
- NSSA区域和Totally NSSA区域
- 自媒体文章标题的大坑,难怪你写的文章没有推荐
- Verilog HDL 实现 74HC595
- 解决 Cannot uninstall 'ipython'. It is a distutils installed project and thus we cannot accurately det
- 怎么一心多用高效处理工作琐事?用敬业签同时处理多个任务
- Identifying and Tracking Sentiments and Topics from Social
- springboot最新minio实用javaAPI教程-8.0.x
- Java中的JVM关闭钩子
- 虚拟机 ubuntu 16 安装caffe CPU版本 安装open pose