1,670 views
この記事は最終更新から 738日 が経過しています。
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
アクセス数(直近7日): ※試験運用中、BOT除外簡易実装済2026-01-05: 0回 2026-01-04: 0回 2026-01-03: 0回 2026-01-02: 1回 2026-01-01: 0回 2025-12-31: 2回 2025-12-30: 1回