MyCat - 高级 - 读写分离 - 主从复制(一主一从)搭建 | 学习笔记

简介: 快速学习 MyCat - 高级 - 读写分离 - 主从复制(一主一从)搭建

开发者学堂课程【全面讲解开源数据库中间件MyCat使用及原理(二):MyCat - 高级 - 读写分离 - 主从复制(一主一从)搭建】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/756/detail/13279


MyCat - 高级 - 读写分离 - 主从复制(一主一从)搭建

内容介绍:

一、MySQL 一主一从搭建

二、验证主从同步

 

一、MySQL 一主一从搭建

搭建 MySQL 主从复制机制。首先我们需要准备两台服务器,一台作为 MySQL 的master,也就是主节点;另外一台作为 MySQL 的 slave 从节点。我们使用现成的两台服务器,一台是 157,一台是 158。

image.png

首先我们需要把 157 清掉,158 这台服务器我们也退出 MySQL 的服务端,全部清理掉,159 关闭掉,一个 157 也把他关了。需要把 157 上面的其他服务像 my cat 这样的服务把它停掉,cd /user/local/mycat,执行 bin 目录下的 mycat stop 指令(bin/mycat stop),停止 MyCat。现在 157、158 这两台服务器都已经有了,这两台服务器上装的都有 MySQL。我们想让 157 作为 MySQL 的主节点,158 作为157 的从节点,接下来我们需要搭建主从复制集群,我们需要进行一些配置。

2、master

(1)在 master 的配置文件(/usr/my.cnf)中,配置如下内容:

#mysql 服务 ID,保证整个集群环境中唯一

server-id=1

#mysql binlog 日志的存储路径和文件名

log-bin=/var/lib/mysql/mysqlbin

#设置 logbin 格式

binlog format=STATEMENT

#是否只读,1 代表只读,0 代表读写

read-only=0

#忽略的数据,指不需要同步的数据库

#binlog-ignore-db=mysql

#指定同步的数据库

binlog-do-db=db01

①首先,需要在 master 节点当中来开启 binlog 日志,然后再去指定 binlog 的格式为 STATMENT,再去指定它并不是只读的,是可以读写的,然后再指定同步的数据库。

②第一步我们需要修改 master 的配置文件,Master 157 她的 MySQL 的配置文件是存放在 user 目录下,在这个 /user/my.cnf 目录下。然后 sql_mode=No_ENGINE_SUBSTITUTION,STRICT_

TRANS_TABLES 在这一行下面需要添加一些配置,我们把上面的配置直接粘贴过来。第一个 sever_id=1 指的是服务 ID,只需要保证主从复制集群中他是唯一的就可以了;第二个是开启 binlog,并且指定 binlog 日志的存储目录;第三个就是 binlog 日志的格式设置为 STATEMENT;第四个是读写,当前数据库既可以读又可以写,接下来指定同步的数据库,同步的数据库我们只同步 db01 就可以了。

(2)执行完毕之后,需要重启 Mysql:service myself restart;

保存完成之后,我们需要重启 Mysql,重新启动 Mysql。当 Mysql 重新启动完成之后,我们还需要创建一个同步的账户。

(3)创建同步数据的账户,并且进行授权操作:

Grant replication slave on*.*to'itcast'@‘192.168.192.158' identified by'itcast';

flush privileges;

①因为 mysql 在进行主从复制的时候,它需要有一个同步账户,slave 需要通过这个同步账户来连接 master,然后读取它的二进制日志,所以我们需要创建一个同步的账户。创建同步账户,它所具有的权限是 replication slave,是作为复制的一个从节点。它的用户名 itcast,密码 itcast,他能够在 192.158 这台主机上来访问,所以我们需要执行这条 grant replication slave on *.* to ‘ itcast ‘@’ 192.168.192.158’ identified by ‘itcast ‘; sql 语句。要执行这条语句,需要先连接 mysql,mysql -u root -p,itcast,然后再去执行这条 sql 语句。执行完毕之后,我们还需要执行一条刷新权限的指令 flush privileges; 这些指令都执行,我们当前这个账号就已经创建好了。

(4)查看 master 状态: show master status;

再执行一条指令 show master status;来查看 master 的状态。粘贴这条指令,show master status 就是来查看这条指令的状态。当前的 binlog 日志读取到 mysqlbin.000001,读取到 413 这个位置,同步的数据库是 db01,到此主节点的配置就已经配置好了。

image.png

3.Slave

