pt-online-schema-change的用法
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的用法的更多相关文章
- schema change + ogg 变更手册
Check OGG until no data queuing in replication process:testRO:a)login test5 –l oggmgrb)oggc)#ggsci ...
- 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 ...
- AppBoxFuture(四). 随需而变-Online Schema Change
需求变更是信息化过程中的家常便饭,而在变更过程中如何尽可能小的影响在线业务是比较头疼的事情.举个车联网监控的例子:原终端设备上传车辆的经纬度数据,新的终端设备支持同时上传速度数据,而旧的车辆状态表 ...
- elementUI下拉框select组件change事件用法
<el-select-custom clearable collapse-tags v-model="searchForm.cardTypeList" @change=&qu ...
- Online, Asynchronous Schema Change in F1
F1: A Distributed SQL Database That Scales http://disksing.com/understanding-f1-schema-change ma ...
- 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 ...
- Schema 与数据类型优化
这是<高性能 MySQL(第三版)>第四章<Schema 与数据类型优化>的读书笔记. 1. 选择优化的数据类型 数据类型的选择原则: 越小越好:选择满足需求的最小类型.注意, ...
- OCP考点实战演练01-备份恢复篇
本系列宗旨:真正掌握OCP考试中所考察的技能,坚决不做Paper OCP! 实验环境:RHEL 6.4 + Oracle 11.2.0.4 OCP考点实战演练01-备份恢复篇 1.数据库开启归档 2. ...
- iDB是如何运转的 一
郑昀 创建于2015/12/2 最后更新于2015/12/4 关键词:数据库,MySQL,自动化运维,DDL,DML,SQL审核,备份,回滚,Inception,osc 提纲: 普通DBA和文艺DBA ...
- hbase-site.xml 配置详解
hbase.rootdir 这个目录是region server的共享目录,用来持久化HBase.URL需要是'完全正确'的,还要包含文件系统的scheme.例如,要表示hdfs中的'/hbase'目 ...
随机推荐
- argparse:命令行参数解析详解
简介# 本文介绍的是argparse模块的基本使用方法,尤其详细介绍add_argument内建方法各个参数的使用及其效果. 本文翻译自argparse的官方说明,并加上一些笔者的理解 Copy im ...
- yum 安装docker后 无法启动
一,yum安装docker yum -y install docker 启动docker service docker start 报错: journalctl -xe Error starting ...
- GET 和 POST 区别?网上多数答案都是错的!
最近在看<HTTP权威指南>这本书,对HTTP协议有了更深一层的了解. 在我们面试过程中关于HTTP协议有两个经典的面试题: 1. 谈谈HTTP中GET与POST的区别. 2. 在浏览器中 ...
- 结构体封装高精度 大整数BigInt
曾经很讨厌高精度,因为它很长,不好记,而且在不是很单纯的题目里面感觉很烦(一个数就是一个数组).在一道题目中出现的时候总是用一些奇技淫巧混过去(比如把两个$long$ $long$拼在一起). 现在. ...
- Python新手练手项目
1.新手练手项目集中推荐 https://zhuanlan.zhihu.com/p/22164270 2.Python学习网站 https://www.shiyanlou.com 3.数据结构可视化学 ...
- 更新到.netcore3.0后找不到dotnet-ef的解决办法
在项目根目录下建立global.json文件 { "sdk": { "version": "2.2.402" } } 或使用命令 dotne ...
- 【6.10校内test】 noip模拟
题目链接: p1 FBI树 p2 医院设置 p3 加分二叉树 | | | | | | 分 界 线 | | | | | | 应该算是一篇反思博. 对于OI,我真的算不上是热爱(当然不热爱不代表就不 ...
- Appium+Python之获取toast
思考:手机APP上的必填或错误文本提示一般1-2s就会消失,比较难定位,所以一般的固定元素定位方式是不可用的,那我们如何定位toast呢? 前提:1.Appium1.6.3以上(包括1.6.3) 2. ...
- day 14 装饰器
装饰器:装饰,装修,房子就可以住,如果装修,不影响你住,而且体验更加,让你生活中增加了很多功能:洗澡,看电视,沙发.器:工具.开放封闭原则:开放:对代码的拓展开放的, 更新地图,加新枪,等等.封闭:对 ...
- event.target和event.currentTarget的区别----0605加深理解
target:触发事件的元素.currentTarget:事件绑定的元素.两者在没有冒泡的情况下,是一样的值,但在用了事件委托的情况下,就不一样了,例如: <ul id="ulT&qu ...