MySQL分布式数据库实现
本篇文章实验内容的运行环境基于Windows7,采用bin-log实现主从数据库的数据同步,由数据库中间件mycat实现负载均衡与读写分离。文章将围绕着mysql主从配置,mycat安装使用进行,数据库集群与mycat实现数据库读写分离,负载均衡等功能。
系统环境:Windows7 32位
JDK: Version :1.8
Mysql:Version : 5.5.53
Mycat: Vesion :1.6.0
一 、MySQL主从配置
环境部署:
mysql_master : 127.0.0.1:3311
mysql_slave :127.0.0.1:3310
1.主数据库配置
#主从配置
#文件名mysql-bin-1
log_bin=E:\mysql\MySQL_Master\MySQL\mysql-bin-1
#服务ID,用于区分服务,范围1~2^32-1
server_id=11
#MySQL 磁盘写入策略以及数据安全性
#每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去
innodb_flush_log_at_trx_commit=1
#当sync_binlog =N (N>0) ,MySQL 在每写 N次 二进制日志binary log时,会使用fdatasync()函数将它的写二进制日志binary log同步到磁盘中去。sync_binlog 的默认值是0,像操作系统刷其他文件的机制一样,MySQL不会同步到磁盘中去而是依赖操作系统来刷新binary log。
sync_binlog=1
#同步数据库
binlog-do-db=mycat_pbm
binlog-do-db=mycat_ura
#mysql复制模式,三种:SBR(基于sql语句复制),RBR(基于行的复制),MBR(混合模式复制)
binlog_format=MIXED #混合模式复制
expire_logs_days=7 #binlog过期清理时间
max_binlog_size=20M #binlog每个日志文件大小
2.从数据库配置
#主从配置
log_bin=E:\mysql\MySQL_Slave\MySQL\mysql-bin-2 #文件名mysql-bin-2
server_id=10 #服务ID,用于区分服务,范围1~2^32-1
#MySQL 磁盘写入策略以及数据安全性
#每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去
innodb_flush_log_at_trx_commit=1
#当sync_binlog =N (N>0) ,MySQL 在每写 N次 二进制日志binary log时,会使用fdatasync()函数将它的写二进制日志binary log同步到磁盘中去。sync_binlog 的默认值是0,像操作系统刷其他文件的机制一样,MySQL不会同步到磁盘中去而是依赖操作系统来刷新binary log。
sync_binlog=1
binlog-do-db=mycat_pbm
binlog-do-db=mycat_ura
#mysql复制模式,三种:SBR(基于sql语句复制),RBR(基于行的复制),MBR(混合模式复制)
binlog_format=MIXED #混合模式复制
expire_logs_days=7 #binlog过期清理时间
max_binlog_size=20M #binlog每个日志文件大小
3.设置主数据库
进入mysql_master
mysql -uroot -proot -P3311
创建访问用户
用户名:backup
密码:root
grant replication slave on *.* to 'backup'@'%' identified by 'root';
查看master状态
show master status
4.设置从数据库
进入mysql_slave
mysql -uroot -proot -P3310
设置主数据库
change master to
master_host='127.0.0.1',
master_port=3311,
master_user='backup',
master_password='root',
master_log_file='mysql-bin-1.000001',
master_log_pos=988;
启动备份
start slave
查看备份情况
show slave status\G
自此,我们的数据库主从集群搭建完成。目前实现的master数据修改后会同步到slave上,这就可以实现简单的主从数据同步了,下面,我们将通过Mycat来帮住我们实现负载均衡。读写分离。
二、MyCat的简单使用
1.配置Schema
select user()
balance属性
balance=”0”, 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上
balance=”1”,全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡
balance=”2”,所有读操作都随机的在 writeHost、 readhost 上分发。
balance=”3”, 所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力
writeType 属性
负载均衡类型,目前的取值有 3 种:
writeType=”0”, 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost, 重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties
writeType=”1”,所有写操作都随机的发送到配置的 writeHost
2.配置Server
配置用户名,密码
123456
PBM_DB
user
PBM_DB
true
3.启动mycat
./mycat.bat start
如果出现异常,可以在log文件夹内查阅wrapper.log
三、测试
1.测试mycat链接
链接至mycat,对PBM_DB库中pbm_area 表进行插入工作
insert into pbm_area values('10','北极','7');
链接至mysql_server ,查询所有数据
select * from pbm_area
链接至mysql_slave,查询所有数据
select * from pbm_area
这说明我们的主从数据同步正常,mycat可以对我们数据库进行读写。
2.测试mycat读写分离
修改mysql_slave
update pbm_area set name='北极啊啊啊' where id ='10'
从mycat中查询所有数据
select * from pbm_area where id ='10'
我们发现该条数据的name字段在北极与北极啊啊啊,之间跳动变化,这说明数据读取是在master与slave直接交换的,说明我们的mycat负载均衡实现了。