create_dbs.pl
上传用户:xiao730204
上传日期:2007-01-04
资源大小:141k
文件大小:6k
源码类别:

WEB邮件程序

开发平台:

PHP

  1. #!/usr/bin/perl
  2. use Getopt::Long;
  3. use strict;
  4. my $database_user             = '';
  5. my $database_user_password    = '';
  6. my $mysql_flag                = 0;
  7. my $mysql_command             = '';
  8. my $mysqlshow_command         = '';
  9. my $news_flag                 = 0;
  10. if ( $ARGV[ 0 ] eq '' ) {
  11.    die <<"USAGE";
  12. create_dbs.pl [options]
  13.    --user=username            - username to be used
  14.    --password=password        - password to be used
  15.    --mysql                    - mysql database
  16.    --mysql_command=path       - path to mysql command
  17.    --mysqlshow_command=path   - path to mysqlshow command
  18.    --news_db                  - create a news database
  19. USAGE
  20. }
  21. my $result = GetOptions(
  22.    'user=s',                     $database_user,
  23.    'password=s',                 $database_user_password,
  24.    'mysql',                      $mysql_flag,
  25.    'mysql_command=s',            $mysql_command,
  26.    'mysqlshow_command=s',        $mysql_command,
  27.    'news_db',                    $news_flag,
  28. );
  29. if ( $mysql_command eq '' ) {
  30.    $mysql_command       = find_command('mysql');
  31. }
  32. if ( $mysqlshow_command eq '' ) {
  33.    $mysqlshow_command   = find_command('mysqlshow');
  34. }
  35. print "Option confirmation : n";
  36. display_option( 'Database Username    ',     $database_user );
  37. display_option( 'Database Password    ',     $database_user_password );
  38. if ( $mysql_flag ) {
  39. display_option( 'Mysql                ',     $mysql_flag );
  40. display_option( 'Mysql     Command    ',     $mysql_command );
  41. display_option( 'Mysqlshow Command    ',     $mysqlshow_command );
  42. }
  43. display_option( 'news db              ',     $news_flag );
  44. if ( $mysql_flag ) {
  45.    if ( $mysql_command eq '' ) {
  46.       die "The mysql command is required : n" .
  47.           "--mysql-command=path_to_mysql is a overriden";
  48.    }
  49.    if ( $mysqlshow_command eq '' ) {
  50.       die "The mysqlshow command is required :n" .
  51.           "--mysqlshow-command=path_to_mysqlshow is a overriden";
  52.    }
  53.    if ( $news_flag ) {
  54.       create_mysql_news_dbs();
  55.    }
  56. }
  57. exit();
  58. sub display_option {
  59.    my $option_name      = shift;
  60.    my $option_value     = shift;
  61.    print $option_name . ' - ' . $option_value . "n";
  62. }
  63. sub find_command {
  64.    my $target_command = shift;
  65.    my @path_elems = ();
  66.    my $path_elem  = '';
  67.    @path_elems = split( /:/, $ENV{ "PATH" } );
  68.    foreach $path_elem ( @path_elems ) {
  69.       my $test_item = '';
  70.       $test_item = $path_elem . '/' . $target_command;
  71.       if ( -x $test_item ) {
  72.          return $test_item;
  73.       }
  74.    }
  75. }
  76. sub get_mysql_dbs {
  77.    my @mysql_dbs = ();
  78.    open( MYSQL_SHOW, 
  79.       $mysqlshow_command . ' ' . 
  80.          '--user=' . $database_user . ' ' .
  81.          '--password=' . $database_user_password .
  82.          ' |'
  83.    ) or die "$!n";
  84.    while( <MYSQL_SHOW> ) {
  85.       my $input_line = $_;
  86.       if ( $input_line =~ /+/ ) { next; }
  87.       if ( $input_line =~ /Databases/ ) { next; }
  88.       if ( $input_line =~ /|s*(.*)s*|/ ) {
  89.          my $target = $1;
  90.          while( $target =~ / $/ ) {
  91.             $target =~ s/ $//g;
  92.          }
  93.          push( @mysql_dbs, $target );
  94.       }
  95.    }
  96.    close( MYSQL_SHOW );
  97.    return @mysql_dbs;
  98. }
  99. sub get_mysql_dbs_tables {
  100.    my $dbs = shift;
  101.    my @mysql_tables = ();
  102.    my $command = $mysqlshow_command . ' ' . 
  103.          '--user=' . $database_user . ' ' .
  104.          '--password=' . $database_user_password . ' ' .
  105.          $dbs . ' % ';
  106.    open( MYSQL_SHOW, $command . ' |') or die "$!n";
  107.    while( <MYSQL_SHOW> ) {
  108.       my $input_line = $_;
  109.       if ( $input_line =~ /+/ ) { next; }
  110.       if ( $input_line =~ /Tables/ ) { next; }
  111.       if ( $input_line =~ /|s*(.*)s*|/ ) {
  112.          my $target = $1;
  113.          while( $target =~ / $/ ) {
  114.             $target =~ s/ $//g;
  115.          }
  116.          push( @mysql_tables, $target );
  117.       }
  118.    }
  119.    close( MYSQL_SHOW );
  120.    return @mysql_tables;
  121. }
  122. sub get_mysql_database_existence {
  123.    my $target_dbs = shift;
  124.    my @mysql_dbs = get_mysql_dbs();
  125.    my $item = '';
  126.    foreach $item ( @mysql_dbs ) {
  127.       #print $item . "***n";
  128.       if ( $item eq $target_dbs ) {
  129.          # dbs is already there...
  130.          return 1;
  131.       }
  132.    }
  133.    return 0;
  134. }
  135. sub get_mysql_table_existence {
  136.    my $target_dbs       = shift;
  137.    my $target_table     = shift;
  138.    my @mysql_tables = get_mysql_dbs_tables( $target_dbs );
  139.    my $item = '';
  140.    foreach $item ( @mysql_tables ) {
  141.       #print $item . "***n";
  142.       if ( $item eq $target_table ) {
  143.          # dbs is already there...
  144.          return 1;
  145.       }
  146.    }
  147.    return 0;
  148. }
  149. sub run_mysql_script {
  150.    my $script = shift;
  151.    my $target_dbs = shift;
  152.    my @command = ();
  153.    @command = (
  154.       $mysql_command,
  155.       '--user=' . $database_user,
  156.       '--password=' . $database_user_password
  157.    );
  158.    if ( $target_dbs ne "" ) { push( @command, $target_dbs ); }
  159.    push( @command, ">> create_log.log 2>> create_log.stderr" );
  160.    push( @command, "< $script" );
  161.    system( join( ' ', @command ) );
  162. }
  163. sub create_mysql_news_dbs {
  164.    my $target_dbs          = 'prometheus_news';
  165.    my $target_dbs_create   = 
  166.       './database/mysql/News/create_prometheus_news.sql';
  167.    my $db_there = 0;
  168.    $db_there = get_mysql_database_existence( $target_dbs );
  169.    if ( $db_there == 1 ) {
  170.       die
  171.          "There seems to be a issue : $target_dbs is already theren" .
  172.          "and since i don't know how to handle this i'm exitingn";
  173.    }
  174.    run_mysql_script( $target_dbs_create );
  175.    $db_there = get_mysql_database_existence( $target_dbs );
  176.    if ( $db_there == 1 ) {
  177.       print "$target_dbs - Database was created!n";
  178.    } else {
  179.       die 
  180.          "Hmm the database is still not there after i tried ton" .
  181.          "create it, i'm guessing that there is something afoot!n";
  182.    }
  183.    my @dbs_tables = ( 
  184.       './table/mysql/News/news_table.sql',
  185.    );
  186.    my $table = '';
  187.    foreach $table ( @dbs_tables ) {
  188.       run_mysql_script( $table, $target_dbs );
  189.    }
  190.    my @table_cheks = (
  191.       'news_table',
  192.    );
  193.    foreach $table ( @table_cheks ) {
  194.       if (
  195.          get_mysql_table_existence( $target_dbs, $table ) 
  196.       ) {
  197.          # Table is there
  198.          print "Table : $table checked out good - we are gon";
  199.       } else {
  200.          die "Table : $table checked DID NOT out good - we are NO gon";
  201.       }
  202.    }
  203.    print "Okay looks like we have a $target_dbs - database to use now, have fun!n";
  204. }