赞
踩
我们通过Mycat.和MySQL 的主从复制配合搭建数据库的读写分离,实现MySQL 的高可用性。
我们将搭建:一主一从、双主双从两种读写分离模式。
一个主机用于处理所有写请求,一台从机负责所有读请求,架构图如下
修改my.cnf
#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
#设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schemae
#设置需要复制的数据库。先配置完环境再去创建数据库
binlog-do-db=需要复制的主数据库名字
#设置logbin格式
binlog_format=STATEMENT
修改my.cnf
#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay
在配置完之后,重启两台机器的mysql。关闭两台机器的防火墙。
#在主机MySQL里执行授权命令
CREATE USER 'slave1'@'%’ IDENTIFIED BY '123123’;
GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'%';
#此语句必须执行。否则见下面。
ALTER USER 'slave1'@'%’ IDENTIFIED WITH mysql native password BY ’123123';
flush privileges;
#查询master的状态
show- master status;
#复制主机的命令 具体数字与具体值和查询master的状态有关
CHANGE MASTER TO MASTER_HOST='主机的IP地址',
MASTER_USER='slave' ,
MASTER_PASSWORD='123123' ,
MASTER_LOG_FILE='mysql-bin.具体数字',MASTER_LOG_POS='具体值';
#启动从服务器复制功能
start slave;
#查看从服务器状态
show slave status\G;
两个参数都是Yes,则说明主从配置成功!
创建数据库与binlog-do-db一致 本文以mydb1为例
创建逻辑库
create database mydb1;
配置数据源(当执行创建库语句以后 mycat在schema中自动生成一个mydb1.schema.json)
在文件里添加"targetName" : “prototype”,
创建数据源
登录Mycat,注解方式添加数据源,指向从机
/*+ mycat:createDataSource{"name":"write","url":"jdbc:mysql://192.168.3.100:3306/mydb1"?useSSL=false&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true","user":"root","password":"123123"} */
/*+ mycat:createDataSource{"name":"read","url":"jdbc:mysql://192.168.3.101:3306/mydb1"?useSSL=false&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true","user":"root","password":"123123"} */
#查询配置数据源结果
/*+ mycat:showDataSources{} */;
更新集群信息,添加dr0从节点.实现读写分离
/*! mycat:createCluster{"name":"prototypr","masters":["write"], "replicas":["read"]} */;
#查看配置集群信息
/*+ mycat:showClusters {} */ ;
在写主机数据库表mydb1中插入带系统变量数据,造成主从数据不一致
INSERT INTO mydb1 VALUES(2,@@hostname) ;
一个主机m1用于处理所有写请求,它的从机s1和另一台主机m2还有它的从机 s2负责所有读请
求。当m1主机宕机后,m2主机负责写请求,m1、m2互为备机。架构图如下
修改my.cnf
#主服务器唯一ID server-id=1 #启用二进制日志 log-bin=mysql-bin #设置不要复制的数据库(可设置多个) binlog-ignore-db=mysql binlog-ignore-db=information_schemae #设置需要复制的数据库。先配置完环境再去创建数据库 binlog-do-db=需要复制的主数据库名字 #设置logbin格式 binlog_format=STATEMENT #在作为从数据库的时候,有写入操作也要更新二进制日志文件 log-slave-updatesk #表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1·..·65535 auto-increment-increment=2 #-表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1·..·65535 auto-increment-offset=1
#主服务器唯一ID server-id=3 #启用二进制日志 log-bin=mysql-bin #设置不要复制的数据库(可设置多个) binlog-ignore-db=mysql binlog-ignore-db=information_schemae #设置需要复制的数据库。先配置完环境再去创建数据库 binlog-do-db=需要复制的主数据库名字 #设置logbin格式 binlog_format=STATEMENT #在作为从数据库的时候,有写入操作也要更新二进制日志文件 log-slave-updatesk #表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1·..·65535 auto-increment-increment=2 #-表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1·..·65535 auto-increment-offset=2
修改my.cnf
#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay
修改my.cnf
#从服务器唯一ID
server-id=4
#启用中继日志
relay-log=mysql-relay
Slave1复制Master1,Slava2复制Master2之后配置两个主机互相复制
创建2条新数据源 write2 read2
在读写分离创建的集群文件上修改
"masters":
["write","write2"],
"replicas":
["read2","write2","read"],
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。