草庐IT

innodb_lock_wait_timeout

全部标签

带有 WHERE id IN (SELECT ...) 的 mysqldump 产生表 "was not locked"错误

我有2个数据库,db1的表field_collection_item中缺少约100,000行,我想通过从db2.我的计划是:在db2中通过item_id识别缺失的项目,导出item_id的列表。将item_id导入db1到新表missing_field_collection_item使用以下mysqldump提取数据:mysqldump-uUSER-pPASSDATABASE--no-create-info--tablesfield_collection_item--where="item_idIN(SELECTitem_idFROMmissing_field_collection_i

mysql - 如何解决TRUNCATE TABLE上的MySQL innodb "Waiting for table metadata lock"?

在GitLabCI服务器中运行包含数百个应用程序单元测试的测试套件。在运行10次测试后,不知何故,它总是卡在等待TRUNCATETABLE上的表元数据锁定,这是一个拆卸步骤。我知道SHOWENGINEINNODBSTATUS命令。以下是一些诊断日志:mysql>\s--------------mysqlVer14.14Distrib5.6.30,forLinux(x86_64)usingEditLinewrapperConnectionid:190Currentdatabase:Currentuser:root@localhostSSL:NotinuseCurrentpager:std

mysql - 如何解决TRUNCATE TABLE上的MySQL innodb "Waiting for table metadata lock"?

在GitLabCI服务器中运行包含数百个应用程序单元测试的测试套件。在运行10次测试后,不知何故,它总是卡在等待TRUNCATETABLE上的表元数据锁定,这是一个拆卸步骤。我知道SHOWENGINEINNODBSTATUS命令。以下是一些诊断日志:mysql>\s--------------mysqlVer14.14Distrib5.6.30,forLinux(x86_64)usingEditLinewrapperConnectionid:190Currentdatabase:Currentuser:root@localhostSSL:NotinuseCurrentpager:std

mysql - 如何检查 MySQL 表是否为 UTF-8 且具有 storageEngine InnoDB?

四处搜索只能找到从一种格式更改为另一种格式的说明,但我似乎无法找到确切的方法来确定我首先拥有哪些。我该怎么做:检查表有什么字符编码?检查表使用什么存储引擎?检查所有表是否都是某种编码?检查所有表是否都有特定的存储引擎? 最佳答案 您可以使用information_schema来了解每个表的引擎。selecttable_name,enginefrominformation_schema.tableswheretable_schema='your_database'对于你可以使用的编码showcreatetabletable_name或

mysql - 如何检查 MySQL 表是否为 UTF-8 且具有 storageEngine InnoDB?

四处搜索只能找到从一种格式更改为另一种格式的说明,但我似乎无法找到确切的方法来确定我首先拥有哪些。我该怎么做:检查表有什么字符编码?检查表使用什么存储引擎?检查所有表是否都是某种编码?检查所有表是否都有特定的存储引擎? 最佳答案 您可以使用information_schema来了解每个表的引擎。selecttable_name,enginefrominformation_schema.tableswheretable_schema='your_database'对于你可以使用的编码showcreatetabletable_name或

mysql - 如何提高大型 InnoDB 表的 DELETE FROM 性能?

我有一个相当大的InnoDB表,其中包含大约1000万行(并且不断增加,预计会变成该大小的20倍)。每行不是那么大(平均为131B),但有时我不得不删除其中的一大块,这需要很长时间。这是表结构:CREATETABLE`problematic_table`(`id`bigint(20)unsignedNOTNULLAUTO_INCREMENT,`taxid`int(10)unsignedNOTNULL,`blastdb_path`varchar(255)NOTNULL,`query`char(32)NOTNULL,`target`int(10)unsignedNOTNULL,`score

mysql - 如何提高大型 InnoDB 表的 DELETE FROM 性能?

我有一个相当大的InnoDB表,其中包含大约1000万行(并且不断增加,预计会变成该大小的20倍)。每行不是那么大(平均为131B),但有时我不得不删除其中的一大块,这需要很长时间。这是表结构:CREATETABLE`problematic_table`(`id`bigint(20)unsignedNOTNULLAUTO_INCREMENT,`taxid`int(10)unsignedNOTNULL,`blastdb_path`varchar(255)NOTNULL,`query`char(32)NOTNULL,`target`int(10)unsignedNOTNULL,`score

mysql - 加快从 MyISAM 到 InnoDB 的转换

我有一个MySQL1.5GBMyISAM表(1.0GB数据,0.5GB索引)正在生产中,我即将转换为InnoDB。由于该表用于生产,我希望尽可能缩短停机时间。我的问题:应该调整哪些MySQL配置选项以加快ALTERTABLEtable_nameENGINE=InnoDB;?还可以使用哪些其他技巧来加快生产数据库表从MyISAM到InnoDB的转换? 最佳答案 设置较大的innodb_buffer_pool_size(2GB或更多)使用shell命令预读旧的myisam数据/索引文件增加innodb_log_file_size(256

mysql - 加快从 MyISAM 到 InnoDB 的转换

我有一个MySQL1.5GBMyISAM表(1.0GB数据,0.5GB索引)正在生产中,我即将转换为InnoDB。由于该表用于生产,我希望尽可能缩短停机时间。我的问题:应该调整哪些MySQL配置选项以加快ALTERTABLEtable_nameENGINE=InnoDB;?还可以使用哪些其他技巧来加快生产数据库表从MyISAM到InnoDB的转换? 最佳答案 设置较大的innodb_buffer_pool_size(2GB或更多)使用shell命令预读旧的myisam数据/索引文件增加innodb_log_file_size(256

mysql - 如何锁定尚不存在的 InnoDB 行?

我如何保证我可以搜索我的数据库中是否存在用户名,然后将该用户名作为新行插入到数据库中,而无需在SELECT和INSERT语句?几乎就像我锁定了一个不存在的行。我想用用户名"Foo"锁定不存在的行,这样我现在可以检查它是否存在于数据库中,如果它不存在则将其插入数据库任何中断。我知道使用LOCKINSHAREMODE和FORUPDATE存在,但据我所知,这只适用于已经存在的行。我不确定在这种情况下该怎么做。 最佳答案 虽然上面的答案是正确的,因为SELECT...FORUPDATE将阻止并发session/事务插入相同的记录,但这并不是