我知道要进行数据库转储,我可以忽略一些表。但我想使用 20% 40% 这样的数据百分比对所有表进行转储,因为整个转储太大。这是我的正常转储查询。
mysqldump -h dburl -u user -p password --databases dbname > dbname.sql
我不是在寻找特定的操作系统并使用 Linux Ubuntu。
我知道要进行数据库转储,我可以忽略一些表。但我想使用 20% 40% 这样的数据百分比对所有表进行转储,因为整个转储太大。这是我的正常转储查询。
mysqldump -h dburl -u user -p password --databases dbname > dbname.sql
我不是在寻找特定的操作系统并使用 Linux Ubuntu。
80-20 规则表示最小的 80% 的表可能只占用 20% 的空间。所以为他们准备一个 mysqldump。
然后为每个小于 20% 空间的剩余表提供更多的 mysqldump。
最后,任何大桌子都需要--where
Nambu14 提到的选项。或者您可以尝试说--where="true LIMIT 20000,10000"
偷偷摸摸地OFFSET
进入。(请参阅https://dev.mysql.com/doc/refman/8.0/en/mysqldump.htmlLIMIT
上的评论之一) 但不允许写入这样做时的表 - 它可能导致额外/缺失的记录。
或者您可以调整这里讨论的分块技术。这避免了额外/缺失的问题并避免了LIMIT
混乱。运气好的话,你可以硬编码这样的范围所需的范围值--where="my_pk >= 'def' AND my_pk < 'mno'"
不要忘记处理触发器、存储例程、视图等。
听起来您想避免编写脚本,一种快速的解决方案是使用--where
mysqldump 选项。
mysqldump --opt --where="1 limit 1000" myschema
这会将转储限制为 1000 行 - 显然会根据您的大小限制进行调整。
您可以通过偏移转储跟进此操作以获得下一个 1000 - 需要进行小调整,以便不会重新创建表。
mysqldump --opt --where="1 limit 1000 offset 1000" --no-create-info myschema
您可以进一步混合,假设您只需要随机选择的行中的所有数据的 40%:
mysqldump --opt --where="1 having rand() < 0.40" myschema