pt-online-schema-change的用法

环境:

10.192.30.53 主库

10.192.30.60 从库

mysql版本:8.0.17

为了方便操作,简单的写了如下的脚本。

#!/bin/bash
# file_name: /usr/local/scripts/pt_change_online.sh . /etc/init.d/functions
##########################################################################################
Date_Time=`date +%Y%m%d%H%M%S`
Master_Host="10.192.30.53"
Slave_Host="10.192.30.60"
Port_Num=""
User_Name="admin_m"
Pass_word="rA75MQy*R*y@KO4z%LZe"
Pt_Cmd="/usr/bin/pt-online-schema-change"
MySQL_Dump_Cmd="/usr/bin/mysqldump"
Bak_Data_Dir_="/data/backup/pt_dump/data/"
Bak_logs_Dir="/data/backup/pt_dump/logs/"
Db_Name="dbtest"
Table_Name="test_article"
Character_Name="utf8mb4" # sql操作中必须去掉反引号,其他ddl操作只需要替换"add column name varchar(64) NOT NULL DEFAULT '' COMMENT '用户名';" 即可,可以不同带上最后的分号
########################################################################################## function Data_table_dump(){
"${MySQL_Dump_Cmd}" -h"${Slave_Host}" -P"${Port_Num}" -u"${User_Name}" -p"${Pass_word}" --default-character-set="${Character_Name}" --skip-tz-utc --routines --events --hex-blob --log-error="${Bak_logs_Dir}"dump_"${Date_Time}".log --set-gtid-purged=OFF --single-transaction --dump-slave= --max-allowed-packet= --max-allowed-packet= --skip-opt "${Db_Name}" "${Table_Name}">"${Bak_Data_Dir_}""${Db_Name}"_"${Table_Name}"."${Date_Time}".sql.dump
} function Pirnt_Log(){
Results=`tail - "${Bak_Data_Dir_}""${Db_Name}"_"${Table_Name}"."${Date_Time}".sql.dump | awk '{print $2,$3}'|awk '{print $1,$2}'`
if [ "${Results}"X == "Dump completed"X ]; then
echo " "${Bak_Data_Dir_}""${Db_Name}"_"${Table_Name}"."${Date_Time}".sql.dump Dump completed. " >>"${Bak_logs_Dir}"dump_"${Date_Time}".log
else
echo " "${Bak_Data_Dir_}""${Db_Name}"_"${Table_Name}"."${Date_Time}".sql.dump Dump error! " >>"${Bak_logs_Dir}"dump_"${Date_Time}".log
fi
} function Pt_Online_Change_Schema(){
"${Pt_Cmd}" --host="${Master_Host}" --port="${Port_Num}" --user="${User_Name}" --password="${Pass_word}" --no-check-replication-filters --no-check-unique-key-change D="${Db_Name}",t="${Table_Name}" --charset="${Character_Name}" --no-check-alter --alter="
add column name varchar() NOT NULL DEFAULT '' COMMENT '用户名';
" --execute >>"${Bak_logs_Dir}"pt_"${Date_Time}".log
} function main(){
Data_table_dump
Pirnt_Log
if [ $? -eq ]; then
Pt_Online_Change_Schema
else
exit
fi
} main # end
##########################################################################################
# 准备测试表
mysql> show create table test_article\G;
*************************** . row ***************************
Table: test_article
Create Table: CREATE TABLE `test_article` (
`id` int() unsigned NOT NULL AUTO_INCREMENT,
`title` varchar() NOT NULL DEFAULT '' COMMENT '文章标题',
`content` longtext NOT NULL COMMENT '资讯内容',
`source` text NOT NULL COMMENT '来源',
`seo_keyword` varchar() NOT NULL DEFAULT '' COMMENT '搜索引擎敏感搜索关键词',
`seo_discrible` varchar() NOT NULL DEFAULT '' COMMENT '搜索引擎敏感描述字符串',
`seo_title` varchar() NOT NULL DEFAULT '' COMMENT '搜索引擎敏感标题词',
`top_column_id` int() NOT NULL DEFAULT '' COMMENT '栏目表中一级栏目id',
`second_column_id` int() NOT NULL DEFAULT '' COMMENT '栏目表中二级栏目id',
`img_url` varchar() NOT NULL DEFAULT '' COMMENT '缩略图url',
`sort_value` int() NOT NULL DEFAULT '' COMMENT '排序权重,越大越靠前',
`public_uid` int() NOT NULL DEFAULT '' COMMENT '发布人的uid',
`state` tinyint() NOT NULL DEFAULT '' COMMENT '0已删除,1发布,2未发布',
`reading_times` int() NOT NULL DEFAULT '' COMMENT '浏览总量',
`tag` varchar() NOT NULL DEFAULT '' COMMENT '标签id,json字符串数组',
`related_recommend` varchar() NOT NULL DEFAULT '' COMMENT '相关推荐,json',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT= DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
row in set (0.00 sec) ERROR:
No query specified
-- 、添加字段: alter table test_article add column name varchar() NOT NULL DEFAULT '' COMMENT '用户名';
-- 、删除字段: alter table test_article drop column name ;
-- 、添加普通索引: alter table test_article add index idx_name(name);
-- 、删除普通索引: alter table test_article drop index idx_name;
-- 、添加唯一索引: alter table test_article add unique index idx_name(name);
-- 、删除唯一索引: alter table test_article drop index idx_name;
-- 、修改字段长度:alter table test_article modify name varchar() NOT NULL DEFAULT '' COMMENT '用户名或者昵称';
-- 、修改字段名称: alter table test_article change name user_name varchar() NOT NULL DEFAULT '' COMMENT '用户名';
[root@fudao_db_cluster_003 pt_dump]# sh /usr/local/scripts/pt_change_online.sh
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@fudao_db_cluster_003 pt_dump]# ll *
data:
total
-rw-r--r-- root root Aug : dbtest_test_article..sql.dump logs:
total
-rw-r--r-- root root Aug : dump_20190816143119.log
-rw-r--r-- root root Aug : pt_20190816143119.log
[root@fudao_db_cluster_003 pt_dump]# cat logs/dump_20190816143119.log
/data/backup/pt_dump/data/dbtest_test_article..sql.dump Dump completed.
[root@fudao_db_cluster_003 pt_dump]# cat logs/pt_20190816143119.log
Found slaves:
fudao_db_cluster_003 -> 10.192.30.60:
Will check slave lag on:
fudao_db_cluster_003 -> 10.192.30.60:
Operation, tries, wait:
analyze_table, ,
copy_rows, , 0.25
create_triggers, ,
drop_triggers, ,
swap_tables, ,
update_foreign_keys, ,
Altering `dbtest`.`test_article`...
Creating new table...
Created new table dbtest._test_article_new OK.
Altering new table...
Altered `dbtest`.`_test_article_new` OK.
--16T14:: Creating triggers...
--16T14:: Created triggers OK.
--16T14:: Copying approximately rows...
--16T14:: Copied rows OK.
--16T14:: Analyzing new table...
--16T14:: Swapping tables...
--16T14:: Swapped original and new tables OK.
--16T14:: Dropping old table...
--16T14:: Dropped old table `dbtest`.`_test_article_old` OK.
--16T14:: Dropping triggers...
--16T14:: Dropped triggers OK.
Successfully altered `dbtest`.`test_article`.
[root@fudao_db_cluster_003 pt_dump]# # 删除字段的操作,只需要修改:/usr/local/scripts/pt_change_online.sh
例如:
function Pt_Online_Change_Schema(){
"${Pt_Cmd}" --host="${Master_Host}" --port="${Port_Num}" --user="${User_Name}" --password="${Pass_word}" --no-check-replication-filters --no-check-unique-key-change D="${Db_Name}",t="${Table_Name}" --charset="${Character_Name}" --alter="
drop column name # 修改这一行,即--alter 和 --execute之间的内容,ddl操作类似。
" --execute >>"${Bak_logs_Dir}"pt_"${Date_Time}".log
} [root@fudao_db_cluster_003 pt_dump]# cat logs/pt_20190816143538.log
Found slaves:
fudao_db_cluster_003 -> 10.192.30.60:
Will check slave lag on:
fudao_db_cluster_003 -> 10.192.30.60:
Operation, tries, wait:
analyze_table, ,
copy_rows, , 0.25
create_triggers, ,
drop_triggers, ,
swap_tables, ,
update_foreign_keys, ,
Altering `dbtest`.`test_article`...
Creating new table...
Created new table dbtest._test_article_new OK.
Altering new table...
Altered `dbtest`.`_test_article_new` OK.
--16T14:: Creating triggers...
--16T14:: Created triggers OK.
--16T14:: Copying approximately rows...
--16T14:: Copied rows OK.
--16T14:: Analyzing new table...
--16T14:: Swapping tables...
--16T14:: Swapped original and new tables OK.
--16T14:: Dropping old table...
--16T14:: Dropped old table `dbtest`.`_test_article_old` OK.
--16T14:: Dropping triggers...
--16T14:: Dropped triggers OK.
Successfully altered `dbtest`.`test_article`.
[root@fudao_db_cluster_003 pt_dump]#

