故障分析 | 数据库故障 MHA 未切换

mha故障切换报错了,漂移成功了,slave指向新master没成功,究竟如何处理!我有点小暴躁! mha故障切换报错了怎么办啊,漂移成功,master转换没成功 报错背景 mha安装成功,测试免密登录成功,测试主从复制也成功了,健康检查ok。当将主master关掉模拟过程切换时报错。 具体报错信息 ----- Failover Report ----- app1: MySQL Master failover 192.168.206.88(192.168.206.88:3306) to 192.168.206.188(192.168.206.188:3306) Master 192.168.206.8 阅读详情

作者:张洛丹

原爱可生 DBA 团队成员,现陆金所 DBA 团队成员,对技术执著有追求!

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


背景

某天晚上,数据库 hang 住,现象是:

  • 应用报错org.apache.commons.dbcp.SQLNestedException: Cannot get a connection,pool error Timeout waiting for idle object
  • 无法登录,输入登录命令就卡着不动,无法响应

无奈之下通过强制 kill 掉进程,重启数据库恢复。

这里暂且不说 hang 住的原因,仅分析数据库 hang 住,但是 MHA 未触发切换。

结论

先说下结论,MHA 默认使用长连接对数据库做 ping 健康检测(执行select 1 as Value),4次无法连接 MySQL 则触发切换。
前面数据库 hang 住只是新的连接无法建立,但是老连接却没有影响,且 MHA 的健康检测语句很简单,只在 server 层进行了检测,不涉及到 InnoDB 层,所以 MHA 认为 MySQL 是健康的,并没有作出任何决策。

解决

MHA 从 0.53 版本开始支持 ping_type 参数设置如何检查 master 的可用性。支持3个 value :

  • select:使用长连接连接到 MySQL 执行select 1 as Value,这个长连接被重复使用,但检查过于简单,无法发现更多故障。
  • connect:在每次执行select 1 as Value前后创建和断开连接,可以发现更多 TCP 连接级别的故障。

注意:此种情况,MHA 监控进程会 fork 出一个子进程进行检测

  • insert:基于一个到 MySQL 已经存在的连接执行 insert 语句,可以更好检测到数据库因磁盘空间耗尽或磁盘 IO 资源耗尽导致的故障。

通过将 ping_type 修改设置为connect,MHA 每次进程状态检测,需要新建连接,新链接无法成功建立,就触发了切换。

三种检测机制代码:

##如果获取分布式锁失败返回2,正常返回0,异常返回1
sub ping_connect($) {
  my $self = shift;
  my $log  = $self->{logger};
  my $dbh;
  my $rc          = 1;
  my $max_retries = 2;
  eval {
    my $ping_start = [gettimeofday];
    # 连接max_retries次,连接失败则退出
    while ( !$self->{dbh} && $max_retries-- ) {
      eval { $rc = $self->connect( 1, $self->{interval}, 0, 0, 1 ); };
      if ( !$self->{dbh} && $@ ) {
        die $@ if ( !$max_retries );
      }
    }
    # 调用ping_select
    $rc = $self->ping_select();

    # To hold advisory lock for some periods of time
    $self->sleep_until( $ping_start, $self->{interval} - 1.5 );
    $self->disconnect_if();
  };
  if ($@) {
    my $msg = "Got error on MySQL connect ping: $@";
    undef $@;
    $msg .= $DBI::err if ($DBI::err);
    $msg .= " ($DBI::errstr)" if ($DBI::errstr);
    $log->warning($msg) if ($log);
    $rc = 1;
  }
  return 2 if ( $self->{_already_monitored} );
  return $rc;
}

