文档章节

mysql (ab复制 mysql中间件)

d
 doudou___9958
发布于 2016/11/10 20:44
字数 1143
阅读 8
收藏 0
点赞 0
评论 0

原理图:

mysql ab复制

A->B
master:
    vim /etc/my.cnf
    添加
    log-bin=mysql-bin
    server_id=1
    show master status
    grant replication slave on *.* to repl@'%' identified by 'repl'
    mysql-bin.000001 position 111
重启mysql服务器

slave:
    vim /etc/my.cnf
    log-bin=mysql-bin
    server_id=2

重启mysql服务器
    CHANGE MASTER TO
      MASTER_HOST='mysql-master-host',
      MASTER_USER='repl',
      MASTER_PASSWORD='repl',
      MASTER_PORT=3306,
      MASTER_LOG_FILE='当前二进制日志文件',
      MASTER_LOG_POS=position,
      MASTER_CONNECT_RETRY=10;

A->B OK
A<->B ?
A->B->C ?
A->B->C->A ?


A->B
User1---insert--->A----->B
User1---insert--->B------>??????
ab复制
单向复制

A<->B
User1---insert--->A----->B
User2---insert--->B----->A
疑问如果两个用户都DML同一条记录,那应该是A->B,还是B->A????
双向复制

A->B->C
A->B
A->C
支持一主多从

A->B
C->B
不支持多主一从


对于已有数据的mysql服务器做ab复制
1.全库备份 --master-data=2 mysql-bin.xxxx position xxx2.从库导入主库备份
3.change master to mysql-bin.xxxx position xxx

问题:始终会浪费服务器

解决:告知应用DML操作链接主mysql,select操作链接从mysql
      读写分离
          mysql-proxy
          Amoeba
      mysql集群
          mysql-cluster
      
          MMM
      
          mysql ab双向复制 + keepalived
      grant replication slave on *.* to repl@'%' identified by 'repl';


总结:
    前提:
       ab复制的mysql server版本必须一致
       主必须开启二进制日志
    步凑:
        master:
            /etc/my.cnf
            log-bin=mysql-bin 开启二进制日志
            server_id=1设置服务器ID
            mysql>grant replication slave on *.* to repl@'%' identified by 'repl';
            mysql>show master status;
        记住修改配置文件之后要重启mysql

        slave:
            /etc/my.cnf
            log-bin=mysql-bin开启二进制日志
            server_id=2设置服务器ID
        记住修改配置文件之后要重启mysql
            mysql>CHANGE MASTER TO
                   MASTER_HOST='mysql-master-host',master主机地址
                   MASTER_USER='repl',授权复制的用户
                   MASTER_PASSWORD='repl',密码
                   MASTER_PORT=3306,master端口
                   MASTER_LOG_FILE='mysql-bin.00001',当前二进制日志文件
                   MASTER_LOG_POS=111,从那个position开始
                   MASTER_CONNECT_RETRY=10;重试次数
            mysql>start slave;
            mysql>show slave status\G;
            Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
            以上两个出现yes就算是完成ab复制的功能

            验证:
                可在主库上创建库,在从库上看是否有这个库生成


mysql-proxy 是一个mysql代理程序,主要目的实现mysql的读写分离
是通过lua脚本来实现
软件版本:mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
这是一个通用的二进制安装包
1.解压,安装
    tar -xvf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
    mv mysql-proxy-0.8.5-linux-el6-x86-64bit /usr/local/mysql-proxy
    chown root.root /usr/local/mysql-proxy -R
    useradd mysql-proxy -s /sbin/nologin

2.设置
    2.1由于二进制包中没有提供启动脚本所以需要自行编写启动,我这里已经为大家提供了一个启动脚本(启动脚本名称:mysql-proxy)
    2.2修改lua脚本
        vim /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
        min_idle_connections = 1,
        max_idle_connections = 1,
    2.3添加mysql-proxy的配置文件
        vim /etc/sysconfig/mysql-proxy
        ADMIN_USER="admin"
        ADMIN_PASSWORD="admin"
        ADMIN_ADDRESS=""
        ADMIN_LUA_SCRIPT="/usr/local/mysql-proxy/share/doc/mysql-proxy/admin.lua"
        PROXY_ADDRESS=""
        PROXY_USER="mysql-proxy"
        PROXY_OPTIONS="--daemon --log-level=info --log-use-syslog --plugins=proxy --plugins=admin --proxy-backend-addresses=192.168.242.134:3306 --proxy-read-only-backend-addresses=192.168.242.135:3306 --proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua"

