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. Linux(Debian)发行版中文输入法

    Linux发行版下有两大输入法框架:ibus 和fcitx,其中fcitx 的体验要比ibus 好,因此选择 fcitx 框架,并安装中文输入法. 中文输入法中你可以选择fcitx-pinyin or ...

  2. linux中权限对文件和目录的影响?

    #########  rwx 权限对文件和目录的含义  ############ 代表字符          权限                  对文件的含义               对 目录 ...

  3. Nginx日志监控工具

    ngxtop是一个基于python的程序,可以在Python上安装.ngxtop通过实时解析nginx访问日志, 并将结果(nginx服务器的有用指标)输出到终端. 主要的功能 当前有效请求 总请求计 ...

  4. 【VS开发】【图像处理】基于灰度世界、完美反射、动态阈值等图像自动白平衡算法的原理、实现及效果

    基于灰度世界.完美反射.动态阈值等图像自动白平衡算法的原理.实现及效果      白平衡是电视摄像领域一个非常重要的概念,通过它可以解决色彩还原和色调处理的一系列问题.白平衡是随着电子影像再现色彩真实 ...

  5. poj1061(扩展欧基里德定理)

    题目链接:https://vjudge.net/problem/POJ-1061 题意:在一个首位相接的坐标轴上,A.B开始时分别位于X,Y处,每个单位时间向右移动m,n米,问是否能相遇,坐标轴长L. ...

  6. Jackson快速入门

    1.Jackson的简单用法 2.Jackson框架的高阶应用 3.Jackson不支持Java8 Date解决方法 https://www.cnblogs.com/mkxzy/p/7091381.h ...

  7. 树型DP入门

    题意: 某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的直接上司,现在已知每个人的活跃指数和上司关系(当然不可能存在环),求邀请哪些人(多少人)来能使得晚 ...

  8. 单节点FastDFS安装

    环境:centos7 1.什么是分布式文件系统 分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连. ...

  9. nrm切换npm的镜像

    安装node环境 npm -v 1. 安装nrm npm install nrm -g 2. 查看可选的镜像源 nrm ls 号代表目前使用的镜像源 3. 切换镜像源 现在将镜像源切换到淘宝为例 nr ...

  10. Maekdown光速习得

    菜鸟教程提供的在线编辑器,花了十分钟就学会了,可以完成简单编辑,详细学习可点击CSDN左上角Markdown在线编辑器. 菜鸟教程在线编辑器:传送门 CSDN在线编辑器:传送门