Python 一次性转换MySQL数据库所有表的存储引擎

废话不多说,上脚本先:

#encoding=utf8
import mysql.connector,re
#定义一个列表,用于保存数据库内所有表的名称;
tl = []
#定义链接信息

config={'host':'192.168.1.254'
        'user':'账号',
        'password':'密码',
        'port':3306 
        'database':'数据库名',
        'charset':'utf8'
       }

#测试连接
try:
    cnn=mysql.connector.connect(**config)
except mysql.connector.Error as e:
    print('connect fails!{}'.format(e))
#显示所有表
sv = "show tables"
#拿到查询的返回结果
cu = cnn.cursor()
cu.execute(sv)
tlvalue = cu.fetchall()
#由于tlvalues列表内包含的是元组信息;
#所以我们将其转换为列表信息并且添加到我前面定义的tl列表内;
for i in tlvalue:
    tl.append(i[0])
#循环更改表存储引擎
for a in tl:
    cu.execute("ALTER TABLE %s ENGINE=INNODB" % a)
#操作完成后释放所有连接;
cu.close()
cnn.close()

实现方法非常简单,循环的使用与列表的append方法。

 

在数据量达到千万级别的表时,请不要在线修改表存储引擎,以免阻塞生产库的操作。

 

如果想online更改千万级甚至亿级数据表,思想有2种:

 

1、用os.system()方法配合 pt-online-schema-change 工具实现在线转换。

 

2、自己用触发器实现所有更改原理。

 

以上,继续上班去咯!大家千万别告诉Candy的BOSS哦......

 

3

你可能感兴趣的:(更改所有表存储引擎,更改表存储引擎,批量更改存储引擎)