从数据库中的表中获取了很多关于如何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.sql
从StackOverflow和ServerFault的这些答案中找到
但是,我如何告诉mysqldump为数据库中的每个表导出最后'n'行
这是我在终端中所做的。我们的想法是基本上获取所有表名的列表,然后将表名列表管道化为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命令连接成一个文件。
您可以将--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
除了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文件必须存在且为空