# 正常返回0,异常返回1
sub ping_select($) {
  my $self = shift;
  my $log  = $self->{logger};
  my $dbh  = $self->{dbh};
  my ( $query, $sth, $href );
  eval {
    $dbh->{RaiseError} = 1;
    $sth = $dbh->prepare("SELECT 1 As Value");
    $sth->execute();
    $href = $sth->fetchrow_hashref;
    if ( !defined($href)
      || !defined( $href->{Value} )
      || $href->{Value} != 1 )
    {
      die;
    }
  };
  if ($@) {
    my $msg = "Got error on MySQL select ping: ";
    undef $@;
    $msg .= $DBI::err if ($DBI::err);
    $msg .= " ($DBI::errstr)" if ($DBI::errstr);
    $log->warning($msg) if ($log);
    return 1;
  }
  return 0;
}


# 正常返回0,异常返回1
sub ping_insert($) {
  my $self = shift;
  my $log  = $self->{logger};
  my $dbh  = $self->{dbh};
  my ( $query, $sth, $href );
  eval {
    $dbh->{RaiseError} = 1;
    $dbh->do("CREATE DATABASE IF NOT EXISTS infra");
    $dbh->do(
"CREATE TABLE IF NOT EXISTS infra.chk_masterha (`key` tinyint NOT NULL primary key,`val` int(10) unsigned NOT NULL DEFAULT '0')"
    );
    $dbh->do(
"INSERT INTO infra.chk_masterha values (1,unix_timestamp()) ON DUPLICATE KEY UPDATE val=unix_timestamp()"
    );
  };
  if ($@) {
    my $msg = "Got error on MySQL insert ping: ";
    undef $@;
    $msg .= $DBI::err if ($DBI::err);
    $msg .= " ($DBI::errstr)" if ($DBI::errstr);
    $log->warning($msg) if ($log);
    return 1;
  }
  return 0;
}

测试

MHA 配置文件

[server default]
manager_log=/Data/mha/log/workdir/my3306tst.log
manager_workdir=/Data/mha/workdir/my3306tst
remote_workdir=/Data/mysql/my3306/mha
master_binlog_dir=/Data/mysql/my3306/log
password=xxx
ping_interval=5
repl_password=xxx
repl_user=xxx
ssh_user=mysql
ssh_port=xxx
user=mha
master_ip_online_change_script="/usr/local/bin/master_ip_online_change"
master_ip_failover_script="master_ip_failover"

[server1]
hostname=xxx
port=3306
candidate_master=1

[server2]
hostname=xxx
port=3306
candidate_master=1

注意:在测试的时候将ping_interval设置成5,便于快速观测到切换,实际生产中,可根据业务对故障的容忍能力进行调整。

模拟服务器CPU满负载,数据库无法建立新连接
编写一个简单的c程序,如下:

# include <stdio.h>
int main()
{
	while(1);
	return 0;
}

编译:

gcc -o out test_cpu.c

执行:

for in in `seq 1 $(cat /proc/cpuinfo | grep "physical id" | wc -l)`; do ./out & done

另外再跑两个 mysqlslap 压测程序:

mysqlslap -c 30000 -i 100 --detach=1 --query="select 1 from dual" --delimiter=";" -uxxx -pxxx -S /xxxx/xxx.sock
  • ping_type=connect 时,4次连接失败触发切换
    此时,在 MHA 切换日志中可以看到连接数据库报错的输出如下:
Got error on MySQL connect: 2013 (Lost connection to MySQL server at 'waiting for initial communication packet',system error: 110)
  • ping_type=select时,未触发切换

有兴趣的同学可自行测试一下

MHA健康检测机制

调用链路:

MasterMonitor.pm|MHA::MasterMonitor::main() 
-->
MasterMonitor.pm|MHA::MasterMonitor::wait_until_master_is_dead() 
-->
MasterMonitor.pm|MHA::MasterMonitor::wait_until_master_is_unreachable() 
--> 
MHA::HealthCheck::wait_until_unreachable();
-->
HealthCheck.pm|MHA::HealthCheck::ping_select(或者)
HealthCheck.pm|MHA::HealthCheck::ping_insert(或者)
HealthCheck.pm|MHA::HealthCheck::ping_connect(或者)

MHA 监控进程启动后,会持续监控主节点的状态,主要的健康检测函数是 wait_until_unreachable()。

