Help us understand the problem. What is going on with this article?

MySQL バックアップのダンプコマンド

More than 3 years have passed since last update.

mysqldump コマンド

基本コマンド

time mysqldump -u username -p ${db:=dbname} > ${db}_`date +%F_%H%M`.sql

usernamedbname は自身の条件に合わせて変更のこと。

入力例
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文にカラム名を含める。
bezeklik
サーバー管理、CMS構築のお仕事募集中。 CentOS / Apache / Nginx / PHP / MySQL / Docker / CMS (eZ Platform, eZ Publish, WordPress, Drupal) / Redmine
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away