(1)在 slave 端配置文件中,配置如下内容:

#ymysq 服务端 ID,唯一

server−id=2

#指定 binlog 日志

log-bin=/var/lib/mysql/mysqlbin

#启用中继日志

relay-log=mysql-relay

①接下来配置从节点,打开 158 这台服务器。在从节点上,我们首先还是一样先修改 slave 的配置文件,依然是 /user/my.cnf 这份配置文件。这份配置文件当中,我们配置了三项信息,第一项 sever id 服务的 ID,上面 master 是 1,这里只要不是 1 就可以了;第二个 log bin, 指的是开启 binlog 日志,指定 binlog 日志的存储目录;第三个就是启用 relay log 叫中继日志,要启用中继日志。把配置内容复制一下,打开 vi /user/my.cnf,把配置粘贴过来,保存,重启 MySQL 服务,serve mysql restart。

(2)执行完毕之后,需要重启 Mysql:service mysql restart;

(3)执行如下指令 :

change master to master-host='192.168.192.157', master-user='itcast', master-password='itcast', master-log-file='mysqlbin.000001', master -log-pos=413;

指定当前从库对应的主库的IP地址,用户名,密码,从哪个日志文件开始的那个位置开始同步推送日志。

①MySQL 服务重启完成之后,我们还需要指定当前的主节点是哪个,需要执行这条 change master to master-host='192.168.192.157', master-user='itcast', master-password='itcast', master-log-file='mysqlbin.000001', master -log-pos=413; 指令,这条指令执行的含义就是当前要去指定主节点,主节点是 157,主节点的用户是 itcast,密码也是 itcast,这个用户名和密码就是我们刚才在上面创建的用户名 itcast 和密码 itcast。

②还有一个叫做 Master_log_file,这个 Master_log_file,还有一个叫做 log position,指的就是这两个

image.png

一个是 log file,一个是 log position。原因是因为从节点需要从主节点进行数据库同步的,而数据同步是基于二进制日志进行同步的。既然是基于二进制日志同步的,就要指定从哪个日志开始同步,从这个日志文件的哪个位置进行同步,是需要指定的。复制指令并执行

change master to master-host='192.168.192.157', master-user='itcast', master-password='itcast', master-log-file='mysqlbin.000001', master -log-pos=413;

在执行这条 sql 语句的时候,需要看一下 IP 对不对,用户名、密码对不对,以及日志文件是否匹配,位置是否是 413,不是的话需要适当修改。输入 mysql- u root- p,itcast,执行,

image.png

(4)开启同步操作

start slave

show slave status

开启同步只需要执行 start slave,执行 start slave,接下来查看 slave 的状态。通过 show slave status,查看状态,只需要查看里面的两个选项。

image.png

我们只需要在 show slave status 这条 sql 语句后面加上“\G;”,这个时候就可以查看到具体的信息。在这个里面,重点看两项信息

image.png

一个是 Slave IO Running和 Slave SQL Running,只需要这两项为 yes,就说明我们主从复制已经搭建好了。刚才加了一个 \G,\G 指的是我们可以让横向展示变为纵向展示,这样展示的更加清晰,因为横向一行展示不下,这样就说明主从复制已经搭建好了。搭建好了,需要验证。

 

二、验证主从同步

1、在主库中创建数据库,创建表,并插入数据;

create database db01;

user db01;

create table user(

id int(11) not null auto increment,

name varchar(50) not null,

sex varchar(1),

primary key(id)

) engine=innodb default charset=utf8;

insert into user(id, name, sex) values(null,'Tom','1');

insert into user(id, name, sex) values(null,'Trigger','0');

insert into user(id, name, sex) values(null,'Dawn','1');

(1)需要在主节点创建一个数据库,创建一张表,插入数据,看一下从节点有没有就可以了。通过 show databases,先来看一下主节点的数据库,有这么多如下图:

image.png

接下来看从节点 show databases,从节点的数据库也有这么多如下图:

image.png

执行一条语句,创建一个数据库,复制 create database db01,注意这条语句是在 157,也就是主节点当中执行的,主节点一旦执行会创建 db 01 这个数据库,show databases,db01 这个数据库就有了,接下来查看 158 从数据库,也有 db 01。

image.png

接下来在这个数据库当中切换 db01 这个数据库,在 157 这个数据库 use db01。在这个数据库当中再来创建一张表,创建 user 这张表,表已经创建好了。

create table user(

Id int(11) not null auto_increment,

name varchar(50) not null,

sex varchar(1),

Primary key(id)

)engine=innodb default charset=utf8;

