首页 > 数据库 >MYSQL MHA VS GTID 与 BINLOG SERVER

MYSQL MHA VS GTID 与 BINLOG SERVER

时间:2023-06-19 16:31:48浏览次数:39  
标签:BINLOG binlog -- server MHA VS MYSQL SERVER


勘误,昨天有一位 海外 friend 指出昨天文中 postgresql  bloom 中的第四步截图是并行扫描,而没有用到bloom 索引,这里抱歉,经查实截图错误,下面是重新的截图,同时另一幅截图也有问题建立索引时缺少 USING bloom,感谢您。

另也希望大家发现可以发现我的错误,并及时指出,让我们大家可以成长的更快

第四步截图

MYSQL  MHA VS GTID  与 BINLOG SERVER_远程库

今天正文

MYSQL  MHA VS GTID  与 BINLOG SERVER_远程库_02

其实MHA是真没有什么好说的,一个成熟的不能在成熟的 MYSQL 高可用的方案。但一般来说大部分企业部署 MHA 都是配以传统的复制方式,而MYSQL 从5.6 开始已经进入了 GTID 的世界,而MHA 从0.56 也支持了GTID,虽然那个日本人早就不在给大家升级MHA 的版本了,但貌似最近一个白人小哥在继续升级MHA 目前的最新版本是 0.58 。到目前为止没有任何一款数据库有 MYSQL的高可用的方案多(I am sorry ,其实 PG 的方案也不少)。

所以怎么将MYSQL的 MHA 的方案升级到 GTID 的方式就可以说说了,其中有一点就是,为什么要多了一个 binlog server 的设置。

MYSQL  MHA VS GTID  与 BINLOG SERVER_远程库_03

我们从上面Yoshinori 的BLOG 中截取了一段

在binlog部分,您可以定义mysqlbinlog流媒体服务器。当MHA执行基于GTID的故障转移时,MHA检查binlog服务器,如果binlog服务器记录的BINLOG在其他从属服务器之前,MHA在恢复之前将来自binlog服务器的差异binlog事件应用到新主服务器。当MHA执行基于非gtid(传统)的故障转移时,MHA将忽略binlog服务器,更多细节可以在文档中找到。

并且其中还提到了支持自定义的mysql binlog location, 在使用GTID 的MYSQL复制中,并且使用了auto_postion=1 的情况下MHA 将不能使用老的模式来获得差异的日志,而这里使用BINLOG SERVER 可以有效的提高增强MYSQL 主从切换中,可以让新主从 BINLOG SERVER 中获得差异的日志,并且补齐。

从MYSQL  5.6开始 MYSQL  提供了 BINLOG SEVER 的概念,通过BINLOG SERVER 来备份BINLOG 日志,并且根据相关的原理这样的备份的BINLOG 日志基本上是实时的。

首先从MHA 0.56 添加了 master_binlog_dir 这个参数,这个参数是防止MYSQL 死机后无法获得BINLOG 的具体的位置而设定的。(当然如果LINUX 系统同死机了,那这个设置也是无效的)

MYSQL  MHA VS GTID  与 BINLOG SERVER_mysql_04

在启动了 GTID 的复制方式后,并且添加了BINLOG SERVER 选项后,尝试终止MASTER ,可以看到 MHA 已经自动判断出 MYSQL 使用 GTID的方式进行的复制。

MYSQL  MHA VS GTID  与 BINLOG SERVER_服务器_05

并且在信息中已经有相关 GTID 的位置信息

MYSQL  MHA VS GTID  与 BINLOG SERVER_远程库_06

切换是成功的,那如何建立一个BINLOG SERVER 其实对MYSQL 数量众多的情况下,是有必要建立一个 BINLOG SERVER 来保存MYSQL 服务器的BINLOG 数据。(你也可以指定master 和其他slave 的 binlog 目录作为binlog server)

可以在一台定义好的MYSQL SERVER 中设置

