win mycat及mysql主从库、读写分离的初使用

1、mysql主从复制。

服务器信息如下:
服务器主机名ip说明
mycat-node192.168.1.73mycat服务器,连接时使用该服务器
mycat-jessie192.168.1.73物理数据库1,作为主库master
mycat-jyp192.168.1.52物理数据库2,作为从库slave
备注:实验时,务必关闭关闭机器的iptables防火墙和selinux。
a) 安装mysql,请自行安装。
安装过程此处略...

b) mysql主从复制。
sql1: 登录用户名和密码:root/root
sql2: 登录用户名和密码:root/123456
1.1 主库master的配置

1)、找到数据库的配置文件

(my.cnf Linux系统)或者(my.ini win系统)

C:\ProgramData\MySQL\MySQL Server 5.7\my.ini

2)、master配置:
找到mysqld部分,插入如下内容:


# 配置主从:
# 唯一,要与slave的不同。
server-id=1

skip-grant-tables
#(mysql路径)
basedir = C:\ProgramData\MySQL\MySQL Server 5.7\
#(data路径,存放日志文件)
datadir = C:\ProgramData\MySQL\MySQL Server 5.7\Data\

# 开启二进制日志
log-bin = mysql-bin

# 需要同步的数据库。如果是多个同步库,就以此格式另写几行即可。如果不指明对某个具体库同步,就去掉此行,表示同步所有库(除了ignore忽略的库)
binlog-do-db=db_img_0
binlog-do-db=db_img_1
binlog-do-db=db_info_0
binlog-do-db=db_info_1
binlog-do-db=role
binlog-do-db=role_user
binlog-do-db=user
# 表示不需要备份的数据库为mysql
binlog-ignore-db=mysql

3)、配置:

a) 首先重启mysql服务,
右键计算机管理---服务---mysql停止/启动。

b) 创建用户:
// CREATE USER ' 使用名 '@' 从库 IP 地址 ' IDENTIFIED BY ' 密码 ';
mysql>create user 'ir'@'192.168.1.52' identified by '123456';

c) 分配权限:
// GRANT REPLICATION SLAVE ON . TO ' 使用名 '@' 备机 IP 地址 ';
grant replication slave on *.* to 'ir'@'192.168.1.52';  

d) 刷新权限:
mysql> flush privileges; 

e) 查看master状态:

             File 的值为:    mysql-bin.000013;
         Position 的值为:    154;
     Binlog_Do_DB 的值为:    test;
 Binlog_Ignore_DB 的值为:    manual,mysql ;


记下 File 、 Position 的值,配置从库要用到。

1.2 主库master的配置

1)、master配置:
找到mysqld部分,插入如下内容:


# 配置主从:
# 与主库不同,
server-id=2

skip-grant-tables
#(mysql文件夹路径)
basedir = C:\ProgramData\MySQL\MySQL Server 5.7\
#(data路径,存放日志文件)
datadir = C:\ProgramData\MySQL\MySQL Server 5.7\Data\

# 开启二进制日志
log-bin = mysql-bin
# 需要同步的数据库。
binlog-do-db=db_img_0
binlog-do-db=db_img_1
binlog-do-db=db_info_0
binlog-do-db=db_info_1
binlog-do-db=role
binlog-do-db=role_user
binlog-do-db=user
# 表示不需要备份的数据库为mysql
binlog-ignore-db=mysql

2)、配置:

a) 首先重启mysql服务,
右键计算机管理---服务---mysql停止/启动。

b)、登录上Slave数据库。
用户名改和密码:"root 123456"

c)、停止同步。
输入 "stop slave;"。

d)、重置同步。
输入"reset slave;"。

e)、更改位置。(与Master查看的日志位置保持一致)
CHANGE MASTER TO        
MASTER_HOST='192.168.1.73',          # 主机的IP      
MASTER_USER='ir',                    # 之前创建的用户名       
MASTER_PASSWORD='123456',            # 之前创建的密码      
MASTER_LOG_FILE='mysql-bin.000013',  # 主库中show master status---File下的那个值       
MASTER_LOG_POS=154;                  # 主库中show master status---Position下的那个值       