pt-online-schema-change的用法的更多相关文章

  1. schema change + ogg 变更手册

    Check OGG  until no data queuing in replication process:testRO:a)login  test5 –l oggmgrb)oggc)#ggsci ...

  2. Online Schema Change for MySQL

    It is great to be able to build small utilities on top of an excellent RDBMS. Thank you MySQL. This ...

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

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

  4. elementUI下拉框select组件change事件用法

    <el-select-custom clearable collapse-tags v-model="searchForm.cardTypeList" @change=&qu ...

  5. Online, Asynchronous Schema Change in F1

    F1: A Distributed SQL Database That Scales   http://disksing.com/understanding-f1-schema-change   ma ...

  6. Online Schema Upgrade in MySQL Galera Cluster using TOI Method

    http://severalnines.com/blog/online-schema-upgrade-mysql-galera-cluster-using-toi-method     As a fo ...

  7. Schema 与数据类型优化

    这是<高性能 MySQL(第三版)>第四章<Schema 与数据类型优化>的读书笔记. 1. 选择优化的数据类型 数据类型的选择原则: 越小越好:选择满足需求的最小类型.注意, ...

  8. OCP考点实战演练01-备份恢复篇

    本系列宗旨:真正掌握OCP考试中所考察的技能,坚决不做Paper OCP! 实验环境:RHEL 6.4 + Oracle 11.2.0.4 OCP考点实战演练01-备份恢复篇 1.数据库开启归档 2. ...

  9. iDB是如何运转的 一

    郑昀 创建于2015/12/2 最后更新于2015/12/4 关键词:数据库,MySQL,自动化运维,DDL,DML,SQL审核,备份,回滚,Inception,osc 提纲: 普通DBA和文艺DBA ...

  10. hbase-site.xml 配置详解

    hbase.rootdir 这个目录是region server的共享目录,用来持久化HBase.URL需要是'完全正确'的,还要包含文件系统的scheme.例如,要表示hdfs中的'/hbase'目 ...

