mysql之ptschema-change
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql之ptschema-change相关的知识,希望对你有一定的参考价值。
参考技术A条件:
1,表格必须带有主键或者唯一索引
1, 原理
1.1 检查表是否带有主键或者唯一索引,show create table test;
1.2 创建新表,create table _test_new;
1.3 变更新表,alter table _test_new;
1.4 在原表上创建 insert、update、delete 三种类型的触发器;
1.5 将旧表的数据拷贝到新表中,同时通过触发器将旧表中的操作映射到新表;
1.6 将新表替换原表,rename 表名,RENAME TABLE `testdb`.`test` TO `testdb`.`_test_old`, `testdb`.`_test_new` TO `testdb`.`test`
1.7 删除旧表(可以根据选项来控制是否删除旧表)
1.8 删除新表上的删除、更新、插入 触发器
2, 使用场景
2.1 亿级大表在线不锁表变更字段与索引
3,pt-online-schema-change安装
yum install perl-DBI
yum install perl-DBD-mysql
yum install perl-Time-HiRes
yum install perl-IO-Socket-SSL
4,pt-online-schema-change使用
选项:
示例:
1, 添加列
2, 删除列
3, 添加索引
4, 删除索引
5, 修改字段长度
6,重建表
7, 修改自增ID为bigint
8 添加字段
9 修改字段
10 删除字段
11 添加索引
12 删除索引
13 修改字段为null/not null
# 改为null
# 改为 not null
14 添加主键
15 删除主键
16 重建表
17 保留变更的新旧表
# 保留旧表
# 保留新表,
优势:
1,降低主从延时的风险
2,可以限速、限资源,避免操作时MySQL负载过高
建议:
1,在业务低峰期做,将影响降到最低
Mysql多实例之mysql服务脚本
1.
#init port=3306 mysql_user="root" mysql_pwd="cancer" CmdPath="/application/mysql/bin" mysql_sock="/data/${port}/mysql.sock" #startup function function_start_mysql() { if [ ! -e "$mysql_sock" ];then printf "Starting MySQL...\n" /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null & else printf "MySQL is running...\n" exit fi } #stop function function_stop_mysql() { if [ ! -e "$mysql_sock" ];then printf "MySQL is stopped...\n" exit else printf "Stoping MySQL...\n" ${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown fi } #restart function function_restart_mysql() { printf "Restarting MySQL...\n" function_stop_mysql sleep 2 function_start_mysql } case $1 in start) function_start_mysql ;; stop) function_stop_mysql ;; restart) function_restart_mysql ;; *) printf "Usage: /data/${port}/mysql {start|stop|restart}\n" esac
http://blog.csdn.net/u011364306/article/details/47814409
2.
#!/bin/bash mysql_port=3307 mysql_username="admin" mysql_password="password" function_start_mysql() { printf "Starting MySQL...\n" /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/dbdata_${mysql_port}/my.cnf 2>&1 > /dev/null & } function_stop_mysql() { printf "Stoping MySQL...\n" /usr/local/mysql/bin/mysqladmin -u ${mysql_username} -p${mysql_password} -S /data/dbdata_${mysql_port}/mysql.sock shutdown } function_restart_mysql() { printf "Restarting MySQL...\n" function_stop_mysql function_start_mysql } function_kill_mysql() { kill -9 $(ps -ef | grep ‘bin/mysqld_safe‘ | grep ${mysql_port} | awk ‘{printf $2}‘) kill -9 $(ps -ef | grep ‘libexec/mysqld‘ | grep ${mysql_port} | awk ‘{printf $2}‘) } case $1 in start) function_start_mysql;; stop) function_stop_mysql;; kill) function_kill_mysql;; restart) function_stop_mysql function_start_mysql;; *) echo "Usage: /data/dbdata_${mysql_port}/mysqld {start|stop|restart|kill}";; esac
http://blog.csdn.net/zhoufoxcn/article/details/73065655?utm_source=tuicool&utm_medium=referral
以上是关于mysql之ptschema-change的主要内容,如果未能解决你的问题,请参考以下文章