【问题标题】:mysqldump --where clause is not working as expectedmysqldump --where 子句未按预期工作
【发布时间】:2015-11-11 06:22:15
【问题描述】:

我只想转储最新的行。但是当我通过 --where 选项时,它不会转储行。但是当我使用相同的 where 子句执行选择查询时,它会返回行。这是我的选择查询:

SELECT  * FROM abc.`xyz` WHERE UPDATED_AT >="2015-11-11 10:03:37";

这是我的mysqldump命令:

 mysqldump --no-create-info --replace -h source_server --user=backup1 --password='passcode' abc xyz --where='UPDATED_AT >="2015-11-11 10:03:37"'  > "backup.sql"

上面的mysqldump命令有什么问题,为什么它没有转储记录?

转储文件部分如下:

 --
 -- Dumping data for table `xyz`
 --
 -- WHERE:  UPDATED_AT >='2015-11-11 10:03:37'

 LOCK TABLES `xyz` WRITE;
 /*!40000 ALTER TABLE `xyz` DISABLE KEYS */;
 /*!40000 ALTER TABLE `xyz` ENABLE KEYS */;
 UNLOCK TABLES;

【问题讨论】:

  • 当我删除where时它工作正常
  • 那么where 条件确实是问题所在。现在,它永远不会返回 true。
  • UPDATED_AT 是时间戳而不是日期时间。我应该尝试更改字段类型吗?
  • 当我将字段类型从时间戳更新为日期时间时效果很好。
  • 等一下...让我们找到一种方法来保持不变,并在实际的mysqldump 命令中将时间戳转换为日期时间。

标签: mysql mysqldump


【解决方案1】:

在 where 子句中,UPDATED_AT 字段类型是时间戳,我将字段类型更改为 DATETIME。它按预期工作。

对于以上字段类型更改的最新版本,但对于 mysql 5.0.5 FROM_UNIXTIME 有效。

【讨论】:

  • FROM_UNIXTIME 返回所有行。
【解决方案2】:

试试下面的命令:

mysqldump --tz-utc=0 --no-create-info --replace -h source_server --user=backup1 --password='passcode' abc xyz --where='UPDATED_AT >="2015-11-11 10:03:37"'  > "backup.sql"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    • 2022-01-13
    • 1970-01-01
    • 2016-10-16
    • 2021-02-06
    • 1970-01-01
    相关资源
    最近更新 更多