特定 ID 和日期范围的 mysqldump
mysqldump for particular ID and date range
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"
根据您是要转储 INSERT 语句还是乐于将数据转储为 CSV 格式以便在其他地方使用 LOAD DATA INFILE,您可以采用两种方法。两个版本都假定您要使用 gzip 并有权访问命令行。
mysqldump 方法
您可以使用 mysqldump --where 子句在一秒钟内过滤匹配值的记录table,但您需要对现有内容进行一些更改
更改 --where 子句以删除 SELECT 和 FROM 部分并匹配 sub-select
中的 wind_turbine 记录
添加一个开关以确保从数据库中获得一致的转储(--lock-all-tables 或--single-transaction)。
从 table 的列表中删除 table wind_turbine
因为它不会匹配 --where 子句并且您只想转储 [=13= 中的数据].
像这样的东西应该可以工作:
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
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"
根据您是要转储 INSERT 语句还是乐于将数据转储为 CSV 格式以便在其他地方使用 LOAD DATA INFILE,您可以采用两种方法。两个版本都假定您要使用 gzip 并有权访问命令行。
mysqldump 方法
您可以使用 mysqldump --where 子句在一秒钟内过滤匹配值的记录table,但您需要对现有内容进行一些更改
更改 --where 子句以删除 SELECT 和 FROM 部分并匹配 sub-select
中的 wind_turbine 记录添加一个开关以确保从数据库中获得一致的转储(--lock-all-tables 或--single-transaction)。
从 table 的列表中删除 table wind_turbine
因为它不会匹配 --where 子句并且您只想转储 [=13= 中的数据].
像这样的东西应该可以工作:
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