共有Webホストにmysqlデータベースがあります。サイズが大きすぎると、圧縮を含む単一のダンププロセスが終了します。各テーブルを個別にダンプして圧縮したいです。このコマンドを使用してください
mysqldump -uuser -ppass database < show_tables.sql
次のように、すべてのテーブルの名前を返すことができます。
table1
table2
etc
...
各行がこの構文を使用してコマンドに入力されるように、bashスクリプトにどのように入力しますか?
mysqldump -uuser -ppass database table_name_goes_here > and_here.sql
?
編集する申し訳ありません。元の形式に間違いがありました。クエリの出力は、show tables
スペースで区切られたテーブル名を含む1行ではありません。実際には、現在の形式と同様に、1行に1つのテーブル名です。混乱させて申し訳ありません。
答え1
mysqldump -uuser -ppass database < show_tables.sql |
xargs -I TableName sh -c 'mysqldump -uuser -ppass database TableName > TableName.sql'
答え2
テーブル名に改行文字を含めることができないと仮定すると、
mysqldump -uuser -ppass database < show_tables.sql |
while IFS= read -r table; do
mysqldump -uuser -ppass database "$table" > and_here.sql
done
答え3
これ手動説明する
Arrays are assigned to using compound assignments of the form name=(value1 ... valuen),
したがって、コマンドの出力を目的の場所に配置する方法が必要ですvalue1 ... valuen
。
あなたはこれを行うことができます
databases=( $(mysqldump -uuser -ppass database < show_tables.sql) )
その後、このように繰り返します。
for database in ${databases[*]}; do
...
done
ただし、テーブル名が本当に奇妙で改行が含まれている場合に備えて、これを使用してmysql -Bse
データベースおよび/またはテーブルを一覧表示し、jw013が提案したように使用することをお勧めします(おそらくオプションwhile read IFS=
なし)。-r
答え4
mysql database -e 'show tables' | while read table
do mysqldump -uuser -ppass database "$table" -r "$table.sql"
done
テーブルの空白でも機能します。