0

所以我有一张表,里面有将近 200,000 条记录要清理。但是我想备份它。我尝试过使用 phpMyAdmin 界面,但考虑到数据库的庞大规模,脚本会一直超时。我曾经尝试一次备份 5000 个,但它不起作用。

我想知道我是否有更好的时间使用 mysqldump 命令从命令行执行此操作。但是,我很难想出以下命令:

  • 备份一个特定的数据库(比如db1
  • 备份db1(比如说table1)中的特定表
  • 一次备份几条记录(比如 2500 条)

我知道这个问题不是连接问题,因为我可以连接到它。

这是我到目前为止所拥有的:

mysqldump --opt -h somedomain.com -u dbuser -p dbpass db1 table1 > ./my-backup-file.sql

任何帮助将不胜感激。

更新

我知道问题是什么。一个注册表单是开放的,任何人都可以注册,垃圾邮件机器人发现它并用注册请求敲击它,从而在数据库中创建了大约 199,980 条新记录。所以我知道它们是标准的 varchar 和正在插入的文本数据。我想知道的是最简单、痛苦、免费的清理方法。

4

2 回答 2

1

You could also use the --where argument like this:

--where="1=1 LIMIT 0, 2500"

This will append the LIMIT clause at the end of the query

于 2013-05-10T03:56:52.937 回答
0

如果有更好的方法,我想出了如何做到这一点并纠正我,但我是这样做的:

我添加了一个--where=选项并指定了一个条件,例如,列user_id必须在 1 到 100 之间。

mysqldump --opt -h somedomain.com -u dbuser -p dbpass db1 table1 --where="user_id >= 1 AND user_id <= 100"  > ./my-backup-file.sql

这正是我想做的。

事后看来,我认为我可以改用这个条件:--where="user_id BETWEEN 1 AND 100",读起来更好。

于 2013-05-10T03:45:11.470 回答