mysqldump コマンド
基本コマンド
time mysqldump -u username -p ${db:=dbname} > ${db}_`date +%F_%H%M`.sql
username
と dbname
は自身の条件に合わせて変更のこと。
入力例
time mysqldump -u wordpress -p ${db:=wordpress} > ${db}_`date +%F_%H%M`.sql
${db}
は書き換えないでよい。
time コマンド
データベースのサイズが大きいと時間がかかるため、目を離すとどれくらいかかって終わったのかが分からない。
time
コマンドでかかった時間を以下のように出力させると次回以降の目安になってよい。
real 4m19.976s
user 4m42.802s
sys 0m7.899s
標準変数
${db:=dbname}
とすると $db
にデフォルト値として dbname が代入されて展開される。すなわち ${db:=dbname}
も ${db}
も dbname
と展開される。
コマンド置換 (command substitution)
バッククォート ` で囲むか $()
でくくるとコマンド結果を展開してくれる。
date コマンド
日次をファイル名に自動で含めるために date
コマンドを利用する。
%F
は %Y-%m-%d
と同じ。
圧縮ダンプ
db=dbname; time mysqldump -u username -p ${db} | gzip > ${db}_`date +%F_%H%M`.sql.gz
置換ダンプ
db=dbname; time mysqldump -u username -p ${db} | sed 's/www.example.jp/dev.example.jp/g' | gzip > ${db}_`date +%F_%H%M`.sql.gz
Movable Type や WordPress のデータベースを移行する際などに。
転送ダンプ
db=dbname; time mysqldump -u username -p ${db} | gzip | ssh example.com 'cat > ${db}_`date +%F_%H%M`.sql.gz'
リストア
db=dbname; time zcat ${db}_YYYY-MM-DD_HHMM.sql.gz | mysql -u username -p ${db}
パイプを通すと変数が期待通りに渡らないならない模様。
INSERT文を1行ずつ出力する
mysqldump -c --skip-extended-insert
-c
(--complete-insert
) カラム名を含んだデータを出力
–skip-extended-insert
1行ずつのINSET文を出力
オプション一覧
接続
オプション | 説明 | |
---|---|---|
--user |
-u |
ユーザー名 |
--password |
-p |
パスワード |
--host |
-h |
未指定の場合は localhost |
--port |
-P |
|
--login-path |
MySQL 5.6 から。 |
挙動
オプション | 説明 | |
---|---|---|
--force |
-f |
エラーが発生しても処理を継続させる。 未指定だとエラー時に処理が停止される。 |
--compress |
-C |
サーバー間でデータを圧縮して送信する。 |
指定
オプション | 説明 | |
---|---|---|
--all-databases |
-A |
すべてのデータベースをダンプする。 |
--ignore-table |
ダンプしないテーブルを指定できる。dbname.table_name と指定。複数テーブルを指定するには複数回使用する。 |
|
--no-data |
-d |
データ(ISERT 文)を出力しない。 |
--no-create-db |
-n |
CREATE DATABASE 文を出力しない。 |
--no-create-info |
-t |
CREATE TABLE 文を出力しない。 |
--complete-insert |
-c |
INSERT 文にカラム名を含める。 |