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 cmd
status=commands.getstatusoutput(cmd)
mystatus=status[1]
if status[1].find("Successfully altered")>0 and status[0]==0:
mystatus="Successfully altered"
return mystatus
except 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.host
server_port = args.port
dbname = args.db
tabname = args.table
ddlstmt = args.ddlstmt
if 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

pt-online-schema-change 脚本化的更多相关文章

  1. Javascript学习8 - 脚本化文档(Document对象)

    原文:Javascript学习8 - 脚本化文档(Document对象) 每个Web浏览器窗口(或帧)显示一个HTML文档,表示这个窗口的Window对象有一个document属性,它引用了一个Doc ...

  2. JavaScript权威指南--脚本化CSS

    知识要点 客户端javascript程序员对CSS感兴趣的是因为样式可以通过脚本编程.脚本化css启用了一系列有趣的视觉效果.例如:可以创建动画让文档从右侧“滑入”.创造这些效果的javascript ...

  3. JavaScript权威指南--脚本化文档

    知识要点 脚本化web页面内容是javascript的核心目标. 第13章和14章解释了每一个web浏览器窗口.标签也和框架由一个window对象所示.每个window对象有一个document对象, ...

  4. 深入理解脚本化CSS系列第六篇——脚本化伪元素的6种方法

    × 目录 [1]动态样式 [2]CSS类[3]setAttribute()[4]CSSRule对象添加[5]空样式覆盖[6]CSSRule对象删除 前面的话 我们可以通过计算样式来读取伪元素的样式信息 ...

  5. 深入理解脚本化CSS系列第四篇——脚本化样式表

    × 目录 [1]CSSStyleSheet [2]CSSRule 前面的话 关于脚本化CSS,查询样式时,查询的是计算样式:设置单个样式时,设置的是行间样式:设置多个样式时,设置的是CSS类名.脚本化 ...

  6. 深入理解脚本化CSS系列第三篇——脚本化CSS类

    前面的话 在实际工作中,我们使用javascript操作CSS样式时,如果要改变大量样式,会使用脚本化CSS类的技术,本文将详细介绍脚本化CSS类 style 我们在改变元素的少部分样式时,一般会直接 ...

  7. 深入理解脚本化CSS系列第一篇——脚本化行内样式

    × 目录 [1]用法 [2]属性 [3]方法 前面的话 脚本化CSS,通俗点说,就是使用javascript来操作CSS.引入CSS有3种方式:外部样式,内部样式和行间样式.本文将主要介绍脚本化行间样 ...

  8. (转)mongodb常用命令脚本化-自动化运维

    mongodb常用命令脚本化-自动化运维 把一些运维中常用到的mongodb命令写成shell脚本,极大的方便了维护   1 设置副本集   #!/bin/bash#mongodb 进入client ...

  9. JavaScript 客户端JavaScript之脚本化HTTP(通过XMLHttpRequest)

    XMLHttpRequest对象的设计目的是为了处理由普通文本或XML组成的响应:但是,一个响应也可能是另外一种类型,如果用户代理(UA)支持这种内容类型的话.   大多数浏览的客户端JavaScri ...

  10. JavaScript 客户端JavaScript之 脚本化浏览器窗口

    1.计时器 客户端Javascript以全局函数setTimeOut().clearTimeOut().setInterval().clearInterval()提供这一功能.   前者是从运行的那一 ...

随机推荐

  1. mysql五补充:SQL逻辑查询语句执行顺序(待完善)

    一.SELECT语句关键字的定义顺序(语法顺序) SELECT DISTINCT <select_list> FROM <left_table> <join_type&g ...

  2. caffe-windows之手写体数字识别例程mnist

    caffe-windows之手写体数字识别例程mnist 一.训练测试网络模型 1.准备数据 Caffe不是直接处理原始数据的,而是由预处理程序将原始数据变换存储为LMDB格式,这种方式可以保持较高的 ...

  3. 转:ArcGIS提取面状道路中心线(转载)

    1.首先把所有的面要素merge成一个要素 2.把merge后的数据转成线数据 3.此时转换后的线数据一定是闭合的,为了防止提取中心线失败(只提取出外围轮廓)我们在随意一个道路末端使用打断工具打一个开 ...

  4. Tesorflow源代码安装方式以及错误的解决方法

    作者 修雨轩陈@cnblog 目录 Configure the installation. (安装配置) Create the pip package and install (创建pip安装包并且安 ...

  5. 深度语义匹配模型-DSSM 及其变种

    转自:http://ju.outofmemory.cn/entry/316660 感谢分享~ DSSM这篇paper发表在cikm2013,短小但是精炼,值得记录一下 ps:后来跟了几篇dssm的pa ...

  6. 浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色

    简介 在简单恢复模式下,日志文件的作用仅仅是保证了SQL Server事务的ACID属性.并不承担具体的恢复数据的角色.正如”简单”这个词的字面意思一样,数据的备份和恢复仅仅是依赖于手动备份和恢复.在 ...

  7. solidity语言10

    pragma solidity ^0.4.16; contract OwnedToken { // TokenCreator是个合约类型,由后面部分定义.只要不用于创建新合约,引用它就好 TokenC ...

  8. IFrame安全问题解决办法(跨框架脚本(XFS)漏洞)

    最近项目要交付了,对方安全测试的时候检测出高危险漏洞,由于刚参加工作不久,经验不足,未涉及过此方面的东西.经过一番查询和探索,最终解决了这个问题,记录一下. 发现的漏洞为缺少跨框架脚本保护.跨框架脚本 ...

  9. 屏幕  z

    private   void   FullScreen()   //全屏      {      SizeMode   =   2;      FormBorderStyle   =   FormBo ...

  10. STC12C5A60S2 51单片机最小系统

                                                                                    STC12C5A60S2 一.根据芯片文 ...