mysql分布式数据库实现(一)

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

《mysql分布式数据库实现(一)》 image.png

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

《mysql分布式数据库实现(一)》 image.png

自此,我们的数据库主从集群搭建完成。目前实现的master数据修改后会同步到slave上,这就可以实现简单的主从数据同步了,下面,我们将通过Mycat来帮住我们实现负载均衡。读写分离。

二、MyCat的简单使用

1.配置Schema

<schema name="PBM_DB" checkSQLschema="false" sqlMaxLimit="100">
        <!-- auto sharding by id (long) -->
        <table name="pbm_area" dataNode="dn1"  />
    </schema>
    <dataNode name="dn1" dataHost="localhost1" database="mycat_pbm" />
    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="2"
              writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        
        <writeHost host="host_master" url="localhost:3311" user="root" password="root">
            <readHost host="host_slave" url="localhost:3310" user="root" password="root" />
        </writeHost>
        
    </dataHost>


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

配置用户名,密码

<user name="root" defaultAccount="true">
        <property name="password">123456</property>
        <property name="schemas">PBM_DB</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">PBM_DB</property>
        <property name="readOnly">true</property>
    </user>

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分布式数据库实现(一)》 image.png

链接至mysql_slave,查询所有数据

select * from pbm_area

《mysql分布式数据库实现(一)》 image.png

这说明我们的主从数据同步正常,mycat可以对我们数据库进行读写。

2.测试mycat读写分离

修改mysql_slave

update pbm_area set name='北极啊啊啊' where id ='10'

从mycat中查询所有数据

select * from pbm_area where id ='10'

《mysql分布式数据库实现(一)》 image.png

《mysql分布式数据库实现(一)》 image.png

我们发现该条数据的name字段在北极与北极啊啊啊,之间跳动变化,这说明数据读取是在master与slave直接交换的,说明我们的mycat负载均衡实现了。

    原文作者:Jayden梅
    原文地址: https://www.jianshu.com/p/4503fe0ace87
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