mysql数据库基于二进制日志的主从复制(异步),基于msyql-proxy的读写分离

使用数据库异步复制实现分布式事务 1.背景介绍 使用数据库异步复制实现分布式事务 作者:禅与计算机程序设计艺术 背景介绍 当今互联网时代的架构挑战 在当今的互联网时代,随着微服务架构的普及和云计算技术的发展,越来越多的应 阅读详情

一、异步复制(基于二进制日志)

1、工作原理:

基本上是分为三步:

1.主数据库(Master)将变更信息写入到二进制日志文件中,这里需要注意的是旧版本的MySQL数据库默认是不开启二进制日志的,强烈建议在安装好数据库启动之前一定要先检查一下二进制日志文件是否开启,即使不做主从复制架构也要开启,否则当数据库启动之后再开启二进制日志时需要重新启动数据库。

2.从数据库(Slave)开启一个IO工作线程,通过该IO线程与主数据库建立一个普通客户端连接,主数据库会启动一个二进制日志转储线程(binglog dump thread),从数据库的IO线程通过这个转储线程读取主库上的变更事件,并将变更事件记录到中继日志中(relay_log),如果从数据库的IO线程读取速度追赶上主库的事件变更,在没有得到新变更的通知时,IO线程会进入Sleep状态。

3.从数据库还会启动一个SQL Thread线程,这个线程从中继日志(relay_log)中读取变更事件,并将变更同步到从数据库中。同时,可以通过配置选项,除了将变更存储到数据库中,也可以将变更事件同时存储在从数据库的二进制日志中。

2、实验环境:

server1:172.25.27.101mater节点
server2:172.25.27.102slave节点

 

 

 

3、创建master节点
数据库安装:

安装包:
    mysql-community-client-5.7.24-1.el7.x86_64.rpm
    mysql-community-common-5.7.24-1.el7.x86_64.rpm
    mysql-community-libs-5.7.24-1.el7.x86_64.rpm
    mysql-community-libs-compat-5.7.24-1.el7.x86_64.rpm
    mysql-community-server-5.7.24-1.el7.x86_64.rpm
yum install mysql* -y

vim /etc/my.cnf
    [mysqld]
    server-id=1        主节点
    log-bin=mysql-bin
cat /var/log/mysqld.log | grep password        查看数据库的临时密码
安全初始化:
    mysql_secure_installation
    输入临时密码
    重新设定密码:ZHAOjun@123
    .
    .
    .

登陆数据库:

mysql -uroot -pZHAOjun@123
    CREATE USER 'repl'@'172.25.27.%' IDENTIFIED BY 'ZHAOjun@123';
    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'172.25.27.%';
    flush privileges;
    show plugins;
    show master status;    #创建slaves节点会用到
    | File             | Position |
    | mysql-bin.000002 |     1685 |


4、创建slave节点
安装数据库:

安装包:
    mysql-community-client-5.7.24-1.el7.x86_64.rpm
    mysql-community-common-5.7.24-1.el7.x86_64.rpm
    mysql-community-libs-5.7.24-1.el7.x86_64.rpm
    mysql-community-libs-compat-5.7.24-1.el7.x86_64.rpm
    mysql-community-server-5.7.24-1.el7.x86_64.rpm
yum install mysql* -y

vim /etc/my.cnf
    [mysqld]
    server-id=2        主节点
cat /var/log/mysqld.log | grep password        查看数据库的临时密码
安全初始化:
    mysql_secure_installation
    输入临时密码
    重新设定密码:ZHAOjun@123
    .
    .
    .

登陆数据库:
 

mysql -uroot -pZHAOjun@123  #用到主节点 show master status; 的参数
    CHANGE MASTER TO
    MASTER_HOST='172.25.27.101',
    MASTER_USER='repl',
    MASTER_LOG_FILE='mysql-bin.000002',
    MASTER_LOG_POS=1685;
start slave    启动子节点
show slave status\G; 查看字节状态
    最后两行参数为yes才ok;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.25.27.101
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 2343
               Relay_Log_File: server2-relay-bin.000002
                Relay_Log_Pos: 978
        Relay_Master_Log_File: mysql-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

