︻$▅▆▇◤ 发表于 2013-9-25 17:18:42

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

本帖最后由 ︻$▅▆▇◤ 于 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

NoOfReplicas=2
DataMemory=193679M
IndexMemory=24210M
MaxNoOfConcurrentOperations=1000000
MaxNoOfConcurrentTransactions=25000
MaxNoOfTables=4096
MaxNoOfOrderedIndexes=2048
MaxNoOfUniqueHashIndexes=512
MaxNoOfAttributes=24576
MaxNoOfTriggers=14336

portnumber=2202
SendBufferMemory=64M
ReceiveBufferMemory=64M

hostname=192.168.10.2
datadir=/var/lib/mysql-cluster
LogDestination=FILE:filename=ndb_1_cluster.log,maxsize=10000000,maxfiles=6

hostname=192.168.10.3
datadir=/var/lib/mysql-cluster
LogDestination=FILE:filename=ndb_1_cluster.log,maxsize=10000000,maxfiles=6

hostname=192.168.10.9
datadir=/var/lib/mysql/data

hostname=192.168.10.10
datadir=/var/lib/mysql/data

hostname=192.168.10.2

hostname=192.168.10.3

/etc/my.cnf

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

ndb-connectstring=192.168.10.2,192.168.10.3

︻$▅▆▇◤ 发表于 2013-9-25 17:30:44

自己顶一下,求高手指点啊

︻$▅▆▇◤ 发表于 2013-9-25 17:39:54

︻$▅▆▇◤ 发表于 2013-9-25 17:30
自己顶一下,求高手指点啊

大虾,大虾在哪里

︻$▅▆▇◤ 发表于 2013-9-25 19:42:10

高手看过来啊!!  

︻$▅▆▇◤ 发表于 2013-9-26 08:41:23

没人知道吗?大师在哪里?!

kider 发表于 2013-9-26 18:05:20

看来主要是你数据的问题,已经有重复数据了,Duplicate了。
不行就重新清空再导入,如果还有duplicate那么就是数据有问题 ,或是 你备份的有问题,恢复时出错了
注意下:导入时不要有其他数据库操作。

︻$▅▆▇◤ 发表于 2013-9-27 11:12:19

kider 发表于 2013-9-26 18:05
看来主要是你数据的问题,已经有重复数据了,Duplicate了。
不行就重新清空再导入,如果还有duplicate那么 ...

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

kider 发表于 2013-9-27 14:04:41

那你这个不是数据的问题。
调调参数试试吧,参数里关于"timeout"相关的可以适当调大点...

或不用source, 用mysql命令直接导入试试国庆节快乐!

︻$▅▆▇◤ 发表于 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   都不行

kider 发表于 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、搜索解决 之道
在管理 节点的处加:
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放弃行级锁的超时时间。


︻$▅▆▇◤ 发表于 2013-9-27 15:24:29

本帖最后由 ︻$▅▆▇◤ 于 2013-9-27 15:29 编辑

kider 发表于 2013-9-27 14:54
估计是那个事务没有及时提交产生了锁。
特别是当一个SQL执行完了,但未COMMIT,后面的SQL想要执行就是被锁 ...
额。 谢谢你这么详细解说   可是我用的引擎是ndbcluster啊    跟innodb有关联吗?   并且我的库只有我自己在用,重启之后直接恢复表还是这问题,不应该会有其他事务锁表的情况吧?对了还有我用innodb引擎测试的话是没有这个问题的。
页: [1]
查看完整版本: 关于集群,ndbcluster引擎的大数据量表备份数据还原时,出现锁等待?急求解决办法....