PK œqhYî¶J‚ßF ßF ) nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/
Dir : /opt/sharedrads/mysql/ |
Server: Linux ngx353.inmotionhosting.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64 IP: 209.182.202.254 |
Dir : //opt/sharedrads/mysql/myisam_repair.py |
#!/opt/imh-python/bin/python3 """Mass MyISAM table fixer""" # 9/19/14 Vanessa Vasile vanessav@inmotion.net # This script does not require MySQL to be running import glob from pathlib import Path import argparse import subprocess def iter_databases(): """Iterate over folders in /var/lib/mysql""" # Generally speaking, every folder in datadir should be a database # if it's not, no biggie for entry in Path('/var/lib/mysql').iterdir(): if entry.is_dir(): yield entry.name def repair_database(database: str, tmpdir: str) -> bool: """Runs a repair on a table""" Path(tmpdir).mkdir(mode=0o755, exist_ok=True, parents=True) # List MyISAM tables if tables := glob.glob(f'/var/lib/mysql/{database}/*.MYI'): print(f'Fixing {len(tables)} tables in database {database}') else: print('No MyISAM tables to fix in database', database) return True repaired = True for table in tables: print(" Fixing %s" % table) try: subprocess.run( ['myisamchk', '-r', '-q', '-t', tmpdir, table], check=True, stderr=subprocess.DEVNULL, stdout=subprocess.DEVNULL, ) except subprocess.CalledProcessError: repaired = False return repaired def main(): """Default function""" args = parse_args() if args.repair_all is True: # Get a list of databases for dbname in iter_databases(): repair_database(dbname, args.tmpdir) if args.database: repair_database(args.database, args.tmpdir) def parse_args(): """Defines valid command line options""" parser = argparse.ArgumentParser(description=__doc__) group = parser.add_mutually_exclusive_group(required=True) # fmt: off group.add_argument( '-a', '--all', dest='repair_all', action='store_true', help="Repair all databases", ) group.add_argument( '-d', '--database', dest='database', help="The name of a specific database to repair", ) parser.add_argument('-t', '--tmpdir', dest='tmpdir', default='/root/tmp') # fmt: on return parser.parse_args() if __name__ == '__main__': try: main() except KeyboardInterrupt: pass