如何mysqldump为数据库中的每个表最后10行?

问题描述 投票:2回答:3

从数据库中的表中获取了很多关于如何mysqldump最后'n'行的文章。例如mysqldump --user=superman --password=batman --host=gothamcity.rds.com --where="1=1 ORDER BY id DESC LIMIT 10" DB_NAME TABLE_NAME ./path/to/dump/file.sqlStackOverflowServerFault的这些答案中找到

但是,我如何告诉mysqldump为数据库中的每个表导出最后'n'行

mysql database export mysqldump database-backups
3个回答
2
投票

这是我在终端中所做的。我们的想法是基本上获取所有表名的列表,然后将表名列表管道化为bash中的while循环,其中每个表都被单独转储到单独的dumpfile(由tablename命名)中。

mysql --user=superman --password=batman --host=gothamcity.rds.com --port=3306 --database=jokersDB --execute="show tables" --silent --batch | while read tablename ; do mysqldump --user=superman --password=batman --host=gothamcity.rds.com --port=3306 --where="1=1 ORDER BY id DESC LIMIT 10" jokersDB $tablename --add-drop-table > $tablename.sql ; done

有效。唯一的问题是,它将每个表转储到它自己的个人SQL文件中 - 并非所有表都被转储到单个文件中。但我想这些单个文件的内容也可以通过其他一些bash命令连接成一个文件。


0
投票

您可以将--where标志与多个表一起使用,只要它在语法上对每个表都有意义。因此,如果您的所有表都有一个名为id的代理PK列,那么您根本不需要命名任何表。只需使用--all-databases标志(或命名您想要的数据库)和指定ORDER BY / LIMIT的--where标志进行转储。

mysqldump --user = superman --password = batman --host = gothamcity.rds.com --where =“1 = 1 ORDER BY id DESC LIMIT 10”--databases DB_NAME> /path/to/dump/file.sql


0
投票

除了solution of @Syed Rakid Al Hasan

如果我们像这样改变mysqldump写入部分

> $ tablename.sql

>> jokersDB.sql

我们可以在单个文件中转储偏移量为10的所有数据库数据

完整命令:

mysql --user = superman --password = batman --host = gothamcity.rds.com --port = 3306 --database = jokersDB --execute =“show tables”--silent --batch |同时读取tablename; do mysqldump --user = superman --password = batman --host = gothamcity.rds.com --port = 3306 --where =“1 = 1 ORDER BY id DESC LIMIT 10”jokersDB $ tablename --add-drop-表>> jokersDB.sql; DONE

jokersDB.sql文件必须存在且为空

© www.soinside.com 2019 - 2024. All rights reserved.