随机推荐

  1. 数据测试002:利用Jmeter推送测试数据(上)

    数据测试002:利用Jmeter推送测试数据(上) 刚才用Jmeter配置一下MySQL数据库花了点时间,好在最后都解决了,注意下面几个问题: 1)没有配置  “Cannot load JDBC dr ...

  2. AGC035 B - Even Degrees【思维·树形结构的妙用】

    题目传送门 一句话题意: 首先,每一条边会产生1个入度,1个出度,因此,如果边的数量是奇数的话,图的所有节点的总出度就是奇数,不可能每个节点的出度都是偶数,因此无解. 有解时,我们先找出原图中的一棵生 ...

  3. python 并发编程 基于gevent模块 协程池 实现并发的套接字通信

    基于协程池 实现并发的套接字通信 客户端: from socket import * client = socket(AF_INET, SOCK_STREAM) client.connect(('12 ...

  4. yum安装nginx(Centos)

    测试人员需要了解Nginx?nginx的别名有很多:中间件,HTTP服务器,代理服务器等,这些名字都是作用的一个体现.在实际项目中,前后端分离,负载均衡等也是通过Nginx实现的,知己知彼,百战百胜. ...

  5. 面试官:new一个对象有哪两个过程?

    Java在new一个对象的时候,会先查看对象所属的类有没有被加载到内存,如果没有的话,就会先通过类的全限定名来加载.加载并初始化类完成后,再进行对象的创建工作. 我们先假设是第一次使用该类,这样的话n ...

  6. 多线程之小米商店APP爬虫

    #今日目标 **多线程之小米商店APP爬虫** 爬取小米商店所有社交APP ``` import requests import time from threading import Thread f ...

  7. ALS部署Spark集群入坑记

    [Stage 236:> (0 + 0) / 400]17/12/04 09:45:55 ERROR yarn.ApplicationMaster: User class threw excep ...

  8. 05、解剖CEL文件各版本格式和读取方法(非R语言)

    相比DAT文件,网络上更支持CEL级别的文件.CEL已经把DAT图像转换成数据了,而且CEL比DAT所占空间小得多.介绍一下CEL文件的格式,CEL文件有文本文件(TextCelFile,版本3).B ...

  9. 优化 Karatsuba 乘法(老物)

    虽然写好了我自己用的a*启发函数但还是有些不尽人意,如果通过数学分析确定不出问题可以工作了的话应该就会发出来了 // Karatsuba 递归式距离推导 // h(x) = f(x) * g(x):/ ...

  10. ES6 环境的搭建

    安装babel npm install --g babel-cli 在项目目录下输入 npm init -y 会自动创建package.json文件 babel src/index.js -o dis ...