#//--daemon:以守护进程模式启动mysql-proxy
#//--proxy-backend-addresses:后端可读写的mysql服务器的地址和端口
#//--proxy-read-only-backend-addresses:后端只读mysql服务器的地址和端口
#//--proxy-lua-script:完成mysql代理功能的Lua脚本

    2.4启动mysql-proxy
        /etc/init.d/mysql-proxy start
        netstat -anutlp|grep mysql


    2.5验证
        由于需要在mysql-prxoy上面登录mysql服务器所以需要安装一个mysql客户端,如果你不在proxy上登录,那么mysql-proxy服务器连mysql客户端都不许要安装

        在master上面创建一个用户
        grant all on *.* to 'jack'@'%' identified by '123456'
        flush privileges

        登录mysql-proxy的管理端
        mysql -uadmin -padmin -h mysql-proxy-ip --prot 4041
        这里的用户名和密码是启动脚本中设置的用户名和密码并非mysql master所授权的用户
        登录mysql真实提供功能的服务器
        mysql -ujack -p123456 -h mysql-proxy-ip --port 3306
        
        然后在master上使用tcpdump抓包分析
        tcpdump -i eth0 -nn -XX ip dst mysql-master-ip and tcp dst port 3306

        在从服务器上也使用tcpdump抓包分析
        tcpdump -i eth0 -nn -XX ip dst mysql-slave-ip and tcp dst port 3306

        mysql -ujack -p123456 -h mysql-proxy-ip --port 3306
        create database db_name可以看到数据在master上抓包了
        select * from up01;可以看到数据在slave上抓包了

 

        如果没有实现,请多开几个mysql-proxy的连接会话
        并多执行几次select语句

        可以在mysql-proxy的管理端上使用
        select * from backends去查看后端相应信息
        +-------------+----------------------+-------+------+------+-------------------+
        | backend_ndx | address              | state | type | uuid | connected_clients |
        +-------------+----------------------+-------+------+------+-------------------+
        |           1 | 192.168.242.134:3306 | up    | rw   | NULL |                 0 |
        |           2 | 192.168.242.135:3306 | up    | ro   | NULL |                 0 |
        +-------------+----------------------+-------+------+------+-------------------+
        2 rows in set (0.00 sec)
        如果不想写启动脚本就要用以下命令和参数去启动
       /usr/local/mysql-proxy/libexec/mysql-proxy --daemon --log-level=info --log-use-syslog --plugins=proxy --plugins=admin --proxy-backend-addresses=192.168.242.134:3306 --proxy-read-only-backend-addresses=192.168.242.135:3306 --proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua --pid-file=/var/run/mysql-proxy.pid --proxy-address= --user=mysql-proxy --admin-username=admin --admin-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/admin.lua --admin-password=admin

 

© 著作权归作者所有

共有 人打赏支持
d
粉丝 4
博文 44
码字总数 54220
作品 0
成都
探索MySQL高可用架构之MHA(4)

探索MySQL高可用架构之MHA(4) -----构建mysql高可用系列(共9篇) 上一篇文章介绍了本次架构中的Mysql源码安装。本篇文章主要介绍本次架构中的ABBB复制。 首先我们先介绍什么是MySql AB复制???...

顺境其生 ⋅ 2015/07/22 ⋅ 0

Atlas中间件遇到的问题,求大神解惑!

环境: 主库:192.168.5.10:3306 从库:192.168.5.11:3306 Atlas:192.168.5.12 主从库已经做好AB复制并对Atlas帐号进行授权 Atlas配置文件: [mysql-proxy] admin-username = admin admin-p...

Aeon37 ⋅ 2016/04/26 ⋅ 2

Mysql组复制故障恢复测试

在前面的两篇文章中,介绍了mysql组复制的特点及配置过程,本文演示mysql单组复制下的模拟故障测试。 一、组复制所有成员服务器宕机重启后的恢复 连接所有的mysql实例查询当前的组复制成员情...

ylw6006 ⋅ 2017/10/27 ⋅ 0

MYSQL_连接字符串函数

1、concat ()函数 1.1 MySQL的concat函数可以连接一个或者多个字符串,如 mysql> select concat('10'); +--------------+ | concat('10') | +--------------+ | 10 | +--------------+ 1 row......

喵王不瞌睡 ⋅ 2015/07/16 ⋅ 0

基于mysql的主从复制之Mycat简单配置和高可用

what-mycat 1.Mycat就是MySQL Server,而Mycat后面连接的MySQL Server,就好象是MySQL的存储引擎,如InnoDB,MyISAM等. 因此,Mycat本身并不存储数据,数据是在后端的MySQL上存储的,因此数据...

知微不知更 ⋅ 2017/03/31 ⋅ 0

MySQL Group Replication 学习(部署篇+排错篇)

写在前面:之前一直用mariadb 版本,mariadb 集成了galera插件,实现pxc部署较为简单。官方在5.7推出了MySQL Group Replication,之前因为时间原因,一直没有时间搭建,今天也是抱着学习对比...