PS:MHA 监控进程启动过程中,会读取配置文件,对配置文件中的服务器进行一系列检查,包括存活状态、版本信息、从库配置(read_only,relay_log_purge,log-bin,复制过滤等),ssh状态等,若检查不通过,则无法启动

在这个函数中会有一个死循环,持续地进行健康检测

1.首先,测试连接,连接正确返回0,否则返回1。

  • 如果连接 MySQL 成功,则获取分布式锁, 如果获取分布式锁失败,返回状态值为 1
  • 如果连接 MySQL 失败,则返回状态值1和连接失败的报错,对于连接失败的下面几种情况(常见的有1040连接数满和1045权限拒绝)MHA 会认为 MySQL 进程是正常的,并不会触发切换,而是一直进行连接检测
our @ALIVE_ERROR_CODES = (
  1040,    # ER_CON_COUNT_ERROR
  1042,    # ER_BAD_HOST_ERROR
  1043,    # ER_HANDSHAKE_ERROR
  1044,    # ER_DBACCESS_DENIED_ERROR
  1045,    # ER_ACCESS_DENIED_ERROR
  1129,    # ER_HOST_IS_BLOCKED
  1130,    # ER_HOST_NOT_PRIVILEGED
  1203,    # ER_TOO_MANY_USER_CONNECTIONS
  1226,    # ER_USER_LIMIT_REACHED
  1251,    # ER_NOT_SUPPORTED_AUTH_MODE
  1275,    # ER_SERVER_IS_IN_SECURE_AUTH_MODE
);

2.测试连接成功后,则进行健康状态检测(前面说的3种方式);如果连续4次连接失败,则在第4次的时候会使用第二脚本进行检测(如果定义了的话),如果检测通过,则认为 master 挂掉

关键函数 wait_until_unreachable()代码:

# main function
sub wait_until_unreachable($) {
  my $self           = shift;
  my $log            = $self->{logger};
  my $ssh_reachable  = 2;
  my $error_count    = 0;
  my $master_is_down = 0;

  eval {
    while (1) {
      $self->{_tstart} = [gettimeofday];
      ## 判断是否需要建立连接
      if ( $self->{_need_reconnect} ) {
        my ( $rc, $mysql_err ) =
          $self->connect( undef, undef, undef, undef, undef, $error_count );
        if ($rc) {
          if ($mysql_err) {
            # 错误代码在ALIVE_ERROR_CODES中时,不触发切换,常见的有用户密码不正确,不会切换
            if (
              grep ( $_ == $mysql_err, @MHA::ManagerConst::ALIVE_ERROR_CODES )
              > 0 )
            {
              $log->info(
"Got MySQL error $mysql_err, but this is not a MySQL crash. Continue health check.."
              );
              # next直接进入下次循环
              $self->sleep_until();
              next;
            }
          }
          $error_count++;
          $log->warning("Connection failed $error_count time(s)..");
          $self->handle_failing();

          if ( $error_count >= 4 ) {
            $ssh_reachable = $self->is_ssh_reachable();
            # 返回1表示主库down,0表示主库没有down
            $master_is_down = 1 if ( $self->is_secondary_down() );
            # 主库down则跳出循环
            last if ($master_is_down);
            $error_count = 0;
          }
          $self->sleep_until();
          next;
        }

        # connection ok
        $self->{_need_reconnect} = 0;
        $log->info(
"Ping($self->{ping_type}) succeeded, waiting until MySQL doesn't respond.."
        );
      }
      # 如果ping_type为connect,则断开连接
      $self->disconnect_if()
        if ( $self->{ping_type} eq $MHA::ManagerConst::PING_TYPE_CONNECT );

      # Parent process forks one child process. The child process queries
      # from MySQL every <interval> seconds. The child process may hang on
      # executing queries.
      # DBD::mysql 4.022 or earlier does not have an option to set
      # read timeout, executing queries might take forever. To avoid this,
      # the parent process kills the child process if it won't exit within
      # <interval> seconds.

      my $child_exit_code;
      eval {
        # 调用检测函数
        if ( $self->{ping_type} eq $MHA::ManagerConst::PING_TYPE_CONNECT ) {
          $child_exit_code = $self->fork_exec( sub { $self->ping_connect() },
            "MySQL Ping($self->{ping_type})" );
        }
        elsif ( $self->{ping_type} eq $MHA::ManagerConst::PING_TYPE_SELECT ) {
          $child_exit_code = $self->fork_exec( sub { $self->ping_select() },
            "MySQL Ping($self->{ping_type})" );
        }
        elsif ( $self->{ping_type} eq $MHA::ManagerConst::PING_TYPE_INSERT ) {
          $child_exit_code = $self->fork_exec( sub { $self->ping_insert() },
            "MySQL Ping($self->{ping_type})" );
        }
        else {
          die "Not supported ping_type!\n";
        }
      };
      if ($@) {
        my $msg = "Unexpected error heppened when pinging! $@";
        $log->error($msg);
        undef $@;
        $child_exit_code = 1;
      }

      if ( $child_exit_code == 0 ) {

        #ping ok
        ## ping成功的话,则更新状态,并将计数器置为0
        $self->update_status_ok();
        if ( $error_count > 0 ) {
          $error_count = 0;
        }
        $self->kill_sec_check();
        $self->kill_ssh_check();
      }
      elsif ( $child_exit_code == 2 ) {
        $self->{_already_monitored} = 1;
        croak;
      }
      else {  
        ## 创建连接失败
        # failed on fork_exec
        $error_count++;
        $self->{_need_reconnect} = 1;
        $self->handle_failing();
      }
      $self->sleep_until();
    }
    $log->warning("Master is not reachable from health checker!");
  };
  if ($@) {
    my $msg = "Got error when monitoring master: $@";
    $log->warning($msg);
    undef $@;
    return 2 if ( $self->{_already_monitored} );
    return 1;
  }
  return 1 unless ($master_is_down);
  return ( 0, $ssh_reachable );
}

