日々様々なトラブルにハマっている、困ったシステム管理者の奮闘日記です。

MySQLのバックアップと復元

ブログ用のWebサーバを別ホストに移行しようと思い立ち、データベースのバックアップ&復元をやってみた。
以下、ブログ用に使用しているMySQL 4.1 のバックアップと復元のメモ。
案の定、プチハマりました。

バックアップ

mysqldump -u root -p パスワード -x -F --all-databases > backup.dmp
-x
バックアップ時、全データベースのすべてのテーブルをロックする
-F
バックアップする前に、データベースログファイルをフラッシュする
–all-databases
すべてのデータベースをバックアップする

※ InnoDBの場合、「--single-transaction」オプションも必要かも。

復元

上でバックアップしたbackup.dmpファイルを移行先ホスト(ホスト名は移行元とは別)に持ってきて、次のコマンドで復元(リストア)

mysql -u root -p < backup.dmp

ここでのハマった点:

  • rootのパスワードがバックアップ元のものに変更されると思っていたが、変わっていない。
    → あ、そうそう、MySQLを再起動しないと反映されないよね。
  • ブログのURL(ホスト名)がバックアップ元のもののまま復元されたので、うまくつながらない。
    → backup.dmp の内容を vi で置換し、再度復元。
    ちなみに vi での全置換は、
    :%s/置換対象文字列/置換後の文字列/g
    でOK。
    置換文字列に「/」や「.」などを含む場合は、その前にエスケープ文字「\」を入れること。
  • 復元後、ユーザの一覧を見たところ、rootユーザのホスト名が移行前のホスト名のままであることに気付く。
    ユーザの一覧は、

    mysql>use mysql
    mysql> select user,host from user;
    +---------+-----------+
    | user    | host      |
    +---------+-----------+
    | root    | host1     |
    | root    | localhost |
     :

    root@host1 を root@host2に変更

    mysql> update user set host = 'host2' where user='root' and host = 'host1';
    mysql> commit;

    これでOK。

バックアップコマンドはシェルスクリプトにでもしておいて定時実行させ、定期的にバックアップするようにしたほうが運用ベターかな?


You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

AddThis Social Bookmark Button

Leave a Reply