MySQL社区

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 4658|回复: 11
打印 上一主题 下一主题

关于集群,ndbcluster引擎的大数据量表备份数据还原时,出现锁等待?急求解决办法....

[复制链接]
跳转到指定楼层
1#
发表于 2013-9-25 17:18:42 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ︻$▅▆▇◤ 于 2013-9-25 17:29 编辑

请高手指点
做了mysql集群的备份后,恢复数据时出现ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
数据量在500W,使用的mysqldump备份,source还原的方法
并且恢复时是恢复一部分报一个错,接着又恢复一部分再报一个错,直到结束,数据会丢失一部分,请教高手该怎么解决?!

解释一下啊,我的是两台data节点,256G内存,redhat5.9系统。
还有两台机器每台上都安了一个sql节点和一个管理节点,16G内存,redhat5.7系统
使用rpm包安装的集群,配置文件如下:
config.ini
[ndbd default]
NoOfReplicas=2
DataMemory=193679M
IndexMemory=24210M
MaxNoOfConcurrentOperations=1000000
MaxNoOfConcurrentTransactions=25000
MaxNoOfTables=4096
MaxNoOfOrderedIndexes=2048
MaxNoOfUniqueHashIndexes=512
MaxNoOfAttributes=24576
MaxNoOfTriggers=14336
[tcp default]
portnumber=2202
SendBufferMemory=64M
ReceiveBufferMemory=64M
[ndb_mgmd]
hostname=192.168.10.2
datadir=/var/lib/mysql-cluster
LogDestination=FILE:filename=ndb_1_cluster.log,maxsize=10000000,maxfiles=6
[ndb_mgmd]
hostname=192.168.10.3
datadir=/var/lib/mysql-cluster
LogDestination=FILE:filename=ndb_1_cluster.log,maxsize=10000000,maxfiles=6
[ndbd]
hostname=192.168.10.9
datadir=/var/lib/mysql/data
[ndbd]
hostname=192.168.10.10
datadir=/var/lib/mysql/data
[mysqld]
hostname=192.168.10.2
[mysqld]
hostname=192.168.10.3
[mysqld]
/etc/my.cnf
[mysqld]
ndbcluster
long_query_time=5
log-bin=/var/lib/mysql/binlog/sqld1
log_output=file
general_log=on
slow_query_log=on
general_log_file=/var/lib/mysql/general.log
slow_query_log_file=/var/lib/mysql/slow.log
expire_logs_days=10
max_binlog_size=5M
skip-name-resolve
back_log = 500
key_buffer_size = 4096M
max_allowed_packet = 128M
max-connections=2000
sort_buffer_size = 6M
query_cache_type = 1
query_cache_size = 2048M
tmp_table_size = 2048M
table_open_cache=1024
character-set-server=utf8
init_connect='SET NAMES utf8'
init_connect='set character_set_database=utf8'
default-storage-engine=ndbcluster
ndb-connectstring=192.168.10.2,192.168.10.3
[mysql_cluster]
ndb-connectstring=192.168.10.2,192.168.10.3

QQ截图20130925171455.jpg (26.42 KB, 下载次数: 18)

问题截图

问题截图
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享淘帖 顶 踩
2#
 楼主| 发表于 2013-9-25 17:30:44 | 只看该作者
自己顶一下,求高手指点啊
3#
 楼主| 发表于 2013-9-25 17:39:54 | 只看该作者
︻$▅▆▇◤ 发表于 2013-9-25 17:30
自己顶一下,求高手指点啊

大虾,大虾在哪里
4#
 楼主| 发表于 2013-9-25 19:42:10 | 只看该作者
高手看过来啊!!  
5#
 楼主| 发表于 2013-9-26 08:41:23 | 只看该作者
没人知道吗?  大师在哪里?!
6#
发表于 2013-9-26 18:05:20 | 只看该作者
看来主要是你数据的问题,已经有重复数据了,Duplicate了。
不行就重新清空再导入,如果还有duplicate那么就是数据有问题 ,或是 你备份的有问题,恢复时出错了
注意下:导入时不要有其他数据库操作。
7#
 楼主| 发表于 2013-9-27 11:12:19 | 只看该作者
