Server IP : 103.119.228.120 / Your IP : 3.144.122.20 Web Server : Apache System : Linux v8.techscape8.com 3.10.0-1160.119.1.el7.tuxcare.els2.x86_64 #1 SMP Mon Jul 15 12:09:18 UTC 2024 x86_64 User : nobody ( 99) PHP Version : 5.6.40 Disable Function : shell_exec,symlink,system,exec,proc_get_status,proc_nice,proc_terminate,define_syslog_variables,syslog,openlog,closelog,escapeshellcmd,passthru,ocinum cols,ini_alter,leak,listen,chgrp,apache_note,apache_setenv,debugger_on,debugger_off,ftp_exec,dl,dll,myshellexec,proc_open,socket_bind,proc_close,escapeshellarg,parse_ini_filepopen,fpassthru,exec,passthru,escapeshellarg,escapeshellcmd,proc_close,proc_open,ini_alter,popen,show_source,proc_nice,proc_terminate,proc_get_status,proc_close,pfsockopen,leak,apache_child_terminate,posix_kill,posix_mkfifo,posix_setpgid,posix_setsid,posix_setuid,dl,symlink,shell_exec,system,dl,passthru,escapeshellarg,escapeshellcmd,myshellexec,c99_buff_prepare,c99_sess_put,fpassthru,getdisfunc,fx29exec,fx29exec2,is_windows,disp_freespace,fx29sh_getupdate,fx29_buff_prepare,fx29_sess_put,fx29shexit,fx29fsearch,fx29ftpbrutecheck,fx29sh_tools,fx29sh_about,milw0rm,imagez,sh_name,myshellexec,checkproxyhost,dosyayicek,c99_buff_prepare,c99_sess_put,c99getsource,c99sh_getupdate,c99fsearch,c99shexit,view_perms,posix_getpwuid,posix_getgrgid,posix_kill,parse_perms,parsesort,view_perms_color,set_encoder_input,ls_setcheckboxall,ls_reverse_all,rsg_read,rsg_glob,selfURL,dispsecinfo,unix2DosTime,addFile,system,get_users,view_size,DirFiles,DirFilesWide,DirPrintHTMLHeaders,GetFilesTotal,GetTitles,GetTimeTotal,GetMatchesCount,GetFileMatchesCount,GetResultFiles,fs_copy_dir,fs_copy_obj,fs_move_dir,fs_move_obj,fs_rmdir,SearchText,getmicrotime MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /scripts/ |
Upload File : |
#!/usr/local/cpanel/3rdparty/bin/perl # cpanel - scripts/fix_innodb_tables Copyright 2022 cPanel, L.L.C. # All rights reserved. # copyright@cpanel.net http://cpanel.net # This code is subject to the cPanel license. Unauthorized copying is prohibited package scripts::fix_innodb_tables; use strict; use Cpanel::MysqlUtils::Connect (); use Cpanel::MysqlUtils::Quote (); use Cpanel::Config::LoadCpConf (); use Cpanel::Logger (); use Cpanel::Usage (); our $cpconf = Cpanel::Config::LoadCpConf::loadcpconf(); our $configured_version = $cpconf->{'mysql-version'}; our $logger = Cpanel::Logger->new(); exit( run() ) unless caller(); sub usage { print <<USAGE; $0 [--anyversion] [--help] Repairs InnoDB tables after upgrade from MySQL 5.0 to MySQL 5.1 or from 4.1 to 5.0. Only will run if you are on MySQL 5.1 or MySQL 5.0, set --anyversion if you want to run this on a different version. NOTE: this will rebuild each table and may not correct serious corruptions. This is designed more as an upgrade task then a real repair. USAGE exit 0; } sub run { my $anyversion = 0; my $opts = { anyversion => \$anyversion, }; Cpanel::Usage::wrap_options( \@ARGV, \&usage, $opts ); # we only need to perform this task when upgrading to 5.0 or 5.1 # in that version the InnoDB tables are left in a repair mode # after the upgrade. MySQL 4.1 does not have the information schema # table for us to operate on so do not run on MySQL 4.1. if ( $anyversion == 0 && ( $configured_version gt "5.1" || $configured_version lt "5.0" ) ) { print "Designed to run on MySQL 5.0 or 5.1 during an upgrade\n"; return 1; } $logger->info("fix_innodb_tables called :$configured_version:"); print "Repairing InnoDB tables after upgrade\n"; # I am forcing this to localhost, as this should only be called during # a cpanel rpm install my $database = "information_schema"; my $mysqlhost = 'localhost'; my $dbh; eval { $dbh = Cpanel::MysqlUtils::Connect::get_dbi_handle( 'database' => $database, 'dbserver' => $mysqlhost, ); }; if ( $@ || !$dbh ) { warn "fix_innodb_tables: Failed to connect to db: $database: $@"; print "Failed to connect to db: $database: $@"; return 1; } # #NOTES: # #http://bugs.mysql.com/bug.php?id=44640 #http://www.mysqlperformanceblog.com/2010/05/14/mysql_upgrade-and-innodb-tables/ # my $sql = qq~SELECT table_schema, table_name, engine FROM tables;~; my $sth = $dbh->prepare($sql); my $results = $sth->execute(); if ( $sth->rows ) { print "\nChecking " . $sth->rows . " tables. This may take some time.\n\n"; while ( my $ref = $sth->fetchrow_hashref ) { if ( uc( $ref->{'engine'} ) eq "INNODB" ) { my $schema = Cpanel::MysqlUtils::Quote::quote_identifier( $ref->{'table_schema'} ); my $name = Cpanel::MysqlUtils::Quote::quote_identifier( $ref->{'table_name'} ); print qq~Checking $schema.$name~; my $sql2 = qq~CHECK TABLE $schema.$name;~; my $sth2 = $dbh->prepare($sql2); my $results = $sth2->execute(); if ( $sth2->rows ) { my $array_ref = $sth2->fetchrow_arrayref; if ( $array_ref->[2] eq "error" ) { print "-- Repairing Table\n"; my $sql3 = qq~ALTER TABLE $schema.$name ENGINE=INNODB;~; my $sth3 = $dbh->prepare($sql3); $sth3->execute(); $sth3->finish(); } else { print "-- Table Clean\n"; } } $sth2->finish(); } } } $sth->finish(); return 0; } 1; __END__