• 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()
  • 相关阅读:
    025、MySQL字符串大小写转化函数,文本转化大写,文本转化小写
    024、MySQL字符串替换函数,文本替换函数
    023、MySQL取文本长度取字符串长度
    022、MySQL字符串的拼接
    021、MySQL变量的使用,在MySQL中创建存储过程,并添加变量
    020、MySQL创建一个存储过程,显示存储过程,调用存储过程,删除存储过程
    019、MySQL取本季度开始时间和本季度结束时间
    018、MySQL取满足日期在两个日期之间的所有数据
    017、MySQL取第4本季度开始和结束日期
    016、MySQL取本年第一季度开始日期
  • 原文地址:https://www.cnblogs.com/linn/p/4615162.html
Copyright © 2020-2023  润新知