雪隐千寻 ⋅ 2017/10/20 ⋅ 0

高手问答第 161 期 —— 追求性能和稳定,MySQL 中间件该如何选型?

OSCHINA 本期高手问答(2017 年 7 月 12 日 — 7 月 18 日)我们请来了@叶金荣和@吴炳锡为大家解答 MySQL 中间件选型方面的问题。 叶金荣,知数堂培训联合创始人,Oracle MySQL ACE,MySQL 布...

局长 ⋅ 2017/07/11 ⋅ 34

造火箭基础篇-数据库

数据库事物 数据库事物的四大特性? 1 原子性 2 隔离性 3 持久性 4 一致性 数据库隔离级别? 1 read-uncommitted 2 read-committed 3 repeatable-read 4 serializable MySQL的innodb引擎默认的...

小鱼嘻嘻 ⋅ 2017/12/23 ⋅ 0

使用百度云加速防apache的ab测试ddos攻击

Apache带的有一个ab压力测试的; 具体的概念性的东西;咱不扯;有兴趣的自行搜索; 这里只简单介绍使用方法; windows示例:e:wamp64binapacheapache2.4.17binab.exe -n1000 -c100 http://ba...

白俊遥 ⋅ 2016/05/22 ⋅ 0

mysql数据库多种备份及读写分离搭建

数据库的版本 1.社区版 2.企业版 3.集群版 数据库的安装 1. 专用软件包管理器(二进制) deb 、rpm等 mysql MySQL客户端程序和共享库 mysql-server MySQL服务器需要的相关程序 2. 源代码软件...

夜风狂1102 ⋅ 2017/06/02 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

个人博客的运营模式能否学习TMALL天猫质量为上?

心情随笔|个人博客的运营模式能否学习TMALL天猫质量为上? 中国的互联网已经发展了很多年了,记得在十年前,个人博客十分流行,大量的人都在写博客,而且质量还不错,很多高质量的文章都是在...

原创小博客 ⋅ 今天 ⋅ 0

JavaScript零基础入门——(十一)JavaScript的DOM操作

JavaScript零基础入门——(十一)JavaScript的DOM操作 大家好,欢迎回到我们的JavaScript零基础入门。最近有些同学问我说,我讲的的比书上的精简不少。其实呢,我主要讲的是我在开发中经常会...

JandenMa ⋅ 今天 ⋅ 0

volatile和synchronized的区别

volatile和synchronized的区别 在讲这个之前需要先了解下JMM(Java memory Model :java内存模型):并发过程中如何处理可见性、原子性、有序性的问题--建立JMM模型 详情请看:https://baike.b...

MarinJ_Shao ⋅ 今天 ⋅ 0

深入分析Kubernetes Critical Pod(一)

Author: xidianwangtao@gmail.com 摘要:大家在部署Kubernetes集群AddOn组件的时候,经常会看到Annotation scheduler.alpha.kubernetes.io/critical-pod"="",以表示这是一个关键服务,那你知...

WaltonWang ⋅ 今天 ⋅ 0

原子性 - synchronized关键词

原子性概念 原子性提供了程序的互斥操作,同一时刻只能有一个线程能对某块代码进行操作。 原子性的实现方式 在jdk中,原子性的实现方式主要分为: synchronized:关键词,它依赖于JVM,保证了同...

dotleo ⋅ 今天 ⋅ 0

【2018.06.22学习笔记】【linux高级知识 14.4-15.3】

14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp

lgsxp ⋅ 今天 ⋅ 0

JeeSite 4.0 功能权限管理基础(Shiro)

Shiro是Apache的一个开源框架,是一个权限管理的框架,实现用户认证、用户授权等。 只要有用户参与一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户...

ThinkGem ⋅ 昨天 ⋅ 0

python f-string 字符串格式化

主要内容 从Python 3.6开始,f-string是格式化字符串的一种很好的新方法。与其他格式化方式相比,它们不仅更易读,更简洁,不易出错,而且速度更快! 在本文的最后,您将了解如何以及为什么今...

阿豪boy ⋅ 昨天 ⋅ 0

Python实现自动登录站点

如果我们想要实现自动登录,那么我们就需要能够驱动浏览器(比如谷歌浏览器)来实现操作,ChromeDriver 刚好能够帮助我们这一点(非谷歌浏览器的驱动有所不同)。 一、确认软件版本 首先我们...

blackfoxya ⋅ 昨天 ⋅ 0

线性回归原理和实现基本认识

一:介绍 定义:线性回归在假设特证满足线性关系,根据给定的训练数据训练一个模型,并用此模型进行预测。为了了解这个定义,我们先举个简单的例子;我们假设一个线性方程 Y=2x+1, x变量为商...

wangxuwei ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部