1;

MySQL之高可用性架构:从单点消除到快速恢复实战 高可用性架构的核心是通过冗余设计消除单点失效,结合自动化工具缩短恢复时间,并在数据一致性与性能间找到平衡点。从主备复制到多数据中心架构,从硬件冗余到流程保障,每一步都需结合业务特性与成本预算。在实践中,建议从小规模冗余起步,逐步引入自动化工具,同时建立完善的监控与应急体系,确保系统在面对故障时能够快速响应、从容恢复。写作不易,每一个架构设计和代码示例都凝聚了对高可用性的深入理解。您的支持是我持续输出技术干货的最大动力,让我们共同在MySQL高可用性实践中不断探索,构建更稳定、更可靠的数据库系统! 阅读详情

相关推荐

4_mysql(主从复制)

一、主从复制 1.介绍 两台或以上数据库实例,通过binlog二进制日志,实现数据的“同步”关系。 2.主从复制原理 1. 从库:CHANGE MASTER TO,将ip、port、user、password、binlog、position写入到master.info进行记录 2. 从库:START SLAVE,启动IO_THREAD和SQL_THREAD, 3. 从库:IO_THREAD读取master.info信息,连接主库 4. 主库:分配DUMP_THREAD线程响应从库,该连接为长连接 5. 从库

南雨有云 139

org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool exhausted和java.util.NoSuchElementException: Timeout wa

