【MySQL】innobackupex 长时间hang

【问题现象】

一个数据库实例的备库在做备份时,备份的log 一直显示

>> log scanned up to (3015320266621)

>> log scanned up to (3015320266621)

....

>> log scanned up to (3015320266621)

>> log scanned up to (3015320266621)

>> log scanned up to (3015320266621)

长达 10多个小时。

mysql> show processlist;

+--------+-------------+--------------------+------+------------+---------+---------------------------------- 

| Id     | User        | Host               | db   | Command    | Time    |State                              

+--------+-------------+--------------------+------+------------+---------+---------------------------------- 

|      1 | system user |                    | NULL | Connect    | 2684619 | Waiting for master to sendevent     

|      2 | system user |                    | NULL | Connect    |      31 | Waiting for release of readlock                                ......

4 rows in set (0.00 sec)

system用户显示 Waiting for release of readlock

执行备份的用户为Xtraback 对应的time 列则每4s 循环一次。system user 的状态表示 xtraback 进程已经执行了flush tables with read only,并等待xtrabackup进程释放read lock。我们首先来了解一下xtrabackup 大致过程:

 backup()并记录XTRABACKUP_BINARY信息

 mysql_open()  启动管道链接的子进程连接mysql

 mysql_check() 检查连接mysql的子进程是否OK,发送一个虚拟查询,等待mysql_response_timeout超时退出

 mysql_close() 关闭连接mysql子进程

 start_ibbackup() 创建子进程运行ibbackup来备份innodb数据和索引

   如果不是远程备份,不是stream模式,进入wait_for_ibbackup_suspend() 检查ibbackup子进程是否还活着

 mysql_open()

 如果指定–safe-slave-backup 进入wait_for_safe_slave() ,通过每隔3s启停sql thread来不断检查实例上打开临时表数目是否为0

 mysql_check()

 如果没有指定–no-lock,进入 mysql_lockall(),执行FLUSH TABLES WITH READ LOCK;

 backup_files() 拷贝除ibd外所有的文件

 mysql_unlockall() 执行UNLOCK TABLES

 如果指定–safe-slave-backup  START SLAVE SQL_THREAD

 mysql_close()

问题出现在 发出flush tables with read lock 并获取了全局锁(systemuser 才在等待read lock) innodb 拷贝除ibd外所有的文件.

但是根据

xtrabackup源码 

# flush tables with read lock

        mysql_check(); --没有问题

        mysql_lockall() if !$option_no_lock; 

# timeout in seconds for a reply from mysql

my $mysql_response_timeout = 900;

sub mysql_send {

    my $request = shift;

 

    $current_mysql_request = $request;

    print MYSQL_WRITER "$request\n";

    mysql_check();

    $current_mysql_request = '';

}

 

sub mysql_lockall {

    $now = current_time();

    print STDERR "$now  $prefix Starting to lock all tables...\n";=

    mysql_send "USE mysql;";

    mysql_send "SET AUTOCOMMIT=0;";

    if (compare_versions($mysql_server_version, '4.0.22') == 0

        || compare_versions($mysql_server_version, '4.1.7') == 0) {

        # MySQL server version is 4.0.22 or 4.1.7

        mysql_send "COMMIT;";

        mysql_send "FLUSH TABLES WITH READ LOCK;";

    } else {

        # MySQL server version is other than 4.0.22 or 4.1.7

        mysql_send "FLUSH TABLES WITH READ LOCK;";

        mysql_send "COMMIT;";

    }

    write_binlog_info;

    write_slave_info if $option_slave_info;

 

    $now = current_time();

    print STDERR "$now  $prefix All tables locked and flushed to disk\n";

}

--在执行flush tables with read lock时,mysql_send函数执行超时900S,备份失败。我的实例的备份却一直表现为log scanned up to (3015320266621)。

记录一个疑问在这里。

时间: 2024-07-28 20:22:14

【MySQL】innobackupex 长时间hang的相关文章

应用长时间未调用后再次调用出现hang的情况

        之前某应用就存在长时间不调用,再次调用时处于hang,等待10分钟返回3113的连接错误.今天正好同事也问了个相同的问题,也是应用长时间不调用就出现这种情况.         以前对于这种问题进行过排查,但一直未解决,针对今天的这个系统的问题,还是按照老方法检查, 1. 检查应用日志,确实长时间等待后报3113的错误. 2. 检查数据库的PROFILE中idle_time参数,此处设置的是DEFAULT的UNLIMITED,说明超时不会是由数据库用户PROFILE配置导致的. 3

