#!/usr/bin/perl
use strict;
use warnings;
my $VERSION='5.0.83';
my $BINDIR="$ENV{HOME}/opt/mysql/$VERSION/bin";
# 10.23.1.26 master (OSX 10.5)
# 10.23.1.22 slave 1 (OSX 10.5)
# 10.23.1.24 Slave 2 (Linux CentOS 5.3)
my $master_port = 15000;
my $base_port = 1500;
my $master_ip = '10.23.1.26';
my @slave_ips = ('10.23.1.22', '10.23.1.24');
print "installing master\n";
my $MASTER_SANDBOX=
"5.0.83 --no_show"
. " -c log-bin=mysql-bin "
. " -c server-id=100 "
. " --sandbox_port=$master_port";
#my $ret = system $MASTER_SANDBOX;
my $ret = qx(echo "$MASTER_SANDBOX" | gearman -h $master_ip -f make_sandbox ) ;
if ($?) {
die "master creation failed ($!)\n"
}
chomp $ret;
if ($ret ne 'ok') {
die "master creation failed ($ret)\n"
}
open my $ALL , q{>}, 'use_all'
or die "can't create 'use_all'\n";
open my $FH , q{>}, 'm'
or die "can't create 'm'\n";
print $FH "#!/bin/sh\n";
print $ALL "#!/bin/sh\n";
print $ALL "$BINDIR/mysql --prompt='master > ' -u msandbox "
. "-pmsandbox -h $master_ip -P $master_port \$\@ \n";
print $FH "$BINDIR/mysql --prompt='master > ' -u msandbox "
. "-pmsandbox -h $master_ip -P $master_port \$\@ \n";
close $FH;
chmod 0755, "m";
open my $CHECK , q{>}, 'check_slaves'
or die "can't create 'check_slaves'\n";
print $CHECK "#!/bin/sh\n";
for my $slaveno ( 0 .. 1 ) {
my $SLAVE = $slaveno +1;
my $IP = $slave_ips[$slaveno];
my $slave_port = "$base_port$SLAVE";
my $SLAVE_SANDBOX = "5.0.83 --no_show"
. " -c log-bin=mysql-bin "
. " -c server-id=10$SLAVE "
. " --sandbox_port=$slave_port"
# . " --no_load_grants"
. " -c report-host=SBslave$SLAVE"
. " -c report-port=$slave_port" ;
my $QUERY =
qq( CHANGE MASTER TO )
. qq( master_host="$master_ip", )
. qq( master_port=$master_port, )
. qq( master_user="msandbox", )
. qq( master_password="msandbox" );
print "installing slave $slaveno\n";
my $ret = qx(echo "$SLAVE_SANDBOX" | gearman -h $IP -f make_sandbox ) ;
if ($?) {
die "slave creation failed ($!)\n"
}
chomp $ret;
if ($ret ne 'ok') {
die "slave creation failed ($ret)\n"
}
print "initializing slave $slaveno\n";
system "$BINDIR/mysql -u msandbox -pmsandbox -h $IP "
. " -P $slave_port -e '$QUERY' ";
system "$BINDIR/mysql -u msandbox -pmsandbox -h $IP "
. "-P $slave_port -e 'start slave' ";
open my $FH , q{>}, "s$SLAVE"
or die "can't create 's$SLAVE'\n";
print $FH "#!/bin/sh\n";
print $ALL "echo slave $SLAVE:\n";
print $ALL "$BINDIR/mysql --prompt='slave $SLAVE > ' "
. " -u msandbox -pmsandbox -h $IP -P $slave_port \$\@ \n";
print $CHECK "echo slave $SLAVE: \n";
print $CHECK "$BINDIR/mysql --prompt='slave $SLAVE > ' "
. " -u msandbox -pmsandbox -h $IP -P $slave_port "
. "-e 'show slave status \\G' | grep _Running \n";
print $FH "$BINDIR/mysql --prompt='slave $SLAVE > ' "
. " -u msandbox -pmsandbox -h $IP -P $slave_port \$\@ \n";
close $FH;
chmod 0755, "s$SLAVE";
}
chmod 0755, "use_all";
chmod 0755, "check_slaves";
close $ALL;
close $CHECK;