f)、启动同步。
输入" start slave; "。

g)、查看是否同步成功。
输入" show slave status\G; "
结果如下表格所示:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

二者均为Yes表示成功啦!

如果slave_SQL_Running提示为NO,请等待10-20分钟后再次输入"show slave status\G;"

查看是否同步成功;若仍不成功,请检查之前操作是否存在问题。

输出结果如下:


       Slave_IO_State: Waiting for master to send event                  
          Master_Host: 192.168.1.73                  
          Master_User: ir                  
          Master_Port: 3306                
        Connect_Retry: 60             
      Master_Log_File: mysql-bin.000003         
  Read_Master_Log_Pos: 154              
       Relay_Log_File: DESKTOP-6BJDELI-relay-bin.000004                
        Relay_Log_Pos: 147655155       
Relay_Master_Log_File: mysql-bin.000013             
     Slave_IO_Running: Yes            
    Slave_SQL_Running: Yes              
      Replicate_Do_DB:           
  Replicate_Ignore_DB:  

至此,mysql主从复制,配置完成啦!!!

2、mycat的安装与使用。

2.1.1 安装jdk
因为 MyCat 是用 Java 开发的,因此 MyCat 运行需要安装 JDK(准确来说是 JRE 就够了),并且需要 JDK1.7 或以上版本。

新建JAVA_HOME
变量值为:C:\Program Files\Java\jdk1.8.0_121

新建classpath
值为:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

编辑path
后追加:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin

命令行输入:java -version

C:\Users\sprivacy>java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)

安装成功!!!
2.1.2 安装mycat

官网下载地址: http://www.mycat.io/

本文下载版本为1.6

安装目录为:
D:\soooooft\mycat\Mycat-server-1.6-RELEASE-20161028204710-win\mycat\

设置环境变量:
第一步:
    新建MYCAT_HOME
    变量值为:D:\soooooft\mycat\Mycat-server-1.6-RELEASE-20161028204710-win\mycat(mycat解压路径)

第二步:
    编辑path
    后面追加" %MYCAT_HOME%\bin "

进入mycat—bin目录下: .\mycat.bat start

PS D:\soooooft\mycat\Mycat-server-1.6-RELEASE-20161028204710-win\mycat\bin> .\mycat.bat start
wrapper  | Starting the Mycat-server service...
wrapper  | Mycat-server started.

安装成功。
2.2 配置

2.2.1 修改schema.xml

数据库设置,name与server.xml中schema对应

    <schema name="db_im" checkSQLschema="false" sqlMaxLimit="100">
		<!-- 拆分写法 -->
		<table name="db_img" dataNode="dn11,dn21,dn31,dn41,dn51,dn61,dn71,dn81,dn91,dn101" rule="mod-long1" />
		<table name="db_info" dataNode="dn1,dn2,dn3,dn4,dn5,dn6,dn7,dn8,dn9,dn10" rule="mod-long1" />
		<table name="role_user" primaryKey="id" type="gloab" dataNode="dn11"/>
		<table name="role" primaryKey="id" type="gloab" dataNode="dn11">
			<!-- <childTable name="role_user" joinKey="role_id" parentKey="id"/> -->
		</table>
        <!-- 不拆分写法 -->
		<table name="user" primaryKey="id" type="gloab" dataNode="dn11"/>
	</schema>

分片信息,分库相关配置

    <dataNode name="dn1" dataHost="localhost1" database="db_info_0" />
	<dataNode name="dn2" dataHost="localhost1" database="db_info_1" />
    <dataNode name="dn3" dataHost="localhost1" database="db_img_0" />
    <dataNode name="dn4" dataHost="localhost1" database="db_img_1" />

物理数据库,真正存储数据的数据库,读写分离配置:

    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<!-- can have multi write hosts -->
		<writeHost host="hostM1" url="192.168.1.73:3306" user="root"
				   password="root">
			<!-- can have multi read hosts -->
			<readHost host="hostS2" url="192.168.1.52:3306" user="root" password="123456" />
		</writeHost>
		<!-- <writeHost host="hostS1" url="localhost:3316" user="root"
				   password="123456" /> -->
		<!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
	</dataHost>

