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的主要内容,如果未能解决你的问题,请参考以下文章

Mysql之bug

MySQL之权限管理

MYSQL之错误代码----mysql错误代码与JAVA实现

Mysql多实例之mysql服务脚本

MYSQL管理之主从同步管理

MySQL之开启远程连接