当前位置: 首页 > news >正文

linux复盘:mysql双主与mysql-proxy实现读写分离

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

不停库不锁表在线主从配置

这里用到了前面的innobackupex:https://my.oschina.net/u/3655649/blog/1613276

mysqldump对于导出10G以下的数据库或几个表,还是适用的,而且更快捷。一旦数据量达到100-500G,无论是对原库的压力还是导出的性能,mysqldump就力不从心了。Percona-Xtrabackup备份工具,是实现MySQL在线热备工作的不二选择,可进行全量、增量、单表备份和还原。(但当数据量更大时,可能需要考虑分库分表,或使用 LVM 快照来加快备份速度了)

2.2版本 xtrabackup 能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份,innobackupex通过perl封装了一层xtrabackup,对MyISAM的备份通过加表读锁的方式实现。2.3版本 xtrabackup 命令直接支持MyISAM引擎。

XtraBackup(包含innobackupex)优势 :

  1. 无需停止数据库进行InnoDB热备
  2. 增量备份MySQL
  3. 流压缩到传输到其它服务器
  4. 能比较容易地创建主从同步
  5. 备份MySQL时不会增大服务器负载

mysql主从不同步如何做

show slave status\G
Slave_IO_Running: Yes 
Slave_SQL_Running: No 
可见是Slave不同步 

方法一:忽略错误后,继续同步 
该方法适用于主从库数据相差不大,或者要求数据可以不完全统一的情况,数据要求不严格的情况 解决: 
stop slave; 
#表示跳过一步错误,后面的数字可变 
set global sql_slave_skip_counter =1; 
start slave; 
之后再用mysql> show slave status\G 查看: 
Slave_IO_Running: Yes 
Slave_SQL_Running: Yes 

方法二:厉害了重新搞一遍,主要是数据的同步该方法适用于主从库数据相差较大,或者要求数据完全统一的情况 

MySQL双主(主主)架构方案思路是

1.两台mysql都可读写,互为主备,默认只使用一台(masterA)负责数据的写入,另一台(masterB)备用;

2.masterA是masterB的主库,masterB又是masterA的主库,它们互为主从;

3.两台主库之间做高可用,可以采用keepalived等方案(使用VIP对外提供服务);

4.所有提供服务的从服务器与masterB进行主从同步(双主多从);

5.建议采用高可用策略的时候,masterA或masterB均不因宕机恢复后而抢占VIP(非抢占模式);

这样做可以在一定程度上保证主库的高可用,在一台主库down掉之后,可以在极短的时间内切换到另一台主库上(尽可能减少主库宕机对业务造成的影响),减少了主从同步给线上主库带来的压力;

但是也有几个不足的地方:

1.masterB可能会一直处于空闲状态(可以用它当从库,负责部分查询);

2.主库后面提供服务的从库要等masterB先同步完了数据后才能去masterB上去同步数据,这样可能会造成一定程度的同步延时;

masterA自增长ID:
vi /etc/my.cnf
server-id = 1
auto_increment_offset = 1
auto_increment_increment = 2  #奇数ID
log-bin = mysql-bin  #打开二进制功能,MASTER主服务器必须打开此项(双主)
log-slave-updates = true  #将复制事件写入binlog,一台服务器既做主库又做从库此选项必须要开启

masterB自增长ID:
vi /etc/my.cnf
server-id = 2
auto_increment_offset = 2
auto_increment_increment = 2  #偶数ID
log-bin = mysql-bin  #打开二进制功能,MASTER主服务器必须打开此项
log-slave-updates = true

 添加主从同步账户

masterA上:

mysql> grant replication slave on *.* to 'repl'@'192.168.10.12' identified by '123456';
mysql> flush privileges;

masterB上:

mysql> grant replication slave on *.* to 'repl'@'192.168.10.11' identified by '123456';
mysql> flush privileges;

查看主库的状态
masterA上:

mysql> show master status;

masterB上:

mysql> show master status;

 配置同步信息

masterA上:

mysql> change master to master_host='192.168.10.12',master_port=3306,master_user='repl',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=437;

mysql> start slave;

mysql> show slave status\G;

显示有如下状态则正常:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

masterB上:

#本人是测试环境,可以保证没数据写入,否则需要的步骤是:先masterA锁表-->masterA备份数据-->masterA解锁表 -->masterB导入数据-->masterB设置主从-->查看主从

复制代码
mysql> change master to master_host='192.168.10.11',master_port=3306,master_user='repl',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=120;

start slave;

mysql> show slave status\G;

显示有如下状态则正常:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

mysql-proxy实现读写分离

1、安装lua  (mysql-proxy需要使用lua脚本进行数据转发) 
#tar zxvf 
lua-5.1.4.tar.gz 
#cd lua-5.1.4 
#vi Makefile,修改INSTALL_TOP= 
/usr/local/lua 
#make posix 
#make install 

2、安装libevent 
#tar 
zxvf libevent-2.0.8-rc.tar.gz 
#cd libevent-2.0.8-rc 
#./configure 
--prefix=/usr/local/libevent 
#make && make install 

3、安装check 
#tar zxvf check-0.9.8.tar.gz 
#cd check-0.9.8 

#./configure && make && make install 

4、安装mysql客户端 

#tar zxvf mysql-5.0.92.tar.gz 
#cd mysql-5.0.92 
#./configure 
--without-server && make && make install 

5、设置环境变量 
(安装mysql-proxy所需变量) 
#vi /etc/profile 
export 
LUA_CFLAGS="-I/usr/local/lua/include" LUA_LIBS="-L/usr/local/lua/lib -llua -ldl" 
LDFLAGS="-L/usr/local/libevent/lib -lm" 
export 
CPPFLAGS="-I/usr/local/libevent/include" 
export 
CFLAGS="-I/usr/local/libevent/include" 
# source /etc/profile 

6、安装mysql-proxy 
#tar zxvf mysql-proxy-0.6.0.tar.gz 
#cd 
mysql-proxy-0.6.0 
# ./configure --prefix=/usr/local/mysql-proxy --with-mysql 
--with-lua 
#make && make install 

7、启动mysql-proxy 

本次对两台数据库实现了读写分离;mysql-master为可读可写,mysql-slave为只读 

#/usr/local/mysql-proxy/sbin/mysql-proxy 
--proxy-backend-addresses=192.168.1.201:3306 
--proxy-read-only-backend-addresses=192.168.1.202:3306 
--proxy-lua-script=/usr/local/mysql-proxy/share/mysql-proxy/rw-splitting.lua 
&  

注:如果正常情况下启动后终端不会有任何提示信息,mysql-proxy启动后会启动两个端口4040和4041,4040用于SQL转发,4041用于管理mysql-proxy。如有多个mysql-slave可以依次在后面添加 

 

转载于:https://my.oschina.net/u/3655649/blog/1617207

相关文章:

  • 10.28 rsync工具介绍 10.29/10.30 rsync常用选项 10.31 rsync通
  • 三角形内随机生成一个点
  • 04.spring security oauth2认证中心 集成zuul网关的代码分析
  • 2018 掌握好这几点方法学习Linux,一定比别人更快入门运维!
  • python小白项目推荐
  • 使用Jackson来实现java对象和json格式的相互转换
  • Python设计模式——观察者模式
  • 如何免费创建移动端论坛APP?
  • 3.7字典
  • css线性炫酷动画
  • maven版本与jdk版本 对应关系
  • JSP --学习
  • js 拾遗之return
  • Linux颜色文件+tab+快捷键
  • [HNOI2010]BUS 公交线路
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • miaov-React 最佳入门
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • python大佬养成计划----difflib模块
  • Shell编程
  • tweak 支持第三方库
  • Webpack 4x 之路 ( 四 )
  • 关于Flux,Vuex,Redux的思考
  • 利用DataURL技术在网页上显示图片
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 三栏布局总结
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 听说你叫Java(二)–Servlet请求
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • elasticsearch-head插件安装
  • #include到底该写在哪
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (理论篇)httpmoudle和httphandler一览
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (小白学Java)Java简介和基本配置
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .考试倒计时43天!来提分啦!
  • @Not - Empty-Null-Blank
  • @property @synthesize @dynamic 及相关属性作用探究
  • [AX]AX2012 SSRS报表Drill through action
  • [BZOJ 2142]礼物(扩展Lucas定理)
  • [BZOJ] 2044: 三维导弹拦截