备注: schema.xml文件中有三点需要注意:balance=“1”,writeType=“0” ,switchType=“1”

balance=1:readHost及备用的writeHost参与select的负载均衡。
switchType=2:基于mysql主从同步的状态决定是否切换。
hearHbeat:主从切换的心跳语句必须为show slave status;

mycat主从分离只是在读的时候做了处理,写入数据的时候,只会写入到writeHost,需要通过mycat的主从复制将数据复制到readHost。

如果mysql没有主从复制配置,mycat在读写分离后,数据写入writeHost后,readHost一直没有数据。

2.2.2 修改rule.xml

分库分表配置还需要配置rule文件:

    <tableRule name="mod-long">
		<rule>
			<columns>id</columns>
			<algorithm>mod-long</algorithm>
		</rule>
	</tableRule>
	// 此处需要修改,根据db_id取mod;如果还有分片的。复制此段代码继续添加。
	<tableRule name="mod-long1">
		<rule>
			<columns>db_id</columns>
			<algorithm>mod-long</algorithm>
		</rule>
	</tableRule>
	
	// 分片的规则为字符串时:
	<tableRule name="mod-long2">
		<rule>
			<columns>authentication_id</columns>
			<algorithm>partition-by-string-hash-function</algorithm>
		</rule>
	</tableRule>

分片数量:

    <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
		<!-- how many data nodes -->
		<property name="count">4</property>
	</function>

分片规则为字符串时:

    <tableRule name="mod-long3">
		<rule>
			<columns>client_id</columns>
			<algorithm>partition-by-string-hash-function</algorithm>
		</rule>
	</tableRule>
	
	<tableRule name="mod-long4">
		<rule>
			<columns>token_id</columns>
			<algorithm>partition-by-string-hash-function</algorithm>
		</rule>
	</tableRule>

规则为字符串时,需要指定:

    <function name="partition-by-string-hash-function" class="io.mycat.route.function.PartitionByString">
        <property name="partitionLength">512</property> <!--求模基数  zero-based -->
        <property name="partitionCount">2</property> <!-- 分片数量  -->
        <property name="hashSlice">0:6</property> <!-- hash预算位  -->
	</function>

2.2.3 修改server.xml

server 文件跟读写分离关系不大,但是在这里需要该文件配置来连接mycat的用户及权限。

    <user name="root">
		<property name="password">root</property>
		<property name="schemas">imp</property>
		
		<!-- 表级 DML 权限设置 -->
		<!-- 		
		<privileges check="false">
			<schema name="db_im" 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">imp</property>
		<property name="readOnly">true</property>
	</user>
	

备注:
server文件里mycat的登录用户名和密码可以任意设置,该用户名及密码是作为登陆mycat时的账户信息。我这里配置的是root/root账户。

我这里没有做特殊权限,这些可以自己根据需求定义。

逻辑库名(即db_im)也即是登陆mycat后显示的库名,登陆后显示的就是代理的真是的mysql数据库的相关表,要和schema里的相对应。

3、测试

启动mycat服务

// 进入mycat安装目录下的bin文件:输入 .\mycat.bat start

PS D:\soooooft\mycat\Mycat-server-1.6-RELEASE-20161028204710-win\mycat\bin> .\mycat.bat start

出现以下结果,表示启动成功:
PS D:\soooooft\mycat\Mycat-server-1.6-RELEASE-20161028204710-win\mycat\bin> .\mycat.bat start
wrapper  | Starting the Mycat-server service...
wrapper  | Mycat-server started.

navicat 连接mycat:

连接名:    test_mycat
ip:         192.168.1.73
端口:      8066 (mycat默认端口)
用户名:
密码:      root

连接成功,执行相关新增、删除、查询语句,可以实现读写分离相关功能。

停止mycat服务

// 进入bin文件输入:  .\mycat.bat stop
PS D:\soooooft\mycat\Mycat-server-1.6-RELEASE-20161028204710-win\mycat\bin> .\mycat.bat stop
wrapper  | Stopping the Mycat-server service...
wrapper  | Mycat-server stopped.

停止成功!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值