mysql_convert_table_format
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:3k
- #!/usr/bin/perl
- # Convert given tables in a database to MYISAM
- use DBI;
- use Getopt::Long;
- $opt_help=$opt_version=$opt_verbose=$opt_force=0;
- $opt_user=$opt_database=$opt_password=undef;
- $opt_host="localhost";
- $opt_socket="";
- $opt_type="MYISAM";
- $opt_port=0;
- $exit_status=0;
- GetOptions("force","help","host=s","password=s","user=s","type=s","verbose","version","socket=s", "port=i") ||
- usage(0);
- usage($opt_version) if ($#ARGV < 0 || $opt_help || $opt_version);
- $opt_database=shift(@ARGV);
- if (uc($opt_type) eq "HEAP")
- {
- print "Converting to type HEAP would delete your tables; abortingn";
- exit(1);
- }
- $connect_opt="";
- if ($opt_port)
- {
- $connect_opt.= ";port=$opt_port";
- }
- if (length($opt_socket))
- {
- $connect_opt.=";mysql_socket=$opt_socket";
- }
- $dbh = DBI->connect("DBI:mysql:$opt_database:${opt_host}$connect_opt",
- $opt_user,
- $opt_password,
- { PrintError => 0})
- || die "Can't connect to database $opt_database: $DBI::errstrn";
- if ($#ARGV < 0)
- {
- # Fetch all table names from the database
- my ($sth,$row);
- $sth=$dbh->prepare("show tables");
- $sth->execute || die "Can't get tables from $opt_database; $DBI::errstrn";
- while (($row = $sth->fetchrow_arrayref))
- {
- push(@ARGV,$row->[0]);
- }
- $sth->finish;
- }
- print "Converting tables:n" if ($opt_verbose);
- foreach $table (@ARGV)
- {
- my ($sth,$row);
- # Check if table is already converted
- $sth=$dbh->prepare("show table status like '$table'");
- if ($sth->execute && ($row = $sth->fetchrow_arrayref))
- {
- if (uc($row->[1]) eq uc($opt_type))
- {
- print "$table is already of type $opt_type; Ignoredn";
- next;
- }
- }
- print "converting $tablen" if ($opt_verbose);
- if (!$dbh->do("ALTER TABLE $table type=$opt_type"))
- {
- print STDERR "Can't convert $table: Error $DBI::errstrn";
- exit(1) if (!$opt_force);
- $exit_status=1;
- }
- }
- $dbh->disconnect;
- exit($exit_status);
- sub usage
- {
- my($version)=shift;
- print "$0 version 1.1n";
- exit(0) if ($version);
- print <<EOF;
- Conversion of a MySQL tables to other table types.
- Usage: $0 database [tables]
- If no tables has been specifed, all tables in the database will be converted.
- The following options are available:
- --force
- Continue even if there is some error.
- --help or --Information
- Shows this help
- --host='host name' (Default $opt_host)
- Host name where the database server is located.
- --password='password'
- Password for the current user.
- --port=port
- TCP/IP port to connect to if host is not "localhost".
- --socket='/path/to/socket'
- Socket to connect with.
- --type='table-type'
- Converts tables to the given table type (Default: $opt_type)
- MySQL 3.23 supports at least the BDB, ISAM and MYISAM types.
- --user='user_name'
- User name to log into the SQL server.
- --verbose
- This is a test specific option that is only used when debugging a test.
- Print more information about what is going on.
- --version
- Shows the version of this program.
- EOF
- exit(1);
- }