MySQLデータ mysqldumpによるバックアップ (SQL文の標準出力)

種類

MySQLでバックアップ方法は、大きく分けて2種類ある。
1.テーブル単位のバックアップ
2.DBファイル自体のバックアップ
3.mysqldumpによるダンプ/リストア

ダンプファイルのバックアップ

リストアの仕方はこちら



書式

mysqldump [OPTIONS] database [table]

mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
mysqldump [OPTIONS] --all-databases [OPTIONS]

オプション

オプション内容
-A,--all-databaseすべてのデータベースをダンプする。
-B,--database複数のデータベースをダンプする場合に使用する。
-P,--port=port_numMySQLサーバーに接続するためのTCP/IPポート番号 Default 3306
-h,--host=host_nameMySQLサーバーの稼動しているホスト名
-u,--user=user_name接続するデータベースユーザ
-p,--password[=name]データベースユーザーのパスワード
-S,--Socket=/path/file リモートホストからの接続を監視するUNIXソケットを指定
/var/lib/mysql/mysql.sock (当環境 Fedora9の場合)
-C,--compressサーバ/クライアント間でのデータ通信を圧縮モードで行う
--add-drop-table念のため、CREATE TABLE文の前にDROP TABLE文を加える
--add-locksINSERT文の前にテーブルのLOCK TABLES文を加える
--delayed-insertINSERT文にDELAYEDオプションを設定する
--allow-keywordsCREATE TABLE文において、テーブル名や列名をシングルクオート(')で囲む
-c,--complete-insert列名のリストを含む形式のINSERT文を出力する
-e,--extended-insert(複数の行データを同時に挿入する)多重INSERT文の形式でダンプする
-T,--tab=dir指定したディレクトリdir以下に、テーブル定義と各テーブルデータを個別のファイルに保存する。
-X,--xmlXML形式でダンプする
-F,--flush-logsダンプに先立ち、すべてのログをFLUSHする
-f,--force万が一、ダンプ中にSQLエラーが発生してもダンプを続ける
-l,--lock-tables(データベース毎に)READ LOCALロックをかけてからダンプを行う
--master-dataCHANGE MASTER TO文を出力することを除き "--first-slave"オプションと同じ
--no-autocommitSQL文をトランザクションとして実行(各SQL文を"set autocommit=0" と "commit" で囲む)
--single-transaction ダンプに先立ち、BEGIN文を実行し、そのトランザクション内でデータをダンプする。Version 4.0.2から
-n,no-create-dbCREATE DATABASE文を出力しない
-t,no-create-infoデータのみダンプ。テーブルスキーマを出力しない
-d,no-dataテーブルスキーマ(CREATE TABLE文)のみダンプ。データを出力しない
--opt次の簡略形。--add-drop-table --add-locks --all-quick --extended-insert --lock-tables --disable-keys
-q,--quick出力バッファに保存せず、標準出力に出力
-r,--result-file=file_name(標準出力ではなく)指定したファイルにデータをダンプする

実行例

1-1) データベースをダンプし、/home/hoge/xoops-fix.sqlに保存する。
# mysql -uroot -p
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| hoge               |
| xoops              |
+--------------------+
exit;
# mysqldump -F -l xoops > /home/hoge/xoops-fix.sql

1-2) 複数のデータベースをダンプする。
# mysqldump -F -l -databases xoops hoge > /home/hoge/xoops-fix.sql

1-3) すべてのデータベースをダンプする。
# mysqldump -F -x -q --add-drop-table --all-databases | gzip -9 xoops-fix.gz

補足

XOOPS 2.0.16JPから、
XOOPS Cube Legacy 2.1.7にアップグレードした際に必要になった作業
環境
Linux Fedora9 2.6.27.25-78.2.56
MySQL Server version: 5.0.77
Apache/2.2.9
以下作業順序

2-1) /etc/my.cnf 編集
# vi /etc/my.cnf
[client]                   # クライアントがeuc-jpとして扱うことを明示的に指定する。
default-character-set=ujis # これを付けないと正しいエンコードで読まない事がある

[mysqldump] # mysqldump を実行する場合に、euc-jpとして出力する default-character-set=ujis # 為に必要(設定しないとEUC-JPで編集しても化ける)
2-2) 環境変数の確認
# mysql -uroot -p
mysql> use xoops; mysql> show variables like 'character%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 <- ujisでないと文字化けになる | character_set_connection | latin1 <- ujisにしないと化けるversion有り | character_set_database | latin1 <- ujisでないと文字化けになる | character_set_filesystem | binary <- このままでよい | | character_set_results | latin1 <- ujisでないと文字化けになる | character_set_server | latin1 <- このままでよい | | character_set_system | utf8 <- このままでよい | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+
2-3) ダンプする
# mysqldump --default-character-set=latin1 -Q --opt \
> -uroot -p xoops > xoops.sql
2-4) データベースを削除する
mysql> DROP DATABASE xoops;

2-5) データベースを ujis で作り直す
mysql> CREATE DATABASE cubedb CHARACTER SET ujis COLLATE ujis_japanese_ci;

2-6) ダンプ内容を編集(EUC-JP)
・エディタは EUC-JP を扱えるエディタを使用する
・SET NAMES latin1 を SET NAMES ujis に置換
・CHARSET=latin1; を CHARSET=ujis; に置換
・binary 属性を持っているフィールドがある場合
・character set latin1 collate latin1_bin を character set ujis collate ujis_bin に置換
xoops-fixed.sql などとして保存

2-7) ダンプ内容をリストア
# mysql -uroot -p < xoops-fixed.sql
以上で移行作業は終わりです。文字化けなどもしっかり対応できてると思います^^
関連商品