mysql在线更改表可用工具 pt-online-schema-change 更改,或者用gh-ost更改。pt-online-schema-change 在原表创建索引,跟踪新插入的数据。gh-ost则根据日志应用到更改后的表。

下面把pt-online-schema-change封装为脚本化

#!/usr/bin/python
#coding:utf8# 使用方法 例如 python mysql_osc.py  -s 192.168.x.x -p 3306 -d test  -t test  -a 'add column `name16` varchar(200)'
import sys
import os
import commands
import argparse##自定义mysql链接类
from mysqlmodel  import mysqlconn
general_user = cf.get('mysqlinfo','user')
general_passwd = cf.get('mysqlinfo','passwd')def osc(server_ip,server_port,dbname,tabname,ddlstmt):try:conn=mysqlconn(server_ip,server_port)sql1="SELECT COUNT(1) as dbcount FROM information_schema.tables WHERE TABLE_SCHEMA  not in ('mysql','performance_schema','information_schema','sys','test') and TABLE_SCHEMA='%s' and TABLE_NAME='%s';" % (dbname,tabname)sql2="select COUNT(1) as inxcount  from information_schema.STATISTICS where TABLE_SCHEMA='%s' and TABLE_NAME='%s' AND NON_UNIQUE=0 ;" % (dbname,tabname)sql3="show slave status"check_table=conn.myquery(sql1)check_index=conn.myquery(sql2)check_slave=conn.myquery(sql3)if len(check_slave)!=0:print "%s:%s 不是主节点,更改失败" %  (server_ip,server_port)sys.exit()if check_table[0]["dbcount"]!=1:print "表名 %s.%s 不存在" % (dbname,tabname)sys.exit()if check_index[0]["inxcount"]<1:print "表名 %s.%s 不存在唯一索引" % (dbname,tabname)sys.exit()except  Exception as error:print "error: %s " % (error)print "mysql 链接错误"sys.exit()try:cmd = """/usr/local/toolkit/bin/pt-online-schema-change p='%s',u=%s,A=utf8mb4,h='%s',P=%s,D=%s,t=%s --alter='%s'  --execute """  % (general_passwd,general_user,server_ip,server_port,dbname,tabname,ddlstmt)#print cmdstatus=commands.getstatusoutput(cmd)mystatus=status[1]if status[1].find("Successfully altered")>0 and status[0]==0:mystatus="Successfully altered"return mystatusexcept  Exception as error:print "error: %s " % (error)return "执行失败"
if __name__ == '__main__':#参数:parser = argparse.ArgumentParser(description='请输入 -s ip , -p 端口 ,-d 数据库名称,-t 表名, -a 更改语句')parser.add_argument('-s','--host', type=str,required=True,help="数据库地址")parser.add_argument('-p','--port', type=int,required=True,help="数据库端口")parser.add_argument('-d','--db', type=str,required=True,help="数据库名")parser.add_argument('-t','--table', type=str,required=True,help="表名")parser.add_argument('-a','--ddlstmt', type=str,required=True,help="更改语句")args = parser.parse_args()server_ip = args.hostserver_port = args.portdbname = args.dbtabname = args.tableddlstmt = args.ddlstmtif server_ip=="" or server_port=="" or dbname=="" or tabname=="" or ddlstmt=="":print "输入完整信息"sys.exit()status=osc(server_ip,server_port,dbname,tabname,ddlstmt)print status

转载于:https://www.cnblogs.com/vansky/p/9396277.html

