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'目 ...
随机推荐
- oracle系统视图V$
--数据字典表select * from v$fixed_table;select * from v$fixed_view_definition;select * from dictionary; - ...
- squid代理docker
http://www.dockone.io/article/1380https://www.cnblogs.com/lixiaolun/p/7449017.html 为docker设置代理 创建目录 ...
- 浅谈 MySQL的预编译
之前的一篇 Mybatis中 #{}和${}的区别 中涉及到通过 SQL预编译和 #{} 传值 的方式防止SQL注入. 由此引发了想了解预编译的想法.那么什么是预编译那? 一.三个阶段: 词法和语义解 ...
- ubuntu18.04安装Vulhub
环境 虚拟机vmware ubuntu18.04 已安装docker 1.安装docker-compose 前提:Docker-compose基于Python开发,需要pip Docker-compo ...
- spring+redis实例(二)
这一篇redis实例是基于序列化储存-(写入对象,读取对象) 在spring+redis(一)中我们介绍了在spring中怎么去操作储存redis,基于string的储存,今天我们介绍一下redis基 ...
- SPOJ 703 SERVICE - Mobile Service 题解
题面 好题啊!~ 设f[i][j][k][l]表示已经处理完前i个请求后,a在j,b在k,c在l的最小值是多少: 那么f[i][p[i]][k][l]=min(f[i][p[i]][k][l],f[i ...
- tp5后台同步更新配置文件
thinkphp5 配置文件路径:app/extra/web.php public function add(){ $path = 'app/extra/web.php'; $file = inclu ...
- Centos7 升级php版本到php7
一.首先查看是否有老版本 yum list installed | grep php 二.如果安装的有 yum remove php.x86_64 php-cli.x86_64 php-common. ...
- javaweb:关于HttpServletResponse介绍 (转)
出处: https://www.cnblogs.com/xdp-gacl/p/3789624.html Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request ...
- webpack4.x + vue2.x 构建前端工程化(1)
本篇文篇纯属个人笔记,实现工程化打包(用打包后的文件可以正常渲染页面),后续继续更新配置开发环境与生产环境,如果有不合理的地方还望各位指点! 不用脚手架,直接用vue和webpack搭建前端工程化项目 ...