« 2007年05月24日 | メイン | 2007年05月29日 »

2007年05月25日 アーカイブ

2007年05月25日

MySQLのバックアップをとろう!(同じサーバー内)

今までは、postgresqlを利用していたので、
実は、mysqlのバックアップは始めて。

とりあえず、postgresにあるような
dumpがあるかどうか「mysql dump」でググって見る。


mysqldump

というコマンドがあるらしいことがわった。


「mysqldump」でググって見る。

http://dev.mysql.com/doc/refman/4.1/ja/mysqldump.html
↑発見!【4.9.7. mysqldump(テーブル構造とデータのダンプ)】

とりあえず読む。

>同じサーバ上でバックアップを行う場合には、mysqlhotcopy の方の使用を考慮してください。
と書いてある。

「mysqlhotcopy」
http://dev.mysql.com/doc/refman/4.1/ja/mysqlhotcopy.html

[root@internal ~]# mysqlhotcopy --help;
/usr/bin/mysqlhotcopy Ver 1.22
Usage: /usr/bin/mysqlhotcopy db_name[./table_regex/] [new_db_name | directory]

↑確かめてみたら、利用できる・・・。
今回は、同じサーバー内にコピーするよていだから、
コチラを利用しよう。


>mysqlhotcopy は、LOCK TABLES、FLUSH TABLES、および cp(または scp)を使用して、すばやくデータベースのバックアップを行う Perl スクリプトです。

ほう。

>これは、データベースや単一のテーブルのバックアップを行う最速の方法ですが、データベースディレクトリのある同一マシンだけでしか実行できません。

なるほどねー。

>mysqlhotcopy は、Unix のみ、および MyISAM テーブルと ISAM テーブルでのみ使用できます。

MyISAMとISAMのみ!!!!・・・だめぢゃん!!! innoDB利用してるし!!

--------------------------------------------------------------------------
mysql> show table status;
+-------------------------+--------+---------+------------+------+----------------+-------------+------------------+--------------+-----------+----------------+---------------------+---------------------+------------+-----------------+----------+----------------+-----------------------+
| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment |
+-------------------------+--------+---------+------------+------+----------------+-------------+------------------+--------------+-----------+----------------+---------------------+---------------------+------------+-----------------+----------+----------------+-----------------------+
| auth_responses | InnoDB | 10 | Compact | 0 | 0 | 16384 | 0 | 0 | 0 | 1 | 2007-05-02 21:03:06 | NULL | NULL | utf8_general_ci | NULL | NULL | InnoDB free: 11264 kB |



--------------------------------------------------------------------------


と言うことで、「mysqldump」でやる。

>テーブルを指定しなかったり、--databases オプションまたは --all-databases オプションを使用すると、データベース全体がダンプされます。

と書いてある。
なるほど。

>使用しているバージョンの mysqldump がサポートするオプションの一覧を照会するには、mysqldump --help を実行します。

なるほど。やってみよう。

---------------------------------------
[root@internal ~]# mysqldump --help
mysqldump Ver 10.10 Distrib 5.0.22, for redhat-linux-gnu (i686)
By Igor Romanenko, Monty, Jani & Sinisa
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license

Dumping definition and data mysql database or table
Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]
 ・
 ・
 ・
----------------------------------------

めちゃめちゃいっぱいでた・・・。


>注意: mysqldump を --quick または --opt なしで実行すると、mysqldump は結果をダンプする前に、結果セット全体をメモリにロードします。これは、大きなデータベースをダンプする際、問題になる可能性があります。

なるほど。ぢゃあ --quick か --opt を付けたほうがいいんだな。


>注意: mysqldump プログラムの新しいコピーを使用している場合で、非常に古い MySQL サーバに読み込むダンプを行うときには、--opt オプションまたは -e オプションは使用しないでください。

なるほど、まぁ、非常に古いMySQLを使う予定はないので今は大丈夫。

次に、mysqldumpのオプションを見て、必要なものをピックアップしよう。


> mysqldump は、以下のオプションをサポートします。

>--add-locks
>各テーブルダンプの前に LOCK TABLES を追加し、後に UNLOCK TABLE を追加する(MySQL への挿入を速くするため)。

なるほど、早くなるなら付けた方がよさそうだな。

>--add-drop-table
>各作成ステートメントの前に drop table を追加する。

これもつけよう。バックアップを戻すときは、同じ状態でほしいから。

> -A, --all-databases
>すべてのデータベースをダンプする。これは、すべてのデータベースを選択した状態で --databases を実行するのと同じである

なるほど。

>-P, --port=...
>TCP/IP 接続に使用するポート番号。
>--protocol=(TCP | SOCKET | PIPE | MEMORY)
>使用する接続プロトコルを指定する。MySQL 4.1 で導入。

あー、これを使って、外のサーバーに保存すればいいのか??

>-pyour_pass, --password[=your_pass]
>サーバ接続時に使用するパスワード。'=your_pass' 部分を指定しなければ、mysqldump によってパスワードのプロンプトが表示される。

なるほどー。


>一般的に、mysqldump はデータベース全体のバックアップに使用されます。

なるほど。

>http://dev.mysql.com/doc/refman/4.1/ja/backup.html
↑【4.5.1. データベースのバックアップ】こちらも参考に。


>shell> mysqldump --opt database > backup-file.sql
>これを、以下のコマンドで MySQL に戻すことができます。
>shell> mysql database < backup-file.sql

なるほど。


ここまでの知識で、同じサーバー内にDBをバックアップするなら。

shell> mysqldump --opt --add-drop-table --add-locks database_name > backup-file.sql

↑こんな感じか。

ファイルを用意してやってみる。

mysqldump: Got error: 1045: Access denied for user 'root'@'localhost' (using password: NO) when trying to connect


ぬおおおおお。error。パスワードが必要らしい・・。

shell> mysqldump --opt --add-drop-table --add-locks database_name > backup-file.sql -p
Enter password:

ファイルを見たら、ファイル容量増えてる!成功!!

・・・でも、これをcronで回して、定期的にやろうとしているのだけど、
パスワードを設定しないと出来ないのは、こまらないか・・・?

あ、わかった。

--password[=your_pass]

というオプションをつければいいんだ。

mysqldump --opt --add-drop-table --add-locks --password=hoge database_name > backup-file.sql

でやってみる。

成功!!!

これで、shell書いてcronを組めばいいんだ!
うーん。出来た。


次回は cronでバックアップを定期的に実行できるようにします。

MySQLのバックアップをcronを利用して定期的に行おう!!

前回【MySQLのバックアップをとろう!(同じサーバー内)】のmysqldumpを利用してMySQLのデータベースバックアップが出来たので、
これを定期的に行うようにしましょう。

cronを利用です!

まず、shellを書きましょう。

mysql_db_backup.sh
-------------------------------------
#!/bin/sh
bak=`date +%y%m%d`
cp /var/backup-file.sql /var/$bak.sql
mysqldump --opt --add-drop-table --add-locks --password=hoge database_name > /var/$bak.sql
chmod 700 /var/$bak.sql
bak2=`date --date "7 days ago" +%y%m%d`
rm -f /var/$bak2.sql
--------------------------------------

1日1回で、1週間前のファイルは削除と言うサイクルを繰り返すとすると、
こんな感じか・・・。
とりあえず、直接叩いてみる。

[root@internal mysql]# sh mysql_db_backup.sh

成功!!!

なので、これをcronで回す。
http://www.express.nec.co.jp/linux/distributions/knowledge/system/crond.html
↑一応cron設定ガイド。


実行したいユーザー(権限のあるユーザー)になり、

crontab -e

とやり、viが開くので、

0 4 * * * /var/mysql_db_backup.sh

※この設定だと、毎日4時0分にシェルを実行することになる。

とやり保存する。

・・・とりあえず、テストしたいが、朝4時までまってられないので、

0-59/3 * * * * /var/mysql_db_backup.sh

として、3分毎に実行してみる。

・・・3分経過・・・。
見てみる。

おお!!成功!!!

では、毎日4時0分の設定に戻して、保存!!

0 4 * * * /var/mysql_db_backup.sh

お疲れした!!

Linuxでのバックアップを自動化する

メモ。

前回前々回で同じハードディスク内にバックアップは取れた。
しかし、ハードディスクは消耗品なので、壊れると困る。

単一のストレージ・メディアや単一の場所に依存するのは避け、別ストレージへ保存しよう!!

上記URLを元にやってみたのですが、
ssh-keygenがめちゃめちゃ使えます。
いいすよ。

参考URL:
http://www-06.ibm.com/jp/developerworks/linux/040723/j_l-backup.html
http://www.hasta-pronto.org/archives/2006/12/10-2203.php
http://tech.ppc.jp/modules/wordpress/index.php?p=18
http://www.kit.ac.jp/~tomaru/pukiwiki/RemoteBackup.html
http://www.gihyo.co.jp/magazines/SD/support/200302/rsync.html

○ポイント
・Keychain のインストール
wget http://dev.gentoo.org/~agriffis/keychain/keychain-2.6.8-1.noarch.rpm
rpm -i keychain-2.6.8-1.noarch.rpm

・Keychainを実行したいユーザーのシェルの初期設定ファイル(~/.bash_profile)に以下の行を追加します。
/usr/bin/keychain ~/.ssh/id_dsa
source ~/.keychain/${HOSTNAME}-sh

・追加後ログアウトして、再度ログインする。そうすると、パスフレーズを求められる。

2007年05月

Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

Map

About 2007年05月

2007年05月にブログ「プログラマ 福重 伸太朗 ~基本へ帰ろう~」に投稿されたすべてのエントリーです。過去のものから新しいものへ順番に並んでいます。

前のアーカイブは2007年05月24日です。

次のアーカイブは2007年05月29日です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。