system("mysqldump","--add-drop-table","-uroot","-ppassword", "mydatabase","|","gzip","-9c",">","$backup_dir/mydatabase.sql.gz");
####
mysqldump '-add-drop-table' '-uroot '-ppassword' 'mydatabase' '|' 'gzip' '-9c' '>' "$backup_dir/mydatabase.sql.gz"
####
use IPC::Open3 qw( open3 );
{
local *FROM_MYSQLDUMP;
open(local *INPUT, '<', '/dev/null') or die $!;
open(local *OUTPUT, '>', "$backup_dir/mydatabase.sql.gz") or die $!;
my $mysqldump_pid = open3('<&INPUT', \*FROM_MYSQLDUMP, '>&STDERR',
mysqldump => (
'--add-drop-table',
'-u'.'root',
'-p'.'password',
'mydatabase',
),
);
my $gzip_pid = eval {
open3('<&FROM_MYSQLDUMP', '>&OUTPUT', '>&STDERR',
gzip => ( '-9c' ),
)
};
if (!$gzip_pid) {
my $e = $@;
kill(KILL => $mysqldump_pid);
waitpid($mysqldump_pid, 0);
die($e);
}
waitpid($mysqldump_pid, 0);
waitpid($gzip_pid, 0);
}
####
sub text_to_shell_lit(_) {
return $_[0] if $_[0] =~ /^[a-zA-Z0-9_\-]+\z/;
my $s = $_[0];
$s =~ s/'/'\\''/g;
return "'$s'";
}
my $mysqldump_cmd = join ' ', map text_to_shell_lit,
mysqldump => (
'--add-drop-table',
'-u'.'root',
'-p'.'password',
'mydatabase',
);
my $gzip_cmd = join ' ', map text_to_shell_lit,
gzip => ( '-9c' );
my $output_file_lit = text_to_shell_lit("$backup_dir/mydatabase.sql.gz");
system("$mysqldump_cmd | $gzip_cmd > $output_file_lit");