kider 发表于 2013-9-26 18:05
看来主要是你数据的问题,已经有重复数据了,Duplicate了。
不行就重新清空再导入,如果还有duplicate那么 ...

哪里看出是有重复数据啊?我的表是有主键的,自动增长不会重复的啊,其他列有重复数据无所谓的啊,并且我贴的是测试库,也没有其他的数据库操作的问题,至于重新清空导入我做过很多次了。。。    我现在怀疑是不是哪里有设置某种缓存不够的问题

点评

对不起,是我看错了  发表于 2013-9-27 14:01
8#
发表于 2013-9-27 14:04:41 | 只看该作者
那你这个不是数据的问题。
调调参数试试吧,参数里关于"timeout"相关的可以适当调大点...

或不用source, 用mysql命令直接导入试试国庆节快乐!
9#
 楼主| 发表于 2013-9-27 14:28:03 | 只看该作者
本帖最后由 ︻$▅▆▇◤ 于 2013-9-27 14:29 编辑
kider 发表于 2013-9-27 14:04
那你这个不是数据的问题。
调调参数试试吧,参数里关于"timeout"相关的可以适当调大点...

额。  国庆快乐!
参数我尝试调了好多都不行,关于time的和关于buffer的,可能还是没调对,很纠结啊。。
用了其他的方式还是一样,load data infile/mysql -uroot -p database<t1.sql   都不行

10#
发表于 2013-9-27 14:54:40 | 只看该作者
估计是那个事务没有及时提交产生了锁。
特别是当一个SQL执行完了,但未COMMIT,后面的SQL想要执行就是被锁,超时结束;

看看show engine innodb status , 并结合 show full processlist; 找找问题

在5.5中,information_schema 库中增加了三个关于锁的表(MEMORY引擎);
innodb_trx ## 当前运行的所有事务
innodb_locks ## 当前出现的锁
innodb_lock_waits ## 锁等待的对应关系
帮助来诊断。

另外,附:
1、锁等待超时。是当前事务在等待其它事务释放锁资源造成的。可以找出锁资源竞争的表和语句,优化你的SQL,创建索引等,如果还是不行,可以适当减少并发线程数。

2、你的事务在等待给某个表加锁时超时了,估计是表正被另的进程锁住一直没有释放。
可以用 SHOW INNODB STATUS/G; 看一下锁的情况。

3、搜索解决 之道
在管理 节点的[ndbd default]处加:
TransactionDeadLockDetectionTimeOut=10000(设置 为10秒)默认是1200(1.2秒)

4、InnoDB会自动的检测死锁进行回滚,或者终止死锁的情况。

如果参数innodb_table_locks=1并且autocommit=0时,InnoDB会留意表的死锁,和MySQL层面的行级锁。另外,InnoDB不会检测MySQL的Lock Tables命令和其他存储引擎死锁。
你应该设置innodb_lock_wait_timeout来解决这种情况。
innodb_lock_wait_timeout是Innodb放弃行级锁的超时时间。


11#
 楼主| 发表于 2013-9-27 15:24:29 | 只看该作者
本帖最后由 ︻$▅▆▇◤ 于 2013-9-27 15:29 编辑
kider 发表于 2013-9-27 14:54
估计是那个事务没有及时提交产生了锁。
特别是当一个SQL执行完了,但未COMMIT,后面的SQL想要执行就是被锁 ...

额。 谢谢你这么详细解说   可是我用的引擎是ndbcluster啊    跟innodb有关联吗?   并且我的库只有我自己在用,重启之后直接恢复表还是这问题,不应该会有其他事务锁表的情况吧?  对了还有我用innodb引擎测试的话是没有这个问题的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|申请友链|小黑屋|Archiver|手机版|MySQL社区 ( 京ICP备07012489号   
联系人:周生; 联系电话:13911732319

GMT+8, 2024-5-18 04:56 , Processed in 0.076934 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表