Скрипт конвертации в InnoDB

Материал из BiTel WiKi

(Различия между версиями)
Перейти к: навигация, поиск
Airat (Обсуждение | вклад)
(Новая страница: «<pre> #! /bin/usr/perl my $mysqluser="repl"; my $database="bgbilling_51"; my $dir="/var/log/mysql/"; my $file="alter_table.sql"; print "Script started!\n"; print "…»)
Следующая правка →

Версия 12:49, 15 марта 2011

#! /bin/usr/perl

my $mysqluser="repl";
my $database="bgbilling_51";
my $dir="/var/log/mysql/";
my $file="alter_table.sql";

print "Script started!\n";
print "Enter password for mysql:\n";
chomp($pass = <STDIN>);

print "Create sql file?(yes/no)\n";
chomp($begin = <STDIN>);
if($begin eq "yes")
{
	$create_file=qx(mysql -u $mysqluser --password=$pass -e "SELECT table_name FROM information_schema.tables WHERE table_schema='$database' AND engine='MYISAM';" | tail -n +2 | grep -v -E '_[0-9]{6}\$' | xargs -I '{}' echo "ALTER TABLE {} ENGINE=INNODB;" > $dir$file);
	print $create_file;
}

print "Start converting base?(yes/no)\n";
chomp($begin = <STDIN>);
if($begin ne "yes"){
	print "By!\n";
	exit 0;
}

open(MYFILE, "$dir$file") || die "Ошибка при открытии $dir$file. $!\n";

$inc = 1;
$force = 0;
while(<MYFILE>)
{
	chomp;# убрать \n в последнем поле
#	$command=`echo "$_" > temp`;
#	$command=`mysql -u $mysqluser $database < temp`;
	print "$inc.command:\n   $_\n";
	if($force==0)
	{
		print "Continue? (press 'Enter' to continue or press 'q' to abort or 'f' to force mode)\n";
		chomp($begin = <STDIN>);
		if($begin eq "q")
		{
			print "By!\n";
			exit 0;
		}	
		if($begin eq "f")
		{
			$force=1;
		}	
	}

	$command=`mysql -u $mysqluser --password=$pass $database -e "$_"`;
	print "$inc.result:\n$command";
	$inc++;
}

close(MYFILE);
print "Script finished successfully!\n";
Личные инструменты