mysql_convert_table_format.sh
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. #!@PERL@
  2. # Convert given tables in a database to MYISAM
  3. use DBI;
  4. use Getopt::Long;
  5. $opt_help=$opt_version=$opt_verbose=$opt_force=0;
  6. $opt_user=$opt_database=$opt_password=undef;
  7. $opt_host="localhost";
  8. $opt_type="MYISAM";
  9. $exit_status=0;
  10. GetOptions("force","help","host=s","password=s","user=s","type=s","verbose","version") || 
  11.   usage(0);
  12. usage($opt_version) if ($#ARGV < 0 || $opt_help || $opt_version);
  13. $opt_database=shift(@ARGV);
  14. if (uc($opt_type) eq "HEAP")
  15. {
  16.   print "Converting to type HEAP would delete your tables; abortingn";
  17.   exit(1);
  18. }
  19. $dbh = DBI->connect("DBI:mysql:$opt_database:$opt_host",
  20.     $opt_user,
  21.     $opt_password,
  22.     { PrintError => 0})
  23.   || die "Can't connect to database $opt_database: $DBI::errstrn";
  24. if ($#ARGV < 0)
  25. {
  26.   # Fetch all table names from the database
  27.   my ($sth,$row);
  28.   $sth=$dbh->prepare("show tables");
  29.   $sth->execute || die "Can't get tables from $opt_database; $DBI::errstrn";
  30.   while (($row = $sth->fetchrow_arrayref))
  31.   {
  32.     push(@ARGV,$row->[0]);
  33.   }
  34.   $sth->finish;
  35. }
  36. print "Converting tables:n" if ($opt_verbose);
  37. foreach $table (@ARGV)
  38. {
  39.   my ($sth,$row);
  40.   # Check if table is already converted
  41.   $sth=$dbh->prepare("show table status like '$table'");  
  42.   if ($sth->execute && ($row = $sth->fetchrow_arrayref))
  43.   {
  44.     if (uc($row->[1]) eq uc($opt_type))
  45.     {
  46.       print "$table is alread of type $opt_type;  Ignoredn";
  47.       next;
  48.     }
  49.   }
  50.   print "converting $tablen" if ($opt_verbose);
  51.   if (!$dbh->do("ALTER TABLE $table type=$opt_type"))
  52.   {
  53.     print STDERR "Can't convert $table: Error $DBI::errstrn";
  54.     exit(1) if (!$opt_force);
  55.     $exit_status=1;
  56.   }
  57. }
  58. $dbh->disconnect;
  59. exit($exit_status);
  60. sub usage
  61. {
  62.   my($version)=shift;
  63.   print "$0  version 1.1n";
  64.   exit(0) if ($version);
  65.   print <<EOF;
  66. Conversion of a MySQL tables to other table types.
  67.  Usage: $0 database [tables]
  68.  If no tables has been specifed, all tables in the database will be converted.
  69.  The following options are available:
  70. --force
  71.   Continue even if there is some error.
  72. --help or --Information
  73.   Shows this help
  74. --host='host name' (Default $opt_host)
  75.   Host name where the database server is located.
  76. --password='password'
  77.   Password for the current user.
  78. --type='table-type'
  79.   Converts tables to the given table type (Default: $opt_type)
  80.   MySQL 3.23 supports at least the BDB, ISAM and MYISAM types.
  81. --user='user_name'
  82.   User name to log into the SQL server.
  83. --verbose
  84.   This is a test specific option that is only used when debugging a test.
  85.   Print more information about what is going on.
  86. --version
  87.   Shows the version of this program.
  88. EOF
  89.   exit(1);
  90. }