DBIx::Class::Storage::DBI::mysql::backup
先月、CPAN に公開したモジュール DBIx::Class::Storage::DBI::mysql::backup の紹介です。
DBIx::Class::Schema::Versioned にある、backup_directory
という設定項目は、設定すると backup
メソッドをコールするだけで、設定したディレクトリにバックアップを作成してくれるのだろうな、と思いますが、実は、SQLite など ( 他の DBI は確認してません ) 、DBIx::Class::Storage::DBI のサブクラス側で各々実装するものらしく、MySQL で backup
メソッドをコールすると、以下の様に die
してしまいます。
Can't locate object method "backup" via package "DBIx::Class::Storage::DBI"
at /path/to/lib/site_perl/5.xx.x/DBIx/Class/Schema/Versioned.pm line 560.
SYNOPSIS に書いた様に、Storage::DBI::mysql::backup を、Schema.pm ( DBIx::Class::Schema のサブクラス ) の load_components
に加えて下さい。
package MyApp::Schema;
use base qw/DBIx::Class::Schema/;
our $VERSION = 0.001;
__PACKAGE__->load_classes(qw/CD Book DVD/);
__PACKAGE__->load_components(qw/
Schema::Versioned
Storage::DBI::mysql::backup
/);
__PACKAGE__->upgrade_directory("/path/to/var/upgrade");
__PACKAGE__->backup_directory("/path/to/var/backup");
これで backup
メソッドをコールしても die
しなくなりました。
my $schema = MyApp::Schema->connect(
'DBI:mysql:myapp_db',
'myapp_user',
'myapp_pass' );
$schema->do_backup( 1 ); # これが必要
$schema->backup;
backupdirectory で 設定したディレクトリに、myappdb-20110202-050441.sql という名前で、ダンプデータが作成されていると思います。
よかったら、是非、使ってみてください。
$ cpanm DBIx::Class::Storage::DBI::mysql::backup
or checkout from GitHub
$ git clone git://github.com/ngs/p5-dbix-class-storage-dbi-mysql-backup.git
$ cd p5-dbix-class-storage-dbi-mysql-backup
$ perl Makefile.PL
$ make test
$ make install
テストコードを書くに当たって、Test::mysqld というモジュールを使わせて頂きました。
mysql.sock をテスト用に作成して、テストが完了すると、自動的に削除してくれるので、実際動いている DB に干渉せず、安心して開発ができました。