Python 转换MySQL指定数据库所有表的存储引擎.

2 篇文章 0 订阅
1 篇文章 0 订阅

需求

使用脚本修改指定数据库内的所有表单存储引擎.

脚本实现

#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 工具实现在线转换。

  • 使用触发器实现所有更改原理。

以上!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值