前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mycat实现mysql主从分离,先主从复制,后主从分离

mycat实现mysql主从分离,先主从复制,后主从分离

作者头像
高大北
发布2022-06-14 20:18:19
2430
发布2022-06-14 20:18:19
举报

首先准备两个数据库mysql安装 主节点:192.168.88.180 从节点:192.168.88.181

主从复制

主库配置修改(Master)

路径:/etc/my.cnf

server_id配置与log_bin配置

本环境中 server_id 是 1 MySQL 服务唯一标识 配置要求: server_id 任意配置,只要是数字即可 server_id Master 唯一标识数字必须小于 Slave 唯一标识数字. 本环境中 log_bin 值 : master_log 开启日志功能以及日志文件命名,log_bin=master_log 变量的值就是日志文件名称.是日志文件名称的主体. MySQL 数据库自动增加文件名后缀和文件类型.

1651195102962
1651195102962

重启mysql

代码语言:javascript
复制
service mysql restart

登录mysql

从mysql的安装路径下进入

代码语言:javascript
复制
./bin/mysql -uroot -h127.0.0.1 -p123456

创建用户

在 MySQL 数据库中,为不存在的用户授权,就是同步创建用户并授权. 此用户是从库访问主库使用的用户 ip 地址不能写为%. 因为主从备份中,当前创建的用户,是给从库 Slave 访问主库 Master使用的.用户必须有指定的访问地址.不能是通用地址. grant all privileges on . to ‘username’@’ip’ identified by ‘password’ with grant option; flush privileges;

代码语言:javascript
复制
grant all privileges on *.* to 'myslave'@'192.168.88.181' identified by 'myslave' with grant 
option;
flush privileges;
查看用户
代码语言:javascript
复制
use mysql;
select host, user from user;
1651195316737
1651195316737

从库配置修改(slave)

修改my.cnf的server_id

从库的 server_id要比主库中的server_id的值要大

1651195401525
1651195401525

然后重启mysql服务

连接mysql服务

停止 Slave 功能
代码语言:javascript
复制
stop slave

配置主库信息

要修改的数据是依据 Master 信息修改的.ip 是 Master 所在物理机 IP. 用户名和密码是Master 提供的 Slave 访问用户名和密码. 日志文件是在 Master 中查看的主库信息提供的.在Master 中使用命令 show master status 查看日志文件名称. change master to master_host=’ip’, master_user=’username’, master_password=’password’, master_log_file=’log_file_name’;

刷新主库日志

代码语言:javascript
复制
 flush logs;
查看主库bin位置
代码语言:javascript
复制
 show mster status;
1651195678872
1651195678872

手动同步文件,从库配置

代码语言:javascript
复制
CHANGE MASTER TO MASTER_LOG_FILE='mysqld-bin.000011',MASTER_LOG_POS=106;

从库重新启动 Slave 功能

代码语言:javascript
复制
start slave;
查看slave配置
代码语言:javascript
复制
show slave status \G; # \G 行转列
1651195838068
1651195838068

接下来就创建数据库,测试去吧。主数据库创建,从数据库就会同步。

mycat读写分离配置

安装JDK

https://www.sky12580.cn/archives/centos7一键离线安装脚本-jdk18

放开相关端口

在主从节点上都放开对端口3306的访问,或者直接关闭防火墙。

代码语言:javascript
复制
# 临时关闭
service iptables stop
service iptables start
# 永久关闭
chkconfig iptables on
chkconfig iptables off
# 查看防火墙状态
service iptables status

安装MyCat

https://www.sky12580.cn/upload/2022/04/Mycat-server-1.6.5-release-20180122220033-linux.tar.gz 直接 解压即可/

