REPAIR TABLE `table_name` 修復表
OPTIMIZE TABLE `table_name` 優化表 python
OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...
若是您已經刪除了表的一大部分,或者若是您已經對含有可變長度行的表(含有VARCHAR, BLOB或TEXT列的表)進行了不少更改,則應使用
OPTIMIZE TABLE。被刪除的記錄被保持在連接清單中,後續的INSERT操做會從新使用舊的記錄位置。您能夠使用OPTIMIZE TABLE來從新
利用未使用的空間,並整理數據文件的碎片。
在多數的設置中,您根本不須要運行OPTIMIZE TABLE。即便您對可變長度的行進行了大量的更新,您也不須要常常運行,每週一次或每個月一次
便可,只對特定的表運行。
OPTIMIZE TABLE只對MyISAM, BDB和InnoDB表起做用。
注意,在OPTIMIZE TABLE運行過程當中,MySQL會鎖定表
# coding=utf-8 # 特別說明: import sys,os import time,shutil,datetime from mysql_helper import MysqlHelper def main(): print datetime.datetime.now() Repair() print datetime.datetime.now() def Repair(): mysqlClient = MysqlHelper('1.2.3.4', 'root', '密碼', "mysql") # 取出基本知足規則的數據庫名,後面再作進一步檢查 sql_str = "show databases;" rows = mysqlClient.select(sql_str) db_list = [] for row in rows: db_name = row[0] if db_name != 'mysql' and db_name != 'information_schema' : #print "===%s===" %(db_name) db_list.append(db_name) for db in db_list: n = 1 # 判斷db是否符合規則 print "===%s===" %(db) mysqlClient.select('use ' + db + ';') rows2 = mysqlClient.select('show tables;'); for row_2 in rows2: table_name = row_2[0] print "%s" %(table_name) sql_repair = 'REPAIR TABLE ' + table_name + ';' print sql_repair sql_optimize = 'OPTIMIZE TABLE ' + table_name + ';' print sql_optimize mysqlClient.select(sql_repair) mysqlClient.select(sql_optimize) if __name__ == '__main__': main()
#!/usr/bin/python import sys import os import MySQLdb class MysqlHelper: def __init__(self, MySqlHost, MySqlUser, MySqlPasswd, MySqlDB): try: self._conn = MySQLdb.connect(host=MySqlHost, user=MySqlUser,passwd=MySqlPasswd,db=MySqlDB, charset='utf8') except Exception, e: print e def __del__(self): if self._conn is not None: self._conn.close() def select(self,sql_str): try: _cursor = self._conn.cursor() _cursor.execute(sql_str) results = _cursor.fetchall() _cursor.close() return results except Exception, e: raise Exception,e def no_select(self,sql_str): try: _cursor = self._conn.cursor() _cursor.execute(sql_str) self._conn.commit() _cursor.close() except Exception, e: raise Exception,e if __name__=='__main__': mysql = MysqlHelper()