(113) MySQLの任意のテーブル、任意のレコードをダンプする。

投稿者: | 2019年4月20日

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です