nohup mysqlbinlog -R --raw --host='192.168.198.201' --port=3306 --user='repl' --password='1234.com' --stop-never --stop-never-slave-server-id=1202 mysql-bin.000001 --result-file=/data/binlog_backup/ &

其中 mysql-bin.000001 是告知传送BINLOG 是从哪个 BINLOG 开始的

R   --read-from-remote-server :表示从远程机器上读取 binlog,要确保远程 mysql 存储,需要提供--host, --user, --password 参数;  使用该选项时,mysqlbinlog 会伪装成一个 slave,连接读取,请求指定的 binlog file,主库获取接收到这个请求之后就创建一个 binlog dump 线程推送 binlog 给 mysqlbinlog server。
--raw: 以 binlog 格式存储日志,方便后期使用;
--host:  远程库的主机 IP 或者主机名;
--port:  远端库的端口号;
--user:  远程库上用于复制的账号;
--password:  远端库上复制账号的密码;
--stop-never:  一直连接到远程的 server 上读取 binlog 日志,直接到远程的 server 关闭后才会退出。或是被 pkill 掉;
--stop-never-slave-server-id:  如果需要启动多个 binlog server ,需要给 binlog server 指定 server-id 。

--result-file:   指定存储到本地的目录,注意后缀需要加上/

在执行完命令后,可以很快的将源端的BINLOG 复制到目的机,但需要注意的是,如果源端进行  purge 操作的时候,目的端的日志是不会减少的,所以还需要自己考虑如何定时清理不在使用的BINLOG  文件。

MYSQL  MHA VS GTID  与 BINLOG SERVER_服务器_07

同时如果怕MASTER 主机重启动之类的事情可以写一个脚本定时运行

以下为从网上找的一段 SHELL 程序 

# cat > binlog_cp.sh << EOF
#!/bin/bash
BACKUP_BIN=/usr/local/mysql/bin/mysqlbinlog
LOCAL_BACKUP_DIR=/data/mysql/mysql3306/logs/
BACKUP_LOG=/tmp/backup.log
REMOTE_HOST=192.168.199.230
REMOTE_PORT=3306
REMOTE_USER=repl
REMOTE_PASS=unixfbi
FIRST_BINLOG=mysql-bin.000001
SLAVE_SERVER_ID=2313306
# wait for 10s
SLEEP_SECONDS=10
cd ${LOCAL_BACKUP_DIR}

while :
do
  if [ `ls -A "${LOCAL_BACKUP_DIR}" |wc -l` -eq 0 ];then
     LAST_FILE=${FIRST_BINLOG}
  else
     LAST_FILE=`ls -l ${LOCAL_BACKUP_DIR} |tail -n 1 |awk '{print $NF}'`
  fi
  ${BACKUP_BIN} --raw -R --stop-never --host=${REMOTE_HOST} --port=${REMOTE_PORT} --user=${REMOTE_USER} --password=${REMOTE_PASS}  --stop-never --stop-never-slave-server-id=${SLAVE_SERVER_ID} ${LAST_FILE} --result-file=${LOCAL_BACKUP_DIR}
  echo "`date +"%Y/%m/%d %H:%M:%S"` mysqlbinlog is stoped,return code: $?" | tee -a ${BACKUP_LOG}
  echo "${SLEEP_SECONDS}s will continue !" | tee -a ${BACKUP_LOG}  
  sleep ${SLEEP_SECONDS}
done
EOF

通过这个程序来不断的判断master 服务器是否OK ,如果连接断掉后,会在MASTER 启动后,再次进行连接将日志拉取。

MYSQL  MHA VS GTID  与 BINLOG SERVER_服务器_08


标签:BINLOG,binlog,--,server,MHA,VS,MYSQL,SERVER
From: https://blog.51cto.com/u_14150796/6515675

