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. vue使用qrcode生成二维码,可以自定义大小

    1,qrcanvas-vue插件,https://gera2ld.github.io/qrcanvas-vue/#logo.只支持像素大小的二维码 2,qrcode支持移动端自定义大小二维码 &quo ...

  2. 在windows环境下运行compass文件出现的错误提示解决方案

    在windows环境下运行compass文件出现的错误提示解决方案 例如:经常在项目中运行grunt命令编译scss文件的时候,会出现下面的错误提示 (Encoding::CompatibilityE ...

  3. SharePoint 2013 - Callout

    1. 没有OOTB的方法对Callout进行修改,Callout可以使用在以下范围: Document Library Assert Library Images Library Pages Libr ...

  4. 【Linux】动态链接函数库

    动静区别 1. gcc –c mylib.c –o mylib.o 2. gcc -shared -fPIC mylib.o -o libmylib.so 3. 将制作好的libmylib.so 复制 ...

  5. 【Linux】Linux入门及常见基本操作命令详解

    本文基于 Red Hat Enterprise Linux 6 一.Linux 入门体验 1.1 root用户登陆 1.2 图形化与纯字符模式切换 init 5 - 图形模式 init 3 - 纯字符 ...

  6. Oracle:environment variable "PATH" does not exceed the recommended length

    今天重新安装oracle11g,突然在检测时报了以下错误: Environment variable: "PATH" - This test checks whether the ...

  7. Flask环境github及项目部署(十三)

    (1) github项目搭建 1 连接GitHub hostnamectl set-hostname flask-dev # 设置 hostname,一般是主机名可以不更改 ssh-keygen # ...

  8. VSCode-python 进阶配置

    VSCode-python 进阶配置 中文乱码 中文乱码,网上一堆解决方法,但是根本没有有效起作用的. 在python脚本的前面添加: # -*- coding:utf-8 -*- 并不能在控制台输出 ...

  9. JSP中include动作与指令

    include指令 JSP中有三大指令:page,include,taglib,之前已经说过了page的用法.这里介绍下include. 使用语法如下: <%@ include file=&qu ...

  10. 深度剖析hdfs原理

    大数据底层技术的三大基石起源于Google在2006年之前的三篇论文GFS.Map-Reduce. Bigtable,其中GFS.Map-Reduce技术直接支持了Apache Hadoop项目的诞生 ...