Python 一次性轉換MySQL數據庫全部表的存儲引擎

廢話很少說,上腳本先:python

#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方法。mysql

 

在數據量達到千萬級別的表時,請不要在線修改表存儲引擎,以避免阻塞生產庫的操做。web

 

若是想online更改千萬級甚至億級數據表,思想有2種:sql

 

一、用os.system()方法配合 pt-online-schema-change 工具實如今線轉換。數據庫

 

二、本身用觸發器實現全部更改原理。app

 

以上,繼續上班去咯!你們千萬別告訴Candy的BOSS哦......工具

 

3 測試

相關文章
相關標籤/搜索