Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 427|回复: 0

怎样解决MySQL数据库主从复制延迟的问题

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-4-26 14:26:16 | 显示全部楼层 |阅读模式

          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内存虚拟机)。请参考官方测试吧

     

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-12-23 09:14 , Processed in 0.174018 second(s), 27 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表