zoukankan      html  css  js  c++  java
  • 怎样解决MySQL数据库主从复制延迟的问题

          mysql replication 中主从延迟是一个比较常见的问题,请看前期一篇博文:怎样解决MySQL数据库主从复制延迟的问题。根据目前有些公司使用的方案,最近测试了两个,其中之一是阿里的relay fetch ,业绩说法数据预热,当然也有其他开源类似开源工具,目前诸如mk-slave-prefetchreplication-prefetch等,感兴趣可以去看看。整理的文档主要是参考了官方的《relay fetch 读取本地binlog 进行备库预热》,有些图片直接引用,还有文字,与官方不同的是安装过程中出现的问题及解决方式,归纳如下:


    基本思路原理 

    备库sql线程执行更新之前,预先将相应的数据加载到内存中,并不能提高sql_thread线程执行sql的能力,也不能加快io_thread线程读取日志的速度。

     

    限制

      1 目前仅支持主库binlog ROW模式

      2 表需要有主键或唯一索引

      3 忽略test和mysql数据库

      4 如果数据库中存在类似tbname_1、tbname_2这样命名的多个表,但其表模式却不相同时,请加上-t选项,例如:tb_1 tb_2 tb_3这样命名的三个表,默认情况下,被认为是同样模式的表,这个特点是淘宝为了适应他们自己的数据库环境

      5 默认最多支持10000个用户表,如果学员支持更多表,可以通过修改宏MAX_TABLE_NUM来进行调整。

    获取源码 

      安装svn客户端从下列地址获取源码:

    svn checkout http://relay-fetch.googlecode.com/svn/trunk/

    安装编译:

    make

    make的时候需要根据mysql安装环境修改Makefile配置文件,relay-fetch依赖mysql的lib库文件等,gcc编译的时候指定,如下红色标示部分:

    #locate your libmysqlclient_r.so

    all:

            gcc -g -O0 -Wall-o relayfetch relayfetch.c -I/usr/local/mysql/include/-L/usr/local/mysql/lib -lmysqlclient_r -lpthread

    clean:

            rm -rf *.orelayfetch

    32位系统安装有warning ,如下

    relayfetch.c: In function ‘daemon_rf’:

    relayfetch.c:2599: warning: format ‘%lu’ expects type ‘longunsigned int’, but argument 4 has type ‘long long unsigned int’

    relayfetch.c:2599: warning: format ‘%lu’ expects type ‘longunsigned int’, but argument 4 has type ‘long long unsigned int’

    不是错误error,没有太多影响

    安装完毕,在安装目录下运行./relayfetch –h,了解一下relayfetch 常用参数,如果报如下错误error while loading shared libraries: libmysqlclient.so.16/18:cannot open shared object file

    应该是mysql的lib库文件引用问题,建立如下类似软链接

    32位

    ln -s /usr/local/mysql/lib/libmysqlclient.so.18  /usr/lib/

    64位

    ln -s /usr/local/mysql/lib/libmysqlclient.so.18  /usr/lib64/

    使用

    运行: ./relayfetch -h来获取选项

    主要选项包括:
    -d debug
    -D 后台运行
    -p 密码
    -u 用户名,请以root用户运行
    -P mysqld端口号
    -s 整数,单位为M,当read线程超过sql线程position这么多字节数时,会等待sql线程,默认为1M
    -S mysql sock文件路径
    -n worker线程数目。默认为5
    -a 当seconds_behind_master大于这个值时,会唤醒relayfetch,默认为1s
    -t 当使用该选项时,表明不使用分表规则(例如,表name_1 和表name_2会被视为同一类表)

    我们可以通过端口号来运行

    ./relayfetch-uroot -t -P3306

    或者通过sock来运行

    ./relayfetch-S /u01/mysql/run/mysql.sock -uroot

    测试效果

     

     这个效果不明显,可能机器原因(本人测试256内存虚拟机)。请参考官方测试吧

  • 相关阅读:
    Jmeter接口测试01
    JSON数据
    HTTP协议概念
    接口测试-概念
    appium 元素定位
    从一个猜单词的小程序开始---征服OOP的思维方式01
    WINDOWS程序设计(003)----窗口类的注册
    WINDOWS程序设计(002)----HELLOWIN程序(源代码及详细解析) WINDOWS程序原理
    Windows下Apache Tomcat?的下载安装和使用
    Windows10下配置虚拟机Virtual Box安装CentOS(Linux)详细教程
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3106663.html
Copyright © 2011-2022 走看看