热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MyCat学习:使用MySQL搭建主从复制(双主双从模式)

首先,上一篇我们建立了一主一丛模式的MySQL读写分离点击这里那么接下来,我们搭建双主双从模式的读写分离,并且使用MyCat登录访问原理&

首先,上一篇我们建立了一主一丛模式的MySQL读写分离 点击这里 那么接下来,我们搭建双主双从模式的读写分离,并且使用MyCat登录访问


原理:master1,master2,slave1,slave2 —> master1 和 slave1主从复制,master2 和 slave2主从复制,同时 master2 做为master1的从机,进行互备主从


当然,如果你之前没有搭建过主从复制,下面这两步骤可以不需要做



  • 首先需要清除当前之前设置的主从模式,删除testdb数据库
  • stop slave; reset master;(可以主机从机都执行)
    一、master1配置文件:

server-id=1 # 定义服务器唯一ID
log-bin=mysql-bin # 启用二进制日志
binlog-ignore-db=mysql # 忽略 mysql 库(如果配置了binlog-do-db的话可以不需要设置这个)
binlog-do-db=testdb # 设置需要主从复制的库
binlog_format=STATEMENT
log-slave-updates # 在做为从数据库的时候,有写入的操作也需要记录下二进制日志文件
auto-increment-increment=2 #表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1~65535
auto-increment-offset=1 # 表示自增字段从哪个数开始,一次递增多少,取值范围是 1~65535

二、master2配置文件:

server-id=3
log-bin=mysql-bin
binlog-ignore-db=mysql
binlog-do-db=testdb
binlog_format=STATEMENT
log-slave-updates
auto-increment-increment=2
auto-increment-offset=2 # 注意起始值不一样

三、slave1配置文件:

server-id=2
relay-log=mysql-relay

四、slave1配置文件:

server-id=4
relay-log=mysql-relay

五、双主机,双从机重启 mysql 服务
六、主机从机都必须关闭防火墙
七、在两台主机上建立账户并授权 slave

create user 'slave'@'%' identified by 'qkm19981013';
grant replication slave on *.* to 'slave'@'%';
flush privileges;

八、查看 master1 的主机状态,记录下binlog日志文件名和position点的值,在slave1上执行以下语句:

change master to master_host='192.168.0.12',master_port=3307,master_user='slave',master_password='qkm19981013',master_log_file='mysql-bin.000001',master_log_pos=156;

九、查看 master2 的主机状态,记录下binlog日志文件名和position点的值,在salve2上执行以下语句:

change master to master_host='192.168.0.12',master_port=3309,master_user='slave',master_password='qkm19981013',master_log_file='mysql-bin.000001',master_log_pos=156;

十、在slave1和slave2上开启主从复制

start slave;
show slave status\G;

十一、最后一步,搭建 master1和master2的互备主从,即master1复制master2,master2复制,master1:

master1设置master2为主机:
change master to master_host='192.168.0.12',master_port=3309,master_user='slave',master_password='qkm19981013',master_log_file='mysql-bin.000001',master_log_pos=156;
start slave;
show slave status\G;
master2设置master1为主机:
change master to master_host='192.168.0.12',master_port=3307,master_user='slave',master_password='qkm19981013',master_log_file='mysql-bin.000001',master_log_pos=156;
start slave;
show slave status\G;

最后的效果就是,我们在 master1上面建立 testdb 数据库之后,其他三个MySQL都同步建立 testdb 数据库了,接着再建立 mytbl 表,其他三个也都建立,往表中插入 insert into mytbl values(1, @@hostname); 之后出现了四个数据库的数据不一致,@@hostname是系统变量,每个系统不一样,所以不同,这也验证了bin-log默认的格式是复制 SQL 语句这一说法。
在这里插入图片描述


需要注意的一点

mysql 8.0 默认使用 caching_sha2_password 身份验证机制 —— 从原来的 mysql_native_password 更改为 caching_sha2_password。
从 5.7 升级 8.0 版本的不会改变现有用户的身份验证方法,但新用户会默认使用新的 caching_sha2_password 。
所以在 slave 连接 master的时候,show slave status\G; 可能会出现:authentication plugin 'caching_sha2_password’的异常,这是因为MySQL8.0之后改变了密码验证器,我们只需要把在主机建立的授权用户的密码验证器改成mysql_native_password就好了,语句如下:

ALTER USER 'slave'@'192.168.0.12' IDENTIFIED WITH mysql_native_password BY 'qkm19981013';

MyCat登录访问


balance 设置成 1,再添加上 写主机信息
<dataHost name&#61;"host1" maxCon&#61;"1000" minCon&#61;"10" balance&#61;"1" writeType&#61;"0" dbType&#61;"mysql" dbDriver&#61;"native" switchType&#61;"1" slaveThreshold&#61;"100"><heartbeat>select user()heartbeat><writeHost host&#61;"hostM1" url&#61;"192.168.0.12:3307" user&#61;"root" password&#61;"qkm19981013"><readHost host&#61;"hostS1" url&#61;"192.168.0.12:3308" user&#61;"root" password&#61;"qkm19981013"/>writeHost><writeHost host&#61;"hostM2" url&#61;"192.168.0.12:3309" user&#61;"root" password&#61;"qkm19981013"><readHost host&#61;"hostS2" url&#61;"192.168.0.12:3310" user&#61;"root" password&#61;"qkm19981013"/>writeHost>dataHost>

推荐阅读
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文介绍了如何在MySQL中将零值替换为先前的非零值的方法,包括使用内联查询和更新查询。同时还提供了选择正确值的方法。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
author-avatar
非徒雨思_184
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有