mysqldump最大忽略表用法?

时间:2019-06-28 14:54:25

标签: mysql

我正在使用以下转储命令,但是TABLE_additionalname数据库中的许多DB仍被转储。是否有最大数量的表可以忽略,或者该语法在其他方面不正确(转储完成,所以我怀疑它是有效的语法)。

mysqldump --skip-lock-tables --single-transaction --flush-logs --hex-blob 
 --max_allowed_packet=10M DB -uroot -pPASSWORD 
 --ignore-table=DB.TABLE_additionalname 
 --ignore-table=DB.TABLE_additionalname 
 --ignore-table=DB.TABLE_additionalname 
 --ignore-table=DB.TABLE_additionalname 
 --ignore-table=DB.TABLE_additionalname 
 --ignore-table=DB.TABLE_additionalname 
 --ignore-table=DB.TABLE_additionalname 
 --ignore-table=DB.TABLE_additionalname 
 --ignore-table=DB.TABLE_additionalname 
 --ignore-table=DB.TABLE_additionalname 
 --ignore-table=DB.TABLE_additionalname 
 --ignore-table=DB.TABLE_additionalname 
 --ignore-table=DB.TABLE_additionalname 
 --ignore-table=DB.TABLE_additionalname 
 --ignore-table=DB.TABLE_additionalname 
 --ignore-table=DB.TABLE_additionalname 
 --ignore-table=DB.TABLE_additionalname 
 --ignore-table=DB.TABLE_additionalname 
 --ignore-table=DB.TABLE_additionalname 
 --ignore-table=DB.TABLE_additionalname 
 --ignore-table=DB.TABLE_additionalname 
 --ignore-table=DB.TABLE_additionalname 
 --ignore-table=DB.TABLE_additionalname 
 --ignore-table=DB.TABLE_additionalname 
 --ignore-table=DB.TABLE_additionalname

转储为41 GB,因此很难确定其中包含哪些表。

我也查看了我正在运行的版本的手册,但其中没有指定限制https://dev.mysql.com/doc/refman/5.6/en/mysqldump.html#option_mysqldump_ignore-table

1 个答案:

答案 0 :(得分:0)

mysqldump将要忽略的表列表存储在动态分配的哈希表中。它将把表名插入每种类型的哈希中,并且似乎没有任何代码来限制被忽略表的数量。

https://github.com/mysql/mysql-server/blob/8.0/client/mysqldump.cc#L847

case (int)OPT_IGNORE_TABLE: {
  if (!strchr(argument, '.')) {
    fprintf(stderr,
            "Illegal use of option --ignore-table=<database>.<table>\n");
    exit(1);
  }
  ignore_table->insert(argument);
  break;
}

在MySQL源代码中,文件mysys / hash.c具有用于初始化哈希表的函数的注释:

  

通过为以下项定义并提供有效值来初始化哈希     它的元素。无法为内存分配内存     hash-> array元素不会导致致命错误。的     作为哈希一部分的动态数组将分配内存     在插入过程中根据需要。

这意味着如果有限制,则与系统RAM有关,与代码无关。哈希表将根据需要增长,直至达到可用RAM的大小。