pt-online-schema-change 脚本化相关推荐

  1. 《守望先锋》中网络脚本化的武器和技能系统

    在GDC2017[Networking Scripted Weapons and Abilities in Overwatch]的分享会上,来自暴雪的Dan Reed介绍了<守望先锋>中网 ...

  2. 脚本化Questasim/Modelsim自动仿真——脱离联合仿真

    目录 引言 脚本仿真步骤分析 完整的脚本代码 保姆级使用教程 扩展 引言 之前对于工程一直采用的是vivado+questasim联合仿真的模式,对于大型工程来说这个是合适的,因为需要调用一些ip库和 ...

  3. Javascript学习7 - 脚本化浏览器窗口

    原文:Javascript学习7 - 脚本化浏览器窗口 本节讨论了文档对象模型.客户端Javascript下Window中的各项属性,包括计时器.Location对象.Histroy对象.窗口.浏览器 ...

  4. 脚本化 tmux — LinuxTOY

    脚本化 tmux - LinuxTOY 脚本化 tmux 2012-07-02 Toy Posted in TipsRSS 昨天我在家试了下脚本化 tmux,其表现相当令人满意,只需稍加定制便可满足各 ...

  5. iOS架构-静态库.framework脚本化打包补充(5)

    静态库.framework脚本化打包打包已经在iOS架构-静态库.framework手动打包及脚本化打包(5)中讲过.这里补充是通过Xcode 配置Aggregate自动执行脚本打包Framework ...

  6. iOS架构-静态库.framework手动打包及脚本化打包(5)

    引用一张博客的图片来理解下基本知识(http://www.cnblogs.com/oc-bowen/p/7478461.html) 我们可以看出.a的封装和.framework的封装差不多,也有模拟器 ...

  7. AppBoxFuture(四). 随需而变-Online Schema Change

      需求变更是信息化过程中的家常便饭,而在变更过程中如何尽可能小的影响在线业务是比较头疼的事情.举个车联网监控的例子:原终端设备上传车辆的经纬度数据,新的终端设备支持同时上传速度数据,而旧的车辆状态表 ...

  8. 使用Roslyn脚本化C#代码,C#动态脚本实现方案

    来源:https://www.cnblogs.com/7tiny/p/10279349.html [前言] Roslyn 是微软公司开源的 .NET 编译器. 编译器支持 C# 和 Visual Ba ...

  9. 脚本化HTTP 取得响应 指定请求

    脚本化HTTP 下面将会用js代码操纵HTTP 下面将会说明在没有导致web浏览器重新加载任何窗口或者窗体的情况下,脚本实现web浏览器和服务器之间的通信. ajax:为一种找早起避免页面重载而动态更 ...

  10. javascript学习笔记之document对象、表单及表单元素、脚本化cookie

    一.document对象 每个window对象都有document属性.该属性引用表示在窗口中显示的HTML文档的document对象. 1.关键方法 close()关闭open方法打开的文档 ope ...

最新文章

  1. 教务查询子系统时序图
  2. 几种芯片架构:X86、ARM、RISC-V和MIPS
  3. 总结Themida / Winlicense加壳软件的脱壳方法
  4. OpenGL实现flocking (聚集)实例
  5. Tensorflow实现简单神经网络
  6. elk 搜索 语法_ELK学习笔记7| Lucence 的搜索语法
  7. 带宽检测工具iftop
  8. 从零开始刷Leetcode——数组(581.605.628)
  9. java基础知识总结(4)
  10. 激光成像雷达技术 你了解清楚了吗?
  11. mysql 外键约束失败_MYSQL:错误:无法添加或更新子行:外键约束失败
  12. 【拿到offer】2020农业银行校园秋季招聘面试心得
  13. 矩阵知识:线性变换、相似矩阵、对角矩阵、逆矩阵
  14. XSS靶场练习 https://xss.haozi.me
  15. 桌面池计算机置备,Horizon View 7 发布Win10桌面二:即时克隆桌面池配置
  16. OpenHarmony更新编译问题及解决办法
  17. not properly quoted string terminated_oracle quoted string not properly terminated
  18. 基于TextRank的抽取式文本摘要(英文)
  19. 浅试uniapp 集成融云 实现视频通话
  20. 如何采用FM进行召回

热门文章

  1. vue-router 基本使用
  2. python 获取项目根目录
  3. 基于Python的百度地图慧眼迁徙数据爬取
  4. 双向可控硅晶片光耦(TLP160J TLP260J TLP525G)基本原理及应用实例
  5. Densepose安装教程--依据Github官方教程成功安装
  6. 微博上面好看的跳舞美女蛮多的,【Python爬虫】采集微博视频数据(附代完整代码)
  7. 《Java 程序设计任务驱动式实训教程》pdf,附下载链接
  8. 苹果手机为什么Apple ID会被停用
  9. Ubuntu18.04美化桌面
  10. 前端基础知识--Document的常用属性和常用函数