springboot+mycat数据库中间件+mysql(⼀主⼀备)主从复制
springboot+mycat数据库中间件+mysql(⼀主⼀备)主从复制
硬件:3台linux系统虚拟主机,Ip分别为192.168.43.23做主库(读写,192.168.43.12备库(读),192.168.43.155(安装mycat
数据库中间件)
读写分离架构图
主要实现原理:
下使⽤yum安装mysql
(mastr192.168.43.23,slave192.168.43.12)
2.1安装mysql服务器端:
yuminstallmysql-rver
yuminstallmysql-devel
2.2编辑mastr192.168.43.23mysql配置⽂件
vim/etc/加⼊
default-character-t=utf8//设置字符集
rver_id=23//服务id
log-bin=mysql-bin//开启⽇志
2.3编辑slave192.168.43.12配置⽂件
vim/etc/加⼊
default-character-t=utf8
rver_id=12
log-bin=mysql-bin
binlog_do_db=everyday//表⽰要同步的主机数据库实例是everyday
2.4创建root管理员
mysqladmin-urootpassword123456
2.5登录
mysql-uroot-p输⼊密码即可。
3.开放远程连接权限(开放所有IP以root账号连接)
GRANTALLPRIVILEGESON*.*TO'root'@'%'IDENTIFIEDBY'123456'WITHGRANTOPTION;
4同步主从数据库
4.1主服务器给从服务器授权
登录mysql主服务器,执⾏sql:
grantreplicationslaveon*.*to'root'@'192.168.43.12'identifiedby'123456';FLUSHPRIVILEGES;
然后执⾏此语句SHOWMASTERSTATUS:
4.2登录mysql从服务器,执⾏sql
STOPSLAVE;
changemastertomaster_host='192.168.43.23',master_ur='root',master_password='123456',
master_log_file='mysql-bin.000007',master_log_pos=2070;
STARTSLAVE;
然后执⾏该语句:SHOWSLAVESTATUS查询到结果yes,yes说明同步成功
数据同步原理:通过同步2进制sql⽂件mysql-bin.000007进⾏同步,包含delete,inrt,update等操作记录。
5.安装mycat数据库中间件
什么是mycat
⼀个彻底开源的,⾯向企业应⽤开发的⼤数据库集群
⽀持事务、ACID、可以替代MySQL的加强版数据库
⼀个可以视为MySQL集群的企业级数据库,⽤来替代昂贵的Oracle集群
⼀个融合内存缓存技术、NoSQL技术、HDFS⼤数据的新型SQLServer
结合传统数据库和新型分布式数据仓库的新⼀代企业级数据库产品
⼀个新颖的数据库中间件产品
5.1.安装mycat(192.168.43.155)
解压-C/usr/local/
移动到/usr/local⽬录mvmycat/usr/local
cd/usr/local/mycat/bin
./mycatstart启动
./mycatstop停⽌
5.2配置mycat实现读写分离
#vim/usr/local/mycat/conf///新增2个账号⽤来登录mycat,添加以下内容
在这⾥要注意,默认的虚拟数据名是TESTDB,如果⾥⾯没有配置testdb,那就要把testdb改成⾥⾯有的虚拟数
据名。这⾥定义的⽤户名和密码,虚拟数据库名,并不是在mysql中真实存在的。
:wq保存退出
配置
<?xmlversion="1.0"?>
mycat的配置参数,相当的多。重点说⼀下balance="1"与writeType="0"
e属性负载均衡类型,⽬前的取值有4种:
e="0",不开启读写分离机制,所有读操作都发送到当前可⽤的writeHost上。
e="1",全部的readHost与standbywriteHost参与lect语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2-
>S2,并且M1与M2互为主备),正常情况下,M2,S1,S2都参与lect语句的负载均衡。
e="2",所有读操作都随机的在writeHost、readhost上分发。
e="3",所有读请求随机的分发到wiriterHost对应的readhost执⾏,writerHost不负担读压⼒,注意balance=3只在1.4及
其以后版本有,1.3没有。
ype属性
负载均衡类型,⽬前的取值有3种:
ype="0",所有写操作发送到配置的第⼀个writeHost,第⼀个挂了切到还⽣存的第⼆个
writeHost,重新启动后已切换后的为准,切换记录在配置⽂件中:ties.
ype="1",所有写操作都随机的发送到配置的writeHost。
ype="2",没实现。
#./mycatstart
StartingMycat-rver...
#netstat-tpnl|grep8066
tcp00:::8066:::*LISTEN31728/java
#./mycatstatus
Mycat-rverisrunning(31726).
6配置完成之后添加数据测试
登录windows系统中的mysql客户端进⾏连接
mycat连接⽅式如下:
mycat中间件做读写分离完成
7springboot通过⽂件配置mycat连接池
项⽬⽬录
项⽬依赖
xsi:schemaLocation="/POM/4.0.0/xsd/">
spring:
datasource:
url:jdbc:mysql://192.168.43.155:8066/mydb
urname:mycat
password:mycat
driverClassName:
controller
ller;
;
red;
ller;
ap;
tMapping;
ndView;
;
Service;
@Controller
publicclassTicketController{
@Autowired
privateTicketServiceticketService;
@RequestMapping("/")
publicModelAndViewgetTicketList(){
List
ModelAndViewmav=newModelAndView();
wName("index");
ect("ticketList",ticketList);
returnmav;
};
@RequestMapping("/")
publicModelAndViewgetFtl(ModelAndViewmav){
ect("name","ss");
wName("index");
returnmav;
};
@RequestMapping("/index")
publicStringgetFtlt(ModelMapmap){
ribute("name","你妈");
return"index";
};
}
rvice
e;
;
red;
e;
Mapper;
;
ils;
@Service
publicclassTicketService{
@Autowired
privateTicketMapperticketMapper;
publicList
List
for(Ticketticket:ticketList){
StringbeginTimeStr=Time(inTime());
StringendTimeStr=Time(Time());
inTimeStr(beginTimeStr);
TimeStr(endTimeStr);
}
returnticketList;
}
}
mapper
;
;
;
;
publicinterfaceTicketMapper{
@Select("lect*fromticket;")
List
}
ticket
;
;
/**
*
*@ClassName:Ticket
*@Description:车票信息实体类
*@
*@date2018年1⽉14⽇下午7:29:17
*
*/
publicclassTicket{
/*
*车票ID
*/
privateIntegerticketID;
/*
*开车地点
*/
privateStringstartting;
/*
*到站地点
*/
privateStringdestination;
/*
*价钱
*/
privateIntegerprice;
/*
*开车时间
*/
privateDatebeginTime;
/*
*到站时间
*/
privateDateendTime;
/*
*开车时间字符串
*/
privateStringbeginTimeStr;
/*
*到站时间字符串
*/
privateStringendTimeStr;
publicIntegergetTicketID(){
returnticketID;
}
publicvoidtTicketID(IntegerticketID){
ID=ticketID;
}
publicStringgetStartting(){
returnstartting;
}
publicvoidtStartting(Stringstartting){
ing=startting;
}
publicStringgetDestination(){
returndestination;
}
publicvoidtDestination(Stringdestination){
ation=destination;
}
publicIntegergetPrice(){
returnprice;
}
publicvoidtPrice(Integerprice){
=price;
}
publicDategetBeginTime(){
returnbeginTime;
}
publicvoidtBeginTime(DatebeginTime){
ime=beginTime;
}
publicDategetEndTime(){
returnendTime;
}
publicvoidtEndTime(DateendTime){
e=endTime;
}
publicStringgetBeginTimeStr(){
returnbeginTimeStr;
}
publicvoidtBeginTimeStr(StringbeginTimeStr){
imeStr=beginTimeStr;
}
publicStringgetEndTimeStr(){
returnendTimeStr;
}
publicvoidtEndTimeStr(StringendTimeStr){
eStr=endTimeStr;
}
}
(模板引擎)
车票编号 出发地点 ⽬的地 价钱 发车时刻 到达时刻
<#listticketListasticket>
#list>
全局捕获异常
ption;
p;
;
rvletRequest;
rvletRespon;
tionUtils;
llerAdvice;
ionHandler;
Body;
Status;
/**
*
*@ClassName:GlobalExceptionHandler
*@Description:springboot全局异常捕获
*@author
*@date2018年1⽉26⽇
*
*/
@ControllerAdvice
publicclassGlobalExceptionHandler{
@ResponBody
@ExceptionHandler()
publicMap
if(notation(ss(),)!=null){
try{
throwe;
}catch(Exceptione1){
tackTrace();
}
}
Map
("url",uestURL());
("class",ss());
("cau",());
("message",sage());
returnresMap;
}
}
packageapplication;
Scan;
Application;
AutoConfiguration;
entScan;
/**
*
*@ClassName:application
*@Description:企业级启动⽅式
*@author
*@date2018年1⽉26⽇下午4:27:25
*
*/
@ComponentScan(baPackages=".*")
@MapperScan(baPackages=".*")
@EnableAutoConfiguration
publicclassApplication{
publicstaticvoidmain(String[]args){
(,args);
}
}
点击右键启动项⽬,控制台打印如下⽇志
访问接⼝
结果页⾯
本文发布于:2022-11-25 06:08:17,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/16723.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |