More info...

2009-12-12

mysqldumpの出力結果をデータベースごとに分割するパッチ

先日は、mysqldumpの出力結果をawkを使ってデータベースごとに分割する方法について紹介したが、セミナーも終わったことなのでパッチを書いてみた。awkで分割するというのはUNIXユーザーの伝統芸能なので嫌いではないがまどろっこしいと感じる方も居るかもしれない。そもそもmysqldump自体がそのような機能をサポートしていれば問題ないのだから!

というわけで、興味のある人は次のバグレポートからパッチをダウンロードして試してみて欲しい。

http://bugs.mysql.com/45003

そして試した後にはフィードバックを残して頂きたい!!

パッチの適用方法は以下。

まずはMySQLのソースコードを入手する。ダウンロードサイトから最新のものを入手するか、bzrでゲットして頂いて構わない。

ダウンロードサイト:
http://dev.mysql.com/downloads/mysql/5.1.html

bzrコマンド:
shell> bzr branch lp:mysql-server
ダウンロードサイトから入手した場合は、ソースコードを展開しておいて欲しい。

次に、上記のバグレポートから、bug45003.patchというファイルをダウンロードして、ソースコードのトップディレクトリ(展開した後に作成されるディレクトリ。ダウンロードサイトから入手した場合にはmysql-5.1.41、bzrで入手した場合はmysql-server)へコピーしよう。
shell> cp bug45003.patch mysql-5.1.41
そしてパッチを適用する。
shell> cd mysql-5.1.41
shell> patch -p 0 < bug45003.patch
あとはビルドして生成されたmysqldumpを実行するだけである。パッチを適用したmysqldumpを使ってデータベースごとにファイルを作成するには--backup-basedirオプションを使う。このオプションは--databasesまたは--all-databasesオプションと併用しなければならないという制約がある。また、--tabオプションと同時に使うことは出来ない。コマンド実行例は次の通り。
shell> mysqldump --backup-basedir=/backup\
--single-transaction --master-data=2 --flush-logs\
--databases db1 db2 db3
そうすると、/backupディレクトリに6桁の数字、例えば000001というディレクトリが作成され、そのディレクトリの下にdb1.sql、db2.sql、db3.sqlという具合に「データベース名.sql」というファイルがそれぞれ作成されるという寸法である。6桁の数字のディレクトリは、既に他のディレクトリが存在する場合、次の数字が使われる。(000001が存在すれば000002が、000002が存在すれば000003が作成される。)常に同じコマンドラインでバックアップを作成できるというワケだ。

皆様からのフィードバックをお待ちしております!!

0 件のコメント:

コメントを投稿