image.png

我们在 158 从数据库切换 db01,接下来 show tables,查看表已经有了。

image.png

我们执行这三条 sql 语句插入三条数据

insert into user(id, name, sex) values(null,'Tom','1');

insert into user(id, name, sex) values(null,'Trigger','0');

insert into user(id, name, sex) values(null,'Dawn','1');

三条数据插入之后,执行一个语句 select* from user,三条数据已经插入到主库了,看从库有没有。执行一条语句 select* from user,如果这条语句执行成功,也能查看数据和主库当中的数据完全一致,则说明主重复制就搭建好了。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
存储 算法 关系型数据库
Mycat【Mycat分片技术(水平拆分-分表、ER表、全局表)】(五)-全面详解(学习总结---从入门到深化)
Mycat【Mycat分片技术(水平拆分-分表、ER表、全局表)】(五)-全面详解(学习总结---从入门到深化)
539 0
|
Shell 程序员 开发工具
码云代码托管平台
码云代码托管平台
|
10月前
|
Java 调度 Maven
新一代 Cron-Job 分布式任务调度平台 正式发布!
简单易用、超低延迟,支持用户权限管理、多语言客户端和多租户接入的分布式任务调度平台。 支持任何Cron表达式的任务调度,支持常用的分片和随机策略;支持失败丢弃、失败重试的失败策略;支持动态任务参数。
396 99
|
9月前
|
人工智能 运维 监控
十万人好评的Zabbix AI助手,10分钟教你get
本文由实施工程师、Zabbix认证专家张宇分享,教你10分钟打造专属Zabbix AI助手。通过结合DeepSeek大模型与本地化Zabbix知识库,无需搭建知识库服务,快速提升运维效率。方案使用Cherry Studio平台对接API,导入500+篇实战经验总结的知识库,精准解决Zabbix告警风暴、Housekeeping等问题。对比测试显示,该助手能有效过滤AI错误建议,提供安全可靠的解决方案,强化用户问题处理能力。此外,作者还是B站Zabbix入门课程主讲人,欢迎进一步学习!
540 0
十万人好评的Zabbix AI助手,10分钟教你get
|
11月前
|
存储 供应链 监控
反向海淘中下单、支付方式、订单、库存管理、物流与配送
反向海淘指海外消费者通过跨境电商平台购买中国商品。其流程包括:1) 海外消费者在支持多语言和货币的平台上选品、加入购物车并填写准确收货信息下单;2) 支付方式涵盖国际信用卡、第三方支付平台(如PayPal)、本地支付及电子钱包;3) 订单管理涉及订单确认、拣货包装、发货跟踪及售后处理,并通过数据分析优化库存与销售;4) 库存管理强调实时监控、多渠道同步、预警补货及滞销处理;5) 物流方案提供国际快递、邮政包裹、专线物流和海外仓等多种选择,确保全程跟踪和清关服务。
|
存储 自然语言处理 搜索推荐
智能语音识别技术在医疗健康领域的深度应用与前景####
本文深入探讨了智能语音识别技术在医疗健康领域的多维度应用,从电子病历的高效录入到远程诊疗的无缝对接,再到患者教育与健康管理的个性化服务,展现了该技术如何显著提升医疗服务效率与质量。通过分析典型应用场景、挑战及解决方案,本文揭示了智能语音识别技术在推动医疗行业智能化转型中的关键作用,并展望了其未来发展趋势与广阔前景。 ####
|
Linux 网络安全
Linux虚拟机与主机和Xshell的连接问题解决
Linux虚拟机与主机和Xshell的连接问题解决
513 1
|
固态存储 开发者
阿里云服务器选购之国际版和国内版的平台对比及建议
阿里云服务器选购之国际版和国内版的平台对比及建议
|
存储 数据安全/隐私保护 Python
`zxcvbn`是一个用于密码强度估计的开源库,由Dropbox开发。它基于一系列启发式方法,包括密码字典、常见密码模式、键盘布局等,来评估密码的强度。
`zxcvbn`是一个用于密码强度估计的开源库,由Dropbox开发。它基于一系列启发式方法,包括密码字典、常见密码模式、键盘布局等,来评估密码的强度。
|
关系型数据库 MySQL Linux
Linux CentOs7 安装Mysql(5.7和8.0版本)密码修改 超详细教程
Linux CentOs7 安装Mysql(5.7和8.0版本)密码修改 超详细教程
1012 1