今天同事在测试文件同步功能时,发现当删除一个文件夹目录,里面含有很多文档的时候就报:Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool exhaustedat org.apache.commons.dbcp.PoolingDataSource.getConnection(Poo

每天=生命的最后一天 2万+

高可用 | Orchestrator架构介绍(一)

由 go 编写的 MySQL 高可用性和复制拓扑管理工具,支持复制拓扑结构的调整、自动故障转移和手动主从切换等。后端数据库使用 MySQL 或 SQLite 存储元数据,并提供 Web 界面展示 MySQL 复制的拓扑关系及状态。通过 Web 可更改 MySQL 实例的复制关系和部分配置信息,同时也提供命令行和 api 接口,便于运维管理。

weixin_47056515的博客 2476

MHA高可用配置及故障切换

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录一、MHA概述1、简介2、MHA的组成(性能、组件)3、特点一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 一、MHA概述 1、简介 主要是为了解决msater只有一台,若master出现故障时就使用MHA解决单点故障问题 一套优秀的MySQL高可用环境下故障切换和主从复制的软件 MySQL故障过程中,MHA能做到0-30秒内自动完成故障切换 2、MHA的组成(性能、组件) MHA Manager (管

潇潇雨歇 1246

有限元中的对称魔法:用1/6模型算整个涡轮叶片(含MATLAB代码)

本文深入解析了有限元分析中针对循环对称结构的高效求解策略。通过利用涡轮叶片等结构的几何重复性,仅需对1/6基本扇区建模并施加循环对称条件,即可精确推演整体力学行为,大幅降低计算规模。文章从数学原理推导到MATLAB代码实现,提供了完整的实战指南,适用于旋转机械的静力、模态及谐响应分析。

fire9的博客 309

三相电路小白必看:正弦量向量表示法保姆级教程(附欧拉公式推导)

本文为电气工程初学者详细解析了三相电路中正弦量的向量表示法,即相量法。通过几何直观和欧拉公式推导,阐明如何将时变正弦量转化为静态复平面向量进行运算,并利用平行四边形法则简化同频正弦量的加减计算。文章结合Python代码进行可视化验证,帮助读者牢固掌握这一分析交流电路的核心工具。

linux6sysadmin的博客 992

tomcat异常: Cannot get a connection, pool exhausted

项目运用当中,在tomcat 中的 conf/server.xml 中配制JNDI 配置如下:   &lt;Resource auth="Container" name="jdbc/ztc" type="javax.sql.DataSource"/&gt; &lt;ResourceParams name="jdbc/ztc"&gt; &lt;paramet

wrong1111 413

MATLAB创建GUI面板实现二维码生成与识别

利用matlab设计gui界面实现二维码的生成与内容识别

infinitystardust的博客 3148

故障分析 | MHA 切换的一个“坑”

作者:张洛丹 原爱可生 DBA 团队成员,现陆金所 DBA 团队成员,对技术执著有追求! 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 背景 在一次变更中使用 MHA 进行主从切换,命令如下: masterha_master_switch --master_state=alive --conf=/etc/mha/mha3306.cnf --new_master_host=xx.xx.xx.xx --new_master_port=3306 --in.

ActionTech的博客 675

完整内、外期货量化交易系统源码可售

支持客户登录校验,支持所有的实时行情和汇总报价功能、实时资讯(报价,列表,分时,分钟成交明晰,),多线程支持盘后收盘作业下载(日线,5分钟线,15分钟, 30分钟,60分钟线,),支持从服务器下载相关运行配置(来自服务器动态配置信息,如收盘日期等),实现状态条显示。收盘作业包括日线、5分钟线、15分钟线、30分钟、60分钟线、2小时线、4小时线每日分时走势。综合信息栏显示用户账户信息、合约信息、当日委托单记录、当日成交记录、当日平仓记录、当日跟单记录、当日(月/周)排行榜、下单栏、持仓信息;

qq_35600909的博客 1804

Dify 系列教程 | 第 6 篇:工作流入门 -- 用可视化方式编排 AI 逻辑

Dify 工作流是一个基于有向无环图(DAG)的可视化 AI 逻辑编排系统。你可以把多个处理步骤(节点)用连线串联起来,数据从起点流向终点,每经过一个节点就被处理一次。用一个类比来理解:如果单次 Prompt 调用是"一道菜",那工作流就是"一道完整的生产线" – 原材料(输入)进入流水线,经过清洗(预处理)、切配(数据转换)、烹饪(AI 推理)、装盘(格式化输出)等工序,最终产出成品。创建一个工作流类型的应用(或高级聊天类型),就会进入工作流编辑器。编辑器基于ReactFlow构建(

weixin_43674738的博客 118

故障分析 | 如何提高 MHA 的网络容忍能力?(上)

作者:刘开洋 爱可生交付服务部团队北京 DBA,主要负责处理 MySQL 的 troubleshooting 和我司自研数据库自动化管理平台 DMP 的日常运维问题,对数据库及周边技术有浓厚的学习兴趣,喜欢看书,追求技术。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 一、问题说明 MHA 虽然停止更新了,但是其高可用的强大仍然为很多公司所青睐。我司客户由于一次网络故障,导致公司整体的网络通信出现问题,网络丢包严重,导致 MHA 管理下的 MySQL.

ActionTech的博客 358

Unity-RetargetPro3-动画插件试用

一个名气大于实战的插件。

大话程序员 710

面试游戏公司运维工程师的经验分享----未完待续

好久没更新博文了,无论心态还是生活,都变得有些懒散,呵呵,,发下牢骚,以下正文: 生活总要有点激情,前几天在猎聘网站刷新了下简历,有几个猎头联系了豪鹫,我挑了其中一家游戏公司过去面试,面试过程1个半小时左右,已经变成运维老咸菜的豪鹫分享下此次的面试经历吧,欢迎网友留言探讨。。 面试准备: 面试经过:约了14:30面试,提前5分钟到达战场,因会议室都有人在用,所以在前台沙发等了近25分钟。。 一轮面...

weixin_34110749的博客 1728

2024年上半年试题二:论性能测试方法及其应用

2025年1月,我以系统分析师的身份参与了公司OA系统的开发与建设。该系统包含的功能有打卡签到、公文流转、工资查询等。我们吸取了之前由于系统使用人数激增暴露出的短时间卡顿等问题,所以在本次开发中,我们非常重视系统的性能测试。通过自动化的测试工具模拟多种正常、峰值及异常负载条件对系统的各项性能指标进行测试。性能测试在软件的质量保证中起着重要的作用,它包括的测试内容丰富多样,常见的负载测试和压力测试都属于性能测试。

银帅 548

FOC高频注入量产级C语言实现方案

高频注入技术是无传感器FOC实现零速和低速控制的关键方法,解决了传统反电动势观测器在低速失效的问题。该技术通过向电机注入高频电压信号,利用永磁同步电机凸极性特性,从高频电流响应中解调出转子位置信息。文章详细介绍了三种主流高频注入方法(旋转电压注入、脉振电压注入和脉振电流注入)的原理及实现流程,重点分析了脉振电压注入的信号处理步骤和位置观测器设计。同时提供了完整的C语言实现代码,包括硬件抽象层、核心算法模块(坐标变换、电流环、SVPWM等)和系统集成方案,并给出量产优化建议和安全保护机制。这套方案适用于要求高

汽车软件开发 791

数据库运维校招笔试核心考点与备考策略解析

数据库运维岗位的笔试考核,往往不只是一张SQL语法或命令行的试卷,而是对MySQL原理、Linux基础、网络排查与工程思维的全面检验。无论是B+树索引的命中逻辑、事务隔离级别与MVCC的实现机制,还是redo log、binlog构成的主从复制链路,都指向同一个核心——理解系统运行的底层规律。扎实的原理功底不仅决定了故障排查的效率,更决定了高可用架构设计与数据恢复方案的可靠性。对于正在准备校招或转岗运维的工程师而言,围绕索引优化、锁分析、日志机制、备份恢复等高频考点建立系统化知识框架,同时补充Shell自动

weixin_34384557的博客 343

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

mysql linux zip包_mysqltool助DBA摆脱mysql数据库“人肉运维”

一、概述DBA的日常工作大概包括:数据库安装,读写分离、高可用、备份策略制定与实施,数据库的监控、数据库的优化,数据库的优化,故障分析,建模等。这些工作如果能借助工具自动完成,DBA节省下来的精力可以去做更有价值的事。下面分享一个工具mysqltool,真正做到一器在手, 工作无忧虑。1.1 mysqltool能解决的问题1、mysql 环境的建设包括单机,主从,MGR,MHA,读写分离2、mys...

weixin_39640372的博客 165

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

MySQL主从复制基础

0.企业高可用性标准 *** 0.1 全年无故障率(非计划内故障停机) 99.9% ----> 0.001*365*24*60=525.6 min 99.99% ----> 0.0001*365*24*60=52.56 min 99.999% ----> 0.0001*365*24*60=5.256 min 0.2 高可用架构方案 负载均衡:有一定的高可用性 LVS Nginx 主

干货满满~ 257

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

9 MySQL-主从复制基础

主从复制基础企业高可用性标准 ***全年无故障率(非计划内故障停机)高可用架构方案主从复制搭建(Classic replication) ***清理主库数据重新初始化3307修改my.cnf ,开启二进制日志功能启动所有节点主库中创建复制用户备份主库并恢复到从库告知从库关键复制信息开启主从专用线程检查复制状态主从复制的原理 (Classic Replication)*****主从中设置到的文件和线...

一个小运维 373

MySQL-第八章-主从复制(基础)

目录 0.企业高可用性标准 0.1 全年无故障率(非计划内故障停机) 0.2 高可用架构方案 1. 主从复制简介 2. 主从复制前提(搭建主从的过程) 3. 主从复制搭建(Classic replication) 3.1 清理主库数据 3.2 重新初始化3307 3.3 修改my.cnf ,开启二进制日志功能 3.4 启动所有节点 3.5 主库中创建复制用户 3.6 备份主库并恢复到从库 3.7 告知从库关键复制信息 3.8 开启主从专用线程 3.9 检查复制状态 3.1

因上努力,果上随缘。但行好事,莫问前程。 738

存储空间压缩6倍 ,多点DMALL零售SaaS场景降本实践

为了节约成本,常见的做法是给到较少的部署资源。分区粒度的设计,可以保证 80% 的事务是单机的,再通过 Table group 机制优化高频的跨机 join 后,单机事务占比可以进一步提升,如果整个业务中有 90% 以上的事务都是单机事务,性能肯定会很好。运维 MySQL 集群,我们基本都是使用 MHA、Orchestrator 去实现高可用,但他们都是“外挂”形式的,本质上是解决不了网络分区导致的脑裂问题,因为数据库和 HA 组件之间,是两个独立的软件,不在同一个进程里,他们之间没有一致性协同控制。

OceanBase分布式数据库的博客 722

金融保险领域统一消息发送平台

包括基础推送服务,可扩展的多推送渠道管理,第三方推送应用管理,推送数据分析平台、个性化服务平台,安全推送审计平台等多个子系统。系统为金融保险行业统一推送基础平台,日均推送消息2000万条,支持短信、官微、邮件多种发送渠道。结合公司项目产品化战略,从基础的推送能力出发,形成公司的统一推送基础产品。

patch的专栏 699

深入理解MySQL 5.7 GTID系列(十):实际案例二

一、触发条件 本案列我测试过4个版本:percona Mysql 5.7.14 官方社区 Mysql 5.7.17 percona Mysql 5.7.19 percona Mysql 5.7.15 其中percona Mysql 5.7.14和官方社区 Mysql 5.7.17有这个问题。其他版本未知 已知percona Mysql 5.7.14或者官...

weixin_34390105的博客 118

org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting

今天在运行项目的时候,突然遇到这个问题,在网上找资料,说的是连接池泄漏,无法从连接池中获取有效的数据库连接。之前以为代码出了问题,结果重启了tomcat后就没出现该异常,在此记录,以免以后遇到同样的问题。 14:44:13,718  WARN org.springframework.jdbc.support.SQLErrorCodesFactory:230 - Error while extra

jal198958的专栏 7142
上一篇: 第39期:MySQL 时间类分区写 SQL 注意事项
下一篇: 故障分析 | 使用--force批量导入数据导致部分数据丢失的问题
爱可生开源社区
博客等级 码龄8年 1936粉丝 1004原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值