mysql_convert_table_format
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:3k
源码类别:

模拟服务器

开发平台:

C/C++

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