1,117 views
この記事は最終更新から 391日 が経過しています。
1. やりたいこと
Linuxのコマンドラインで MySQLをダンプするときに、
特定のテーブル の 特定のレコード
だけをダンプしたい。
2. やってみる
Step 1 : 普通にDBを全ダンプする。
DBNAME=aaaaa USER=bbbbb PASS=ccccc mysqldump -u${USER} -p${PASS} $DBNAME > dump.txt
Step 2 : 特定のテーブルだけをダンプする。
DBNAME=aaaaa USER=bbbbb PASS=ccccc TABLE=ddddd mysqldump -u${USER} -p${PASS} $DBNAME $TABLE > dump.txt
Step 3 : 特定のテーブル上の特定のレコードだけをダンプする。
–where オプションでレコードを指定する。
DBNAME=aaaaa USER=bbbbb PASS=ccccc TABLE=ddddd WHERE="id=12345" mysqldump -u${USER} -p${PASS} $DBNAME $TABLE --where $WHERE > dump.txt
■追記 2021/01/29 : mysqldumpでエラー発生
DBを定期的にバックアップするために、cronで mysqldumpを実行していた。
ところが…
いつの間にか以下のようなエラーが発生するようになっていた。
mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces
tablespacesをダンプするのに特権が必要
とのことだ。
共用サーバーを使用しているので権限を自由に設定可能か不明だ。要調査
そこで…
CREATE TABLESPACEなど使用していないので mysqldumpを実行時に –no-tablespaces を指定し、これを対象外とした。
DB={DB名}
USER={ユーザー名}
PW={パスワード}
FILE={出力ファイル名}
mysqldump $DB --host=localhost --no-tablespaces -u $USER --password=$PW -e --single-transaction > $FILE
これで上記のエラーは発生しなくなった。
■おまけ : mysqlプロンプトの起動
DB={DB名} USER={ユーザー名} mysql -D $DB -u $USER -p