mysql-MySQL插入数据缓慢,建立session连接需要很长时间是怎么回事?

问题描述 MySQL插入数据缓慢,建立session连接需要很长时间是怎么回事? 为什么在执行Mysql插入的时候会等待20-30秒,就是建立SessionFactory的这个过程. program strt: 2013-09-22 16:22:40.413 complete build SessionFactory: 2013-09-22 16:23:10.299 open session begin transaction time: 2013-09-22 16:23:10.322 这是我在

spring 的问题!困饶我很长时间了,谁能帮我解决下,谢谢!

问题描述 我不知道我在哪里出了问题,但是总是出错,说我的数据引入类型不对,请大家帮下我,下面是我的代码:控制台报的错误为:2008-8-18 23:21:23 org.apache.catalina.core.ApplicationDispatcher invoke严重: Servlet.service() for servlet jsp threw exceptionjava.lang.NumberFormatException: For input string: "name"at

FAQ系列 | 复制线程长时间Opening tables

0.导读 在slave上,发现SQL thread长时间处于Opening tables状态 1.问题描述 朋友的数据库,做了主从replication复制.在slave实例上,SQL thread的长时间处于Opening tables状态,复制进程异常. mysql> show processlist; +----+-------------+-----------+------+---------+-------+--------------------------------------

使用mysql的长连接

    有个资料看得我云里雾里的.现在用自己的言语来总结一下,写文字,能够加深自己的理解.也会在写的过程中帮助自己发现理解方面瑕疵,继续查资料求证.     短链接的缺点:创建一个连接,程序执行完毕后,就会自动断掉与mysqlserver的链接.于是多少次php执行,就会多少次这样的创建和释放过程.频繁地创建和释放连接,比较耗费cpu资源.   长连接就可以避免每次请求都创建连接的开销,节省了时间和IO消耗.   长连接是提高了性能.不过还有一些细节的问题需要解决,即mysql发现一个链接长时间

连接池-关于Java服务长时间运行出现各种bug问题,可能运行几天没问题,但是运行十几天就会出现各种bug

问题描述 关于Java服务长时间运行出现各种bug问题,可能运行几天没问题,但是运行十几天就会出现各种bug 服务使用的是ScheduledThreadPoolExecuto定时任务,有使用到全局变量,数据库连接池使用的是c3p0,我感觉出现问题的原因可能就是这三个里哪个导致的,程序是没问题的,就是运行久了就出现各种问题了,而且很莫明奇妙,比如本来是好好的运行久了日志中的中文从那个时刻起往后全都乱码了.请问这是怎么回事? 定时任务: ScheduledThreadPoolExecutor boo

如何查看Windows服务器运行了多长时间

前言:有时候管理.维护Windows服务器需要定期重启服务器(为什么 需要重启,你懂的),但是这个"定期"有时候会受很多因素影响,例如某台服务器忘了重启:某台服务器那个时间段业务繁忙,不能重启:那个时间段你忘了重启 服务器...... 诸如此类.当你的Schedule被打乱了.这个时候,你就需要查看服务器运行了多长时间,下面介绍一下如何查看Windows服务器运行时间的方法 方法一:如果这台Windows服务器是数据库服务器,那么可以通过查看SQL SERVER启动时间来间接判断Win

在oracle一个有60万记录的表中删除几十条记录怎么用了很长时间?

oracle 在oracle一个有60万记录的表中删除几十条记录怎么用了很长时间?

网站长时间不更新造成的影响

网站长时间不更新,是否对网站造成哪些不良的影响,网站权重是否会下降,排名是否会滑落呢?网站长时间不更新到底会出现什么问题?网站内容不更新的话,那会不会被搜索引擎惩罚?那我就给大家说下到底对网站有什么影响情况: 一.百度快照更新不及时 网站频繁更新,对百度快照更新是有一定的帮助,如果你的网站还没度过百度的审核期,也就是满3个月以后,一直不更新网站内容,那蜘蛛就会很少光顾你的网站,每次蜘蛛抓取的时候,老是看到以前的内容,再深入抓取的时候也没发现新的内容,那下次蜘蛛就不会那么频繁来抓取,你的网站快照就