################测试################
在master节点创建数据库
创建表,插入数据
而后在slave节点查看数据库,查看表
如果能够看到内容则ok

二、读写分离

什么是读写分离?

读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。
为什么要实现读写分离?

因为数据库的“写”(写10000条数据到oracle可能要3分钟)操作是比较耗时的。
但是数据库的“读”(从oracle读10000条数据可能只要5秒钟)。
所以读写分离,解决的是,数据库的写入,影响了查询的效率。
什么时候要读写分离?
数据库不一定要读写分离,如果程序使用数据库较多时,而更新少,查询多的情况下会考虑使用,利用数据库 主从同步 。可以减少数据库压力,提高性能。当然,数据库也有其它优化方案。memcache 或是 表折分,或是搜索引擎。都是解决方法。  
1、实验原理

2、实验环境:

server1,server2已经实现主从分离

server1:172.25.27.101master节点
server2:172.25.27.102slave节点
server3:172.25.27.103mysql-proxy节点

 

 

 

 

3、server3配置
 

tar -zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
mv mysql-proxy-0.8.5-linux-el6-x86-64bit mysql-proxy
mv mysql-proxy /usr/local
cd /usr/local/mysql-proxy
mkdir conf
mkdir log
ls21
        bin  include  lib  libexec  licenses  share   conf   log

配置文件参数
    ./bin/mysql-proxy --help-proxy
    ./bin/mysql-proxy --help
find . -name *.lua        查找.lua脚本

写配置文件:
cd conf
vim mysql-proxy.conf
    proxy-address=0.0.0.0:3306
    proxy-backend-addresses=172.25.27.101:3306                指定master后端,可读可写数据
    proxy-read-only-backend-addresses=172.25.27.102:3306      指定slave后端,读取数据
    proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua    指定读写分离lua脚本,需要在此脚本中修改参数
    pid-file=/usr/local/mysql-proxy/log/mysql-proxy.pid                       指定pid文件
    log-file=/usr/local/mysql-proxy/log/mysql-proxy.log                        指定日志文件
    plugins=proxy        添加proxy模块
    log-level=debug    设置日志类型为debug
    keepalive=true      奔溃时尝试重启
    daemon=true         以守护进程方式运行

修改读写分离脚本.lua文件
vim /usr/local/mysql-proxy/share/doc/mysql-proxy/rw.splitting.lua
    -- connection pool
    if not proxy.global.config.rwsplit then
        proxy.global.config.rwsplit = {
            min_idle_connections = 1,    远程客户端连接最少为1个
            max_idle_connections = 2,   最大为2个,大于两个之后会进行读写分离

            is_debug = false
        }
    end

启动程序:
/usr/local/mysql-proxy/conf/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf

chmod 660 /usr/local/mysql-proxy/conf/mysql-proxy.conf    修改权限否则会报错

/usr/local/mysql-proxy/conf/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf

4、测试
 

server1:
    grant select,update,insert on *.* to kehu@'%' identified by 'ZHAOjun@123';
    创建一个远程登陆的用户
localhost:
     mysql -h 172.25.27.103 -ukuhu -pZHAOjun@123                          远程连接大于等于三次才能触发读写分离(在rw_splitting.lua脚本中指定)
    

server3:
1)、查看以下文件是否生成
     /usr/local/mysql-proxy/log/mysql-proxy.pid
     /usr/local/mysql-proxy/log/mysql-proxy.log
2)、查看.log,可以看到日志中已经显示连接到server1,server2数据库
    2019-07-29 14:50:09: (message) chassis-unix-daemon.c:136: [angel] we try to keep     PID=2377 alive
    2019-07-29 14:50:09: (debug) chassis-unix-daemon.c:157: waiting for 2377
    2019-07-29 14:50:09: (debug) chassis-unix-daemon.c:121: we are the child: 2377
    2019-07-29 14:50:09: (critical) plugin proxy 0.8.5 started
    2019-07-29 14:50:09: (debug) max open file-descriptors = 1024
    2019-07-29 14:50:09: (message) proxy listening on port 0.0.0.0:3306
    2019-07-29 14:50:09: (message) added read/write backend: 172.25.27.101:3306
    2019-07-29 14:50:09: (message) added read-only backend: 172.25.27.102:3306
    2019-07-29 14:52:53: (debug) [network-mysqld.c:1134]: error on a connection (fd: -1 event: 0). closing client connection

