zoukankan      html  css  js  c++  java
  • mysql压缩表空间

    REPAIR TABLE `table_name` 修复表 
    OPTIMIZE TABLE `table_name` 优化表 

    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()
  • 相关阅读:
    机械设计手册
    如何在PADS的封装中做非金属化孔
    【Protle99SE】PCB中各层的含义【小汇】
    Stm32时钟分析
    头文件为什么要加#ifndef #define #endif
    android adb常用指令
    安装 SQLManagementStudio_x86_CHS(SQL Server Management Studio) 老提示重启的解决办法
    SQL 2008下载地址以及全新安装详细过程
    【原创】pads2007 Layout 电气连接性检查过孔显示错误
    十款最具发展前景机器人
  • 原文地址:https://www.cnblogs.com/linn/p/4615162.html
Copyright © 2011-2022 走看看