1. ホーム
  2. mysql

[解決済み] Mysqldump は特定の接頭辞を持つテーブルのみを出力する / Mysqldump ワイルドカード?

2023-04-07 07:49:59

質問

私は、この巨大で厄介なデータベースをクリーンアップしています。これは、Magento Enterprise と Joomla を 1 つの DB に結合した結果であり、500 以上のテーブルを収容しています。

さらに悪いことに、まったく使用されていない 70 以上の Joomla テーブルのセットがあります。これらはすべて接頭辞に bak_ .

これらを削除するだけで bak_ テーブルを削除するのは簡単ですが、私は最初にそれらを「bak」したいのです (私が何をしたのかわかりますか?)。私の頭の中では、このようなコマンドを思い浮かべることができます。

mysqldump -u username -p mydatabase bak_*

しかし、これではうまくいきません。どうしたらいいのでしょうか?ありがとうございます。

EDIT: はい、含めるべき 70 のテーブル、または除外すべき ~430 のテーブルを明示的にリストすることができましたが、可能であれば、これを行うためのより良い方法を探しています。

どのように解決するのですか?

コマンドラインでテーブル名を次々に指定することができますが、ワイルドカードは使用できません。 mysqldump databasename table1 table2 table3

また --ignore-table を使うこともできます。

もう一つのアイデアは、テーブルを次のようなファイルにすることです。

mysql -N information_schema -e "select table_name from tables where table_schema = 'databasename' and table_name like 'bak_%'" > tables.txt 

ファイルを編集して、すべてのデータベースを1行にまとめてください。そして

mysqldump dbname `cat tables.txt` > dump_file.sql

一行でテーブルをドロップするには(推奨しません)、次のようにします。

mysql -NB  information_schema -e "select table_name from tables where table_name like 'bak_%'" | xargs -I"{}" mysql dbname -e "DROP TABLE {}"