【MySQL】innobackupex 长时间hang

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:
【问题现象】
一个数据库实例的备库在做备份时,备份的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)。
记录一个疑问在这里。
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
8月前
|
SQL NoSQL AliSQL
MySQL RENAME hang问题分析与修复
问题现象:alter 过程 rename 文件一直失败,导致 crash。[Warning] InnoDB: Cannot rename file ./tradesupplymember/memberpropertyinfo_0024.ibd (space id 78102), retried 1000 times. There are either pending IOs or flushes 
330 0
MySQL RENAME hang问题分析与修复
|
5月前
|
安全 关系型数据库 MySQL
mysql服务器hang死的原因
mysql服务器hang死的原因
|
缓存 NoSQL 关系型数据库
MySQL客户端连接登入hang住原因分析
MySQL客户端连接登入hang住原因分析
133 0
|
缓存 NoSQL 关系型数据库
MySQL客户端连接登入hang住原因分析
MySQL客户端连接登入hang住原因分析
|
缓存 NoSQL 关系型数据库
MySQL客户端连接登入hang住原因分析
MySQL客户端连接登入hang住原因分析
|
存储 Oracle 关系型数据库