
MySQL互为主从+FEDERATED 引擎实现多路径写入功能(Mysql写负载均衡).docx
3页Mysql 互为主从互为主从+FEDERATED 实现写负载均衡实现写负载均衡Edit by 笑天涯 Q:280916071环境规划:机器名操作系统IP角色MySQL01CentOS5.6 32bit10.1.1.70Master—>slaveMySQL02CentOS5.6 32bit10.1.1.80Slave—>master1、 概述:Mysql 主重复制多用在数据库容灾,读写分离方面,因互为主从结构在高并发下各自自增键生成的ID 可能导致主键冲突,所有一般的结构式一主多重结构如图一:图 1 图二而是用双主或多主并是用全局唯一 ID 生成机制的结构如图 2在图一中 master 节点是这个系统的写操作最频繁的节点,如果该节点出现故障则新的订单将无法写入库,可以采用淘宝是用的多系统拆策略,将不同系统的数据库独立,每个系统单独一个主从结构体但是采用多主相互复制的结构,可以负载均衡写操作,实现多个写入口加多个读出口,提示系统的并发链接数量2、 安装主要操作(1)、系统安装 略过(2)、mysql 安装:本实验使用的 mysql 版本是 mysql-5.5.34.tar.gz 、cmake 版本是 cmake-2.8.4.tar.gz,其他依赖包采用 yum 安装。
1 创建 mysql 用户和组:Groupadd mysql --在从端 sqlcmd 中通过如下语句连接上主端(注意 ip、用户名、密码、文件、位置)change master to master_host='10.1.1.80',master_user='repl',master_password='123', master_log_file='mysql-bin.000009' ,master_log_pos=107;因是互为主从,所有在 2 台服务器上交换再次操作4、 配置 FEDERATED 表在 mysql 中执行:show engines\G;可看到 FEDERATED 引擎是 yes 则可用在 MySQL01 test 库中创建表:Create table getid(maxid bigint not null,uname varchar(30))engine=Innodb;这个是普通的 innodb 表,用于记录数据库的最大 ID 当前值,该表非常重要,需经常做备份在 MySQL02 的 test 库中创建表:Create table getid(maxid bigint not null,uname varchar(30))engine= FEDERATED CONNECTION=’mysql://repl:123@10.1.1.70:3306/test/getid’ ;该表是 MySQL01 中的 id 最大表在 MySQL02 上的映射可像本地宝一样操作。
创建获取过程:CREATE PROCEDURE `get_id`(in in_uname VARCHAR(30),--该表可配置多个选项out out_ActorID BIGINT)BEGINstart TRANSACTION;update test.getid--更新最大值set maxid=maxid+1where uname=in_uname;select maxid into out_ActorID from test.getid where uname=in_uname; --返回最大值COMMIT;end5、 测试:在 zhw 库中创建表Create table GameActor(ActorID bigint not null,uname varchar(30) not null);该表用来保存角色的 ID 和角色名,因角色 ID 需全局唯一,所以需要唯一机制创建角色 ID创建角色过程:CREATE PROCEDURE `CreateActor`(in in_ActorName VARCHAR(30))BEGINDECLARE n bigint;call test.get_id('ActorID',n);insert into zhw.GameActor values(n,in_ActorName);COMMIT;END。