代码语言:javascript
复制
tar -zxvf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
配置server.xml(conf文件夹)
代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
 
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
	<system>
	<property name="useSqlStat">0</property>  <!-- 1为开启实时统计、0为关闭 -->
	<property name="useGlobleTableCheck">0</property>  <!-- 1为开启全加班一致性检测、0为关闭 -->
	
	<!-- 指定使用Mycat全局序列的类型:即数据库主键的生成方式
		0为本地文件方式,1为数据库方式,2为时间戳序列方式。
		对于读写分离而言,是不需要考虑主键生成方式的,也就是不需要配置全局序列号的。 -->
		<property name="sequnceHandlerType">2</property>
		
		<property name="processorBufferPoolType">0</property>
		<property name="handleDistributedTransactions">0</property>
		<property name="useOffHeapForMerge">1</property>
		<property name="memoryPageSize">1m</property>
		<property name="spillsFileBufferSize">1k</property>
		<property name="useStreamOutput">0</property>
		<property name="systemReserveMemorySize">384m</property>
		<property name="useZKSwitch">true</property>
	</system>
	
	<!-- 全局SQL防火墙设置 -->
	<!-- 
	<firewall> 
	   <whitehost>
	      <host host="127.0.0.1" user="mycat"/>
	      <host host="127.0.0.2" user="mycat"/>
	   </whitehost>
       <blacklist check="false">
       </blacklist>
	</firewall>
	-->
	
	<!-- 设置连接mycat时的用户名和密码, 逻辑库
		逻辑库是指一个虚拟的数据库,通过这个虚拟的数据库去管理多个真实的数据库
		我这里创建了一个用户名为mycat,密码为123456的账号,该用户可以连接到mycatdb这个逻辑数据库
	-->
	<user name="mycat">
		<property name="password">123456</property>
		<property name="schemas">halodb</property>
	</user>
	
	<!-- root和user账号都是默认生成的,所以一开始什么都不设置的情况下,可以通过这两个账号登录mycat
		注意修改一下属性为schemas的值,默认是TESTDB,但是我们没有在schema.xml文件中配置这个逻辑数据库,所以启动时就会报错,
		所以我们这里将这两个默认账号的schemas都设置为mycatdb
	-->
	<user name="root">
		<property name="password">123456</property>
		<property name="schemas">halodb</property>
		
		<!-- 表级 DML 权限设置 -->
		<!-- 		
		<privileges check="false">
			<schema name="TESTDB" dml="0110" >
				<table name="tb01" dml="0000"></table>
				<table name="tb02" dml="1111"></table>
			</schema>
		</privileges>		
		 -->
	</user>
	
	<user name="user">
		<property name="password">user</property>
		<property name="schemas">halodb</property>
		<property name="readOnly">true</property>
	</user>
 
</mycat:server>
配置schema.xml(conf文件夹)
代码语言:javascript
复制
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
 
	<!-- 这里设置逻辑数据库
		name:指定逻辑数据库的名字
		dataNode: 指向下面dataNode的name属性,进行关联-->
	<schema name="halodb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
		<!--只做读写分离,不做分库分表,Mycat只是帮我们转发一下请求,读转发到从库,写转发到主库,则schema标签里面不用配置table-->
	</schema>
 
	<!-- dataNode表示数据分片,可以理解成一个真实数据库在多个msql中的集合
		 database:表示真实数据库,设置为你想进行读写分离的那个数据库,这里我是要对tfp这个数据库进行读写分离
      	 dataHost: 指向下面dataHost的name属性值	 -->
	<dataNode name="dn1" dataHost="localhost1" database="halodb" />
	<!-- 可以添加多个dataNode标签,来对不同数据库进行读写分离 -->
	
	<!-- dataHost表示真实的mysql实例,需要配置真实的mysql实例列表
		 balance:负载均衡类型,目前的取值有4种:
				balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上;
				balance="1",全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。
				balance="2",所有读操作都随机的在writeHost、readhost上分发。
				balance="3",所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力。
				推荐balance设置为1
		 switchType:用于指定主服务器发生故障后的切换类型。
				-1 表示不自动切换
				1 默认值,自动切换(推荐)
				2 基于MySQL主从同步的状态决定是否切换
				3 基于MySQL galary cluster的切换机制(适合集群)(1.4.1)
				通常情况下,我们MySQL采用双主双从的模式下,switchType为1即可。因为双主从模式下,主从同步关系很复杂,不能根据MySQL的状态来切换。只需要在一个主出问题后,切换到另外的主。
	-->
	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
			  
		
		<!-- heartbeat:用于和后端数据库进行心跳检查的语句,检测MySQL数据库是否正常运行。
		当switchType为1时,mysql心跳检查语句是select user()。
		当switchType为2时,mysql心跳检查语句是show slave status。
		当switchType为3时,mysql心跳检查语句是show status like 'wsrep%'。 -->
		<heartbeat>select user()</heartbeat>

 
		<!--writeHost: 指定写实例(主)
						host属性可以随便写
						user和password表示真实数据库的用户名密码-->
		<writeHost host="hostM3339" url="42.193.121.100:3306" user="jal"
				   password="123456">
			<!-- 指定读实例(从) -->
			<readHost host="hostS3340" url="81.70.199.103:3306" user="jal" password="123456" />
		</writeHost>
		
	</dataHost>
</mycat:schema>

修改conf中 lo4j2.xml的日志等级

修改为debug.

启动

在bin目录中直接

代码语言:javascript
复制
./mycat start

查看logs中的日志文件 没有报错,即可测试

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 主从复制
    • 主库配置修改(Master)
      • server_id配置与log_bin配置
      • 重启mysql
      • 登录mysql
      • 创建用户
    • 从库配置修改(slave)
      • 连接mysql服务
      • 配置主库信息
      • 刷新主库日志
      • 手动同步文件,从库配置
      • 从库重新启动 Slave 功能
  • mycat读写分离配置
    • 安装JDK
      • 放开相关端口
        • 安装MyCat
        • 修改conf中 lo4j2.xml的日志等级
        • 启动
    相关产品与服务
    云数据库 SQL Server
    腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档