我正在使用以下转储命令,但是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。
答案 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的大小。