相关文章

  • VsCode配置PHP断点调试环境笔记
    PHPStudy_Pro8.1.1.2VsCode1.51.1PHP7.4.3NTSPHP_Xdebug-2.9.8-7.4-vc15-nts-x86_64首先查看当前环境的phpinfo信息根据phpinfo的信息选择对应的XDebug进行下载:https://xdebug.org/download推荐使用:https://xdebug.org/wizard,将phpinfo的信息全选复制到这里进行分析,然后下......
  • ResizeObserver loop limit exceeded报错解决方案
    ResizeObserverlooplimitexceeded报错解决方案项目接入前端感知系统,采集到很多ResizeObserverlooplimitexceeded错误。本地运行不是这个报错信息,当反复拖拽改变窗口大小时,本地运行错误信息如下:问题原因:element-ui中的table组件的引入如果在一个动画帧内,ResizeObserver不......
  • vs编译时打印Task中日志。
    https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-build-v|--verbositySetstheverbositylevelofthecommand.Allowedvaluesareq[uiet],m[inimal],n[ormal],d[etailed],anddiag[nostic].Thedefaultisminimal.Bydefault,MSBuilddisplay......
  • SQL Server检索SQL和用户信息的需求
    Oracle中如果需要知道一条SQL是谁执行的,可以通过v$sql的parsing_schema_name字段得到登录的schema名称,相当于SQL和会话登录信息是有绑定的。但是最近有个SQLServer的需求,需要知道历史SQL的执行者。如下SQL,可以找到当前SQLServer跑过的SQL,但是没用户信息,SELECTp.refcounts,p.use......
  • VScode 中利用virtualenv建立 Python 虚拟环境
    !https://zhuanlan.zhihu.com/p/638114885VScode建立Python虚拟环境主要目的:创建一个与默认python版本不同的python虚拟环境0x01建立新环境文件夹建立一个独立文件夹来存储所有虚拟环境,所以可以事先建好文件夹如:'''E:\WorkSpace\Work\chatGLM'''0x02创建虚拟环......
  • SQL Server中怎么知道哪些表被访问过?
    同事问了个问题,我需要知道SQLServer中的某个库都有哪些表被访问过,这个怎么实现?SQLServer确实不太熟悉,如果是Oracle,我们可以通过AUDIT审计功能,实现表级、字段级这种粒度的监控,另外如果比较粗略的,还可以通过数据字典找到所有SELECT的语句,之所以说粗略,因为缓存是按照LRU算法存储的,如......
  • vscode配置yapf格式化插件
    引言yapf比autopep8更加灵活和强大,可以考虑入手配置步骤安装yapf:pipinstallyapfvscode配置setting.json"python.formatting.provider":"yapf","python.formatting.yapfArgs":["--style={based_on_style=pep8,arithmetic_precede......
  • 关于使用vsmonodebuger对mono中运行的c#程序远程调试
    介绍:Mono是基于.NETFramework的开源开发平台,允许开发人员构建跨平台应用程序,从而提高开发人员的工作效率。Mono的.NET实现基于C#和公共语言基础结构的ECMA标准。简而言之就是可以运行.netframework程序跨平台执行vsmonodebuger:是mono的一个vs调试器插件,我们可以通过这个插件在......
  • Android - 无法使用任何临时 SqlClient 版本(v2.1.4、v4.1.0、v5Preview)连接到 SQL Ser
    Aconnectionwassuccessfullyestablishedwiththeserver,butthenanerroroccurredduringthepre-loginhandshake.设法用证书和IP地址解决它。使用powershell为您的IP地址创建证书:New-SelfSignedCertificate-certstorelocationcert:\localmachine\my-dns......
  • 要禁用 Windows Server 2022 2025时自动打开服务器管理器,可以通过以下批处理命令实现
    要禁用WindowsServer20222025时自动打开服务器管理器,可以通过以下批处理命令实现:首先打开记事本,输入以下命令:@echooffregadd"HKLM\Software\Microsoft\ServerManager"/vDoNotOpenServerManagerAtLogon/tREG_DWORD/d1/f保存文件,将文件名后缀改为.bat。......