【问题标题】:mysqldump max ignore-table usage?mysqldump 最大忽略表使用情况?
【发布时间】:2019-06-28 14:54:25
【问题描述】:

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

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

【问题讨论】:

    标签: mysql


    【解决方案1】:

    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 的大小。

    【讨论】:

    • 所以我监控了 RAM,但它从未达到极限。我在生成的文件上运行grep 'TABLE_' 并返回-- Table structure for table `TABLE_DROP TABLE IF EXISTS 等。没有数据库名称可能会导致问题吗? top 显示Mem: 32122936k total, 31857708k used, 265228k free, 117364k buffers
    • 我不知道你想做什么。我回答了您提出的问题:您可以忽略的表的最大数量。
    • 在这种情况下,我将撤回之前的评论。表仍在导出中,未超过最大 ram。
    猜你喜欢
    • 2011-05-23
    • 2020-05-18
    • 2014-11-13
    • 2010-10-12
    • 1970-01-01
    • 2013-11-25
    • 2018-06-06
    • 2013-12-09
    • 1970-01-01
    相关资源
    最近更新 更多