【问题标题】:mysqldump for particular ID and date range特定 ID 和日期范围的 mysqldump
【发布时间】:2018-03-27 06:47:12
【问题描述】:
mysqldump -uroot -p --no-create-info --no-create-db hawa_new scada_data wind_turbine  "SELECT  s.* FROM scada_data as s,wind_turbine as w WHERE s.local_tm BETWEEN '2018-02-01' AND '2018-02-28' AND s.turbine = w.id AND w.pooling_station = 29" |gzip > /var/lib/mysql-files/sd_feb.sql.gz

我在其中得到了错误

Couldn't find table: "SELECT  s.* FROM scada_data as s,wind_turbine as w WHERE s.local_tm BETWEEN '2018-02-01' AND '2018-02-28' AND s.turbine = w.id AND w.pooling_station = 29"

【问题讨论】:

    标签: mysql backup


    【解决方案1】:

    您可以在此处采用 2 种方法,具体取决于您是想要转储 INSERT 语句还是愿意将数据转储为 CSV 格式以便在其他地方与 LOAD DATA INFILE 一起使用。两个版本都假定您要使用 gzip 并可以访问命令行。

    mysqldump方法

    您可以使用 mysqldump --where 子句过滤与第二个表中的值匹配的记录,但您需要对现有内容进行一些更改

    更改您的 --where 子句以删除 SELECT 和 FROM 部分并匹配子选择中的 wind_turbine 记录

    添加一个开关以确保您从数据库中获得一致的转储(--lock-all-tables 或 --single-transaction)。

    从表列表中删除表wind_turbine,因为它与--where 子句不匹配,您只想转储scada_data 中的数据。

    这样的事情应该可以工作:

    mysqldump -uroot -p --single-transaction --no-create-info --no-create-db  --where "local_tm BETWEEN '2018-02-01' AND '2018-02-28' AND turbine IN (SELECT id FROM wind_turbine WHERE pooling_station = 29" hawa_new scada_data | gzip > /var/lib/mysql-files/sd_feb.sql.gz
    

    SELECT INTO OUTFILE 方法

    (这与您的原始查询相同,可能是我自己执行此操作的方式)

    mysql -e "SELECT s.* INTO OUTFILE '/var/lib/mysql-files/sd_feb.sql' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n'
    FROM scada_data as s,wind_turbine as w WHERE s.local_tm BETWEEN '2018-02-01' AND '2018-02-28' AND s.turbine = w.id AND w.pooling_station = 29"; gzip /var/lib/mysql-files/sd_feb.sql
    

    【讨论】:

      猜你喜欢
      • 2017-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多