读写分离概念
使用数据库中间件技术(mycat),让数据的查询(select)和写操作(insert update
delete)在不同的主机上数据库执行,这就读写分离。
读写分离规划
读写分离配置
前提:先装好jdk(上传,解压,配置)
安装vim: yum -y install vim*
1.克隆mycat主机,修改IP,修改主机名称,重启,使用xshell连接
2.下载mycat,上传到虚拟机中,解压,配置环境变量
解压:
tar -xzvf software/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/
配置环境变量:
vim /etc/profile
最后一行改为:
export MYCAT_HOME=/usr/mycatexport PATH=$PATH:$JAVA_HOME/bin:$MYCAT_HOME/bin
source /etc/profile
测试是否成功,myc+tab键,就会出来mycat
配置server.xml
vim /usr/mycat/conf/server.xml
配置schema.xml文件
vim /usr/mycat/conf/schema.xml
vim /usr/mycat/conf/log4j2.xml
读写分离测试
先启动4台mysql,在创建好的数据库创建表
-- 创建表
create table tb_dept(
deptno int primary key auto_increment comment '主键自增',
dname varchar(20) comment '部门名称',
loc varchar(30) comment '部门位置'
);
启动mycat
mycat startjps 看到WrapperSimpleApp或者 ps -ef|grep mycat|grep -v grep
使用navicat连接mycat
测试读写分离
-- 添加语句(多个)
insert into tb_dept(dname,loc) values('dev1','zz1');insert into tb_dept(dname,loc) values('dev2','zz2');insert into tb_dept(dname,loc) values('dev3','zz3');insert into tb_dept(dname,loc) values('dev4','zz4');
-- 更新语句
update tb_dept set dname='dev11' where deptno=1;
-- 删除语句
delete from tb_dept where deptno=4;
每执行一个写操作,都查询mycat日志,看该语句在哪一台mysql执行
grep insert /usr/mycat/log
-- 查询语句(多次执行)
select * from tb_dept;grep select /usr/mycat/log
自动故障切换的测试
1) 让mysql1宕机
service mysqld stop
2) 继续在mycat测试添加,修改,删除和查询
insert into tb_dept(dname,loc) values('dev16','zz16');insert into tb_dept(dname,loc) values('dev17','zz17');insert into tb_dept(dname,loc) values('dev18','zz18');
-- 更新语句
update tb_dept set dname='dev133' where deptno=13;
-- 删除语句
delete from tb_dept where deptno=13;
-- 查询语句(多次执行)
select * from tb_dept where deptno=2;
3)让M1恢复正常:
service mysqld startnsert into tb_dept(dname,loc) values('dev16','zz16');insert into tb_dept(dname,loc) values('dev17','zz17');insert into tb_dept(dname,loc) values('dev18','zz18');
-- 更新语句
update tb_dept set dname='dev133' where deptno=13;
-- 删除语句
delete from tb_dept where deptno=13;
-- 查询语句(多次执行)
select * from tb_dept;