3)、在server3安装lsof
    lsof -i:3306    查看数据库的连接情况


localhost:

     mysql -h 172.25.27.103 -ukuhu -pZHAOjun@123 

     创建表,插入数据

master:

    查看是否有插入数据

 

Qt6安装保姆级教程:从国内镜像下载到配置避坑指南(附清华/中科大源) 本文提供详细的Qt6安装与配置指南,重点介绍如何利用清华大学、中国科学技术大学等国内镜像源解决下载速度慢的问题。内容涵盖在线安装器获取、组件选择策略、环境变量配置以及常见编译与部署问题的排查方法,旨在帮助国内开发者高效、顺畅地完成Qt6开发环境搭建。 阅读详情

相关推荐

ABAP代码检查(Code Review)

1、SLIN 扩展程序检查 也可通过(SE38工具栏->检查-扩展程序检查) 进入 2、ATC 检查 通过<SE38菜单栏-检查-ABAP测试主控室> 或事物代码SCI, 支持自定义检查变式 SCI可以配置检查变式满足特殊需求,配置对象集用于批量检查 3、通过ABAP测试主控室实现统一管理,定期检查作业和监控功能(事务代码ATC) 参考 SLIN...

u012232542的博客 6063

mysql-proxy 0.8.4_Mysql-Proxy0.8.3 实现MySQL 5.6读写分离

大纲一、Mysql-Proxy 简单介绍二、环境准备三、Mysql-Proxy 命令简介四、Mysql-Proxy主从分离注,此实验是基于上一篇博客,http://freeloda.blog.51cto.com/2033581/1282879,先实现主从复制,再实现读写分离。(对于主从复制不清楚的博友可以参考一下)一、Mysql-Proxy 简单介绍MySQL-Proxy是一个处于你的client...

weixin_42144086的博客 266

Oracle Linux中/var/log/pcp/pmlogger目录膨胀问题分析与解决

本文详细分析了Oracle Linux系统中/var/log/pcp/pmlogger目录异常膨胀的常见原因与解决方案。当PCP性能监控框架的pmlogger服务日志轮转或清理机制失效时,会导致该目录无限增长,威胁系统稳定。文章提供了从服务状态诊断、配置文件审查到安全清理与预防策略的全流程实战指南,帮助运维人员快速回收磁盘空间并恢复服务正常运行。

weixin_29208327的博客 371

Mysql主从配置,实现读写分离

mysql-proxy实现读写分离 MySQL Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测、分析或改变它们的通信。它使用灵活,没有限制,常见的用途包括:负载平衡,故障、查询分析,查询过滤和修改等等。 MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过

一只死猛犸的博客 650

【AIGC】COT思维链:让AI学会拆解问题,像人一样思考

COT思维链的出现,为AI的发展开辟了一条新的道路。它让AI学会了像人类一样思考,将复杂问题分解成简单的步骤,并逐步推理出最终答案。希望我的引导会对你产生启发。

智兔唯新的博客 9002

LSM6DS3TR-C IMU传感器入门:从MEMS原理到姿态解算实战

惯性测量单元(IMU)是现代智能设备实现运动感知的核心部件,其基础原理基于微机电系统(MEMS)技术。MEMS加速度计通过检测质量块在惯性力作用下的位移来测量线性加速度,而陀螺仪则利用科里奥利力效应感知角速度。这种技术使得微型化、低成本的6自由度运动测量成为可能,为机器人、无人机、可穿戴设备等提供了关键的空间姿态和运动状态信息。在实际工程中,开发者需要掌握I2C/SPI通信协议、传感器数据读取与校准,并通过互补滤波等算法融合加速度计和陀螺仪数据,实现稳定的姿态解算。LSM6DS3TR-C作为一款高性价比的6

