
次のコマンドを使用して、パイプ コマンドを使用して大規模な本番 DB をあるホストから別のホストに移行しています。
mysqldump <someparams> | pv | mysql <someparams>
そして、あるサーバーから別のサーバーに渡される SQL から 23 行目 (または最初の X 行) (ファイルとして保存されているか、単に bash 出力で保存されている) を抽出する必要があります。
私が試したこと:
出力を連結して
less
、少なくとも出力がスクロールするのを確認しようとしましたが、うまくいきませんでしたmysqldump <someparams> | pv | mysql <someparams> | less
について読んだ
sed
が、私には役に立たなかったヘッドを使用してファイルに書き込みましたが、空です
mysqldump <someparams> | pv | mysql <someparams> | head -n 25 > somefile.txt
唯一の要件は、この .sql ファイルを保存できないことです。
何か案が?
ありがとう
答え1
とzsh
mysqldump <someparams> |
pv > >(sed '22,24!d' > saved-lines-22-to-24.txt) |
mysql <someparams>
bash
(または)とzsh
:
mysqldump <someparams> |
pv |
tee >(sed '22,24!d' > saved-lines-22-to-24.txt) |
mysql <someparams>
(ただし、bash
そのプロセスを待機しないので、スクリプト内の次のコマンドを実行するまでに完了することsed
は保証されません)。saved-lines-22-to-24.txt
あるいは、sed
次のように書くこともできます:
mysqldump <someparams> |
pv |
sed '22,24 w saved-lines-22-to-24.txt' |
mysql <someparams>
これを出力として取得するには、次のようにしますzsh
。
{mysqldump <someparams> |
pv > >(sed '22,24!d' >&3) |
mysql <someparams>} 3>&1
またはbash
/ zsh
:
{ mysqldump <someparams> |
pv |
tee >(sed '22,24!d' >&3)
mysql <someparams>
} 3>&1