有点绞尽脑汁,试图做我认为很容易做的事情。我正在尝试使用 shell 脚本/MySQL 选项从数据库中的一个表获取数据到另一个数据库中的临时表。基本上截断表 db2.stage_customer_log,然后 db1.customer_log -> db2.stage_customer_log。我尝试了几个选项,但每个选项都取得了有限的成功,我已经准备好接受建议。
我尝试的第一个想法是:
mysqldump -p dbname -u uname customer_log > stage_customer_log.csv --no-create-info
但事实证明这不是一个好的选择,因为生成的文件是原始表名的 INSERT。所以我必须做一些操作才能让它工作。
接下来,我用这个创建了一个 shell 脚本:
#!/bin/sh
mysql -h hostname -P 99999 -u uname -p --database dbname <<STOP
SELECT * FROM customer_log INTO OUTFILE 'stage_dm_customer_log.csv'
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n';
\q
STOP
test $? = 0 && echo "Your batch job terminated gracefully"
这给了我想要的结果(逗号分隔文件),但它把文件放在 MySQL 目录中(即使我输入了绝对路径,或 './' 或其他)。看到我托管在亚马逊上,第二部分(导入)不起作用,因为我遇到了访问错误。
然后,当我阅读有关选项的更多信息时,我又回到了第一个选项。我的最终命令是这样的:
mysqldump -p dbname -u uname customer_log --no-create-info --no-create-db --tab='/tmp/' --fields-optionally-enclosed-by='"' --fields-terminated-by=',' --fields-escaped-by='' --lines-terminated-by='\n' --verbose
但再次以必须操纵的文件名结束。
我终于尝试使用 Pentaho 引入表,我不知道它是否是我们的实例,但对于这么少的记录需要相当长的时间(85,000 条记录需要 32 分钟)。所以,我不需要具体细节,但这样的最佳途径是什么?其他人实施了什么?
谢谢。