weixin_28684655的博客 595

mysql proxy无法连接_客户端无法通过4040端口连接到mysql proxy

最近在用mysqlproxy,理想情况下是这样的:客户端连接mysqlproxy,然后mysqlproxy根据lua脚本把请求分发到下面的两个mysql服务器,这两个mysql服务器互为主从。但设置好之后却无法通过...最近在用mysql proxy,理想情况下是这样的:客户端连接mysql proxy,然后mysql proxy根据lua脚本把请求分发到下面的两个mysql服务器,这两个mysq...

weixin_34938347的博客 683

基于Docker的D435i相机与IMU联合标定实战指南

本文详细介绍了基于Docker的D435i相机与IMU联合标定实战指南,涵盖kalibr镜像构建、IMU标定全流程、双目相机标定技巧及联合标定结果验证。通过Docker容器化部署,简化了复杂依赖环境,提升标定效率与精度,适用于机器人视觉与SLAM应用。

weixin_30872337的博客 239

mysql读写分离有用吗_MySQL的使用中实现读写分离的教程

mysql-proxy实现读写分离MySQL Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测、分析或改变它们的通信。它使用灵活,没有限制,常见的用途包括:负载平衡,故障、查询分析,查询过滤和修改等等。MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lu...

weixin_39928736的博客 180

【Flutter 问题系列第 85 篇】Xcode 运行 Flutter 提示 The Dart VM Service was not discovered after 60 seconds.

在 Xcode 上运行 Flutter 时提示 `The Dart VM Service was not discovered after 60 seconds. This is taking much longer than expected...`,意思是 `60秒后未发现Dart虚拟机服务。这比预期的要长得多`

“Allen Su”的博客 2235

SAPGUI excel 导出时遇到的运行时错误:STRING_SIZE_TOO_LARGE

当报表导出需求远超单一 XLSX 文件的物理承载力时,与其在 SAPGUI 中硬拼 2 GB 限制,不如把分页、过滤、流式写入作为设计前提。掌握 ABAP2XLSX 或 CSV + Power Query 等工具链,既能满足审计合规,又能让应用服务器远离的噩梦。祝你在下一次导出海量数据时,既高效又优雅。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 640

MySQL复制(一):异步复制(Asynchronous replication)

MySQL的复制就是将来自一个MySQL数据库服务器(主库)的数据复制到一个或多个MySQL数据库服务器(从库)。其工作原理是通过binlog(二进制日志)记录事务变更然后传送到从库并重放事务,保持数据一致。

最简单的方法,解决最实际的问题。 3436

基于DNN神经网络的多输入多输出数据回归预测(附带Matlab代码)

假设我们的输入数据包含n个特征,输出数据包含m个特征。在本文中,我们将介绍如何使用DNN(深度神经网络)实现多输入多输出数据回归预测,并提供相应的Matlab代码。需要注意的是,上述代码中的DNN模型是一个简化的示例,您可以根据实际任务的复杂程度和要求进行相应的调整和优化。综上所述,我们介绍了如何使用DNN神经网络实现多输入多输出数据回归预测,并提供了相应的Matlab代码。函数对DNN模型进行训练,其中输入数据需要转置,以适应网络的输入要求。最后,我们使用训练好的模型对测试数据进行预测,并打印预测结果。

DevWizard的博客 1067

MySQL高级日志及备份篇

mysql高级---日志及备份篇 尚硅谷学习笔记

qq_40910093的博客 1469

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

MySQL 8 复制(一)—— 异步复制

MySQL 异步复制介绍、复制实验环境、安装 MySQL 8.0.16、配置异步复制

wzy0623的专栏 9839

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

MySQL复制技术方案——异步复制配置

为MySQL服务器配置复制非常简单。但由于场景不同,基本的步骤还是有所差异。最基本的场景是新安装的主库和备库,总的来说分为以下几步。

JC的博客 1261

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

第18章 主从复制【4.日志与备份篇】【MySQL高级】

第18章 主从复制【4.日志与备份篇】【MySQL高级】

小心星的博客 811

