需求
使用脚本修改指定数据库内的所有表单存储引擎.
脚本实现
#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种:
-
利用pt-online-schema-change 工具实现在线转换。
-
使用触发器实现所有更改原理。
以上!