mysqldumpを使ってMySQLのテーブルのサブセットをダンプしようとしています。私はテーブルから選択したい行のid値をファイルに保存しています。私は、変数としてこれらの値を使用すると、以下のように:mysqldumpとwhereオプションとbashスクリプトの長い引数リストを使用する
ids=`cat ids.csv`
mysqldump -u root -p db Table --where="id in ($ids)" >> dump.sql
私が手:
x.bash:行のx:は/ usr/binに/ mysqldumpを:あまりにも長い引数リストを
私は1行の変数$ ids(1,2,3,4、..)をより短いリストに分割し、ループ内でmysqldumpを呼び出そうとするかもしれませんが、現在はbashスクリプトのループではあまりよくありません。 この問題を解決するには、より良い方法があるかもしれません。
ご協力いただきありがとうございます。 ajrealの提案@考慮
EDIT
、 私は
mysql -u root -p -e "select * into outfile ./dump.sql from db.Table where id in ($ids)"
をすれば、私は再び、 "あまりにも長い引数リスト" を取得します。
別の環境からid値を取得します。このスクリプトを実行するデータベースと、where句内で使用するid値を取得するデータベースは、別々の環境にあります。 さらに、この手順を実行する前に、次の手順で使用する「テーブル」テーブルを無視して、--ignore-tableオプションを使用してダンプファイルを作成します。したがって、私はそのステップにもmysqldumpを使用することを好むでしょう。
xargs -a ids.csv -d '\n' -n 20 sh -c 'mysqldump -u root -p db Table --where="id in ([email protected])" >> dump.sql' x
x
が$0
を埋めるためだけのダミーの値である:
負、** MySQLの-uルート-pをファイルに保存し、使用..
ajreal
いくつかの変更後、@Dennis'答えはとても役に立ちました。再度、感謝します。 – eaykin