数据库日志、主从复制、备份和还原

目录 数据库的日志 日志类型: 各种日志的主要功能 数据库的主从复制 主从复制的类型 主从复制的原理 主从复制的步骤 数据库的备份和还原 因为 MySQL 和 MariaDB 两者在日志、SQL语句上基本一致,所以下面用Mysql举例。 数据库的日志 在Mysql中,默认只开启了错误日...

墨鱼菜鸡 460

MySQL数据库日志、备份与恢复

目录前言一.MySQL 日志管理数据的重要性造成数据丢失的原因1、错误日志2、通用查询日志3、二进制日志4、慢查询日志5、查看日志6.中继日志(relay log)7、普通日志(general log)配置文件二、数据库备份的重要性与分类1、数据备份的重要性2、从物理与逻辑的角度,备份分为:3、从数据库的备份策略角度,备份可分为:三、常见的备份方法1、物理冷备2、专用备份工具mydump或mysqlhotcopy3、启用二进制日志进行增量备份4、第三方工具备份四、MySQL完全备份1、完全备份的概念2、优点

Liqi23的博客 660

mysql中异步复制_mysql-异步复制

)这两种方式都是通过在主库上记录二进制日志(binlog)、在从库重放中继日志(relylog)的方式来实现异步的数据复制。二进制日志或中继日志中的记录被称为事件。所谓异步包含两层含义:一是主库的二进制日志写入与将其发送到从库是异步进行的,二是从库获取与重放日志事件是异步进行的。注意:这意味着,在同一时间点从库上的数据更新可能落后于主库,并且无法保证主从之间的延迟间隔。复制给主库增加的开销主要体现...

weixin_42131728的博客 374

数据库的异步复制方案介绍

数据库异步复制方案

y2016724的博客 1229

mysql--异步复制(基于二进制日志的主从复制,基于GPID的主从复制)

基于二进制日志的主从复制 一、基于二进制日志主从复制概述 在这种方法中,作为主服务器(数据库更改的源)操作的MySQL实例将更新和更改作为“事件”写入二进制日志。二进制日志中的信息根据记录的数据库更改以不同的日志格式存储。从服务器被配置为从主服务器读取二进制日志,并在从服务器的本地数据库上执行二进制日志中的事件。 每个从机接收二进制日志的全部内容的副本...

qq_41977453的博客 542

IV 9 MySQL REPLICATION(rw-splitting)

IV 9 MySQLREPLICATION(rw-splitting)一、相关概念MySQL REPLICATION(rw-splitting)mysql5.6引入GTID和multi thread replicationGTID(global transaction identifier)are unique identifiers comprising the serv...

weixin_34318326的博客 275

Mysql-Proxy 读写分离

大纲一、Mysql-Proxy 简单介绍二、环境准备三、Mysql-Proxy 命令简介四、Mysql-Proxy主从分离注,此实验是基于上一篇博客,http://freeloda.blog.51cto.com/2033581/1282879,先实现主从复制,再实现读写分离。(对于主从复制不清楚的博友可以参考一下)一、Mysql-Proxy 简单介绍 MySQL-...

weixin_34380948的博客 226

mysql读写分离写入是乱码怎模板_MySQL的使用中实现读写分离的教程_MySQL

mysql-proxy实现读写分离MySQL Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测、分析或改变它们的通信。它使用灵活,没有限制,常见的用途包括:负载平衡,故障、查询分析,查询过滤和修改等等。MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lu...

weixin_42500818的博客 151

mysql proxy学习(二)——状态转移

mysql proxy学习(二)——状态转移 上一节我们已经知道了listen fd的回调函数network_mysqld_con_accept,该函数负责accept客户端的连接network_socket_accept,然后进入与客户端及后台mysql交互的协议流程(状态转移)network_mysqld_con_handle。下面我们看一下proxy的状态转移图(mysql proto见h

阿罗 3314
上一篇: haproxy常用的功能
下一篇: mysql基于gtid的主从异步复制,基于gtid的半同步复制
SS_CC_Go
博客等级 码龄9年 16粉丝 119原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值