之前總不重視自己的博客,上回一丟才心疼,現在重視起來,決定定期備份sql。寫個小腳本如下: 代碼如下: #!/usr/bin/perl use warnings; use strict; use MySQL::Backup; use Mail::Sender; open my $tmp_sql, '>', "backup.sql"; my $mb = new MySQL::Backup('dbname', 'localhost', 'dbuser', 'dbpasswd', {'USE_REPLACE' => 1, 'SHOW_TABLE_NAMES' => 1}); print $tmp_sql $mb->create_structure(); print $tmp_sql $mb->data_backup(); close $tmp_sql; my $sender = new Mail::Sender { smtp => 'smtp.163.com', from => '[email protected]', # debug => 'backup_debug.log', auth => 'LOGIN', authid => 'mailuser', authpwd => 'mailpasswd', }; $sender->MailFile({ to => '[email protected]', subject => 'Backup Blog SQL_'.time(), msg => '3Q', file => 'backup.sql',});
沒有直接用mysqldump,而是找了這個MySQL::Backup模塊,試著看了導出的sql,和mysqldump的結果是有些不同的。 mysqldump導出的sql一般結構是這樣子: 代碼如下: DROP TABLE IF EXISTS `tablename`; CREATE TABLE `tablename`(ID INT NOT NULL ...); LOCK TABLES `tablename` WARITE; INSERT INTO `tablename` VALUES(...),(...),(...); UNLOCK TABLES;
而MySQL::Backup導出的sql結構是這樣子的: 代碼如下: CREATE TABLE `tablename`(ID INT NOT NULL ...); REPLACE INTO `tablename`(ID,...)VALUES(1,...); REPLACE INTO `tablename`(ID,...)VALUES(2,...);