percona-toolkit大表操作DDL使用
1. 系统与安装数据库
[root@zhang ~]# cat /etc/redhat-release # 也可以使用其他版本
CentOS Linux release 7.4. (Core)
[root@zhang ~]# yum install -y mariadb mariadb-server # CentOS7的mysql数据库为mariadb
………………
[root@zhang ~]# systemctl enable mariadb.service # 开机自启动mariadb
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
[root@zhang ~]# systemctl start mariadb.service # 启动mariadb
[root@zhang ~]# systemctl status mariadb.service # 查看mariadb服务状态
● mariadb.service - MariaDB database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
Active: active (running) since Wed -- :: CST; 6s ago
Process: ExecStartPost=/usr/libexec/mariadb-wait-ready $MAINPID (code=exited, status=/SUCCESS)
Process: ExecStartPre=/usr/libexec/mariadb-prepare-db-dir %n (code=exited, status=/SUCCESS)
………………
2. 数据库准备工作
2.1. 数据库字符集修改
2.1.1. 数据库版本信息
MariaDB [(none)]> select version();
+----------------+
| version() |
+----------------+
| 5.5.-MariaDB |
+----------------+
row in set (0.00 sec)
2.1.2. 支持哪些字符集
MariaDB [(none)]> show CHARACTER SET;
## 字符集 描述 默认校对规则 最大长度
+----------+-----------------------------+---------------------+--------+
| Charset | Description | Default collation | Maxlen |
+----------+-----------------------------+---------------------+--------+
| big5 | Big5 Traditional Chinese | big5_chinese_ci | |
| dec8 | DEC West European | dec8_swedish_ci | |
| cp850 | DOS West European | cp850_general_ci | |
| hp8 | HP West European | hp8_english_ci | |
| koi8r | KOI8-R Relcom Russian | koi8r_general_ci | |
| latin1 | cp1252 West European | latin1_swedish_ci | |
| latin2 | ISO - Central European | latin2_general_ci | |
| swe7 | 7bit Swedish | swe7_swedish_ci | |
| ascii | US ASCII | ascii_general_ci | |
| ujis | EUC-JP Japanese | ujis_japanese_ci | |
| sjis | Shift-JIS Japanese | sjis_japanese_ci | |
| hebrew | ISO - Hebrew | hebrew_general_ci | |
| tis620 | TIS620 Thai | tis620_thai_ci | |
| euckr | EUC-KR Korean | euckr_korean_ci | |
| koi8u | KOI8-U Ukrainian | koi8u_general_ci | |
| gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | |
| greek | ISO - Greek | greek_general_ci | |
| cp1250 | Windows Central European | cp1250_general_ci | |
| gbk | GBK Simplified Chinese | gbk_chinese_ci | |
| latin5 | ISO - Turkish | latin5_turkish_ci | |
| armscii8 | ARMSCII- Armenian | armscii8_general_ci | |
| utf8 | UTF- Unicode | utf8_general_ci | |
| ucs2 | UCS- Unicode | ucs2_general_ci | |
| cp866 | DOS Russian | cp866_general_ci | |
| keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci | |
| macce | Mac Central European | macce_general_ci | |
| macroman | Mac West European | macroman_general_ci | |
| cp852 | DOS Central European | cp852_general_ci | |
| latin7 | ISO - Baltic | latin7_general_ci | |
| utf8mb4 | UTF- Unicode | utf8mb4_general_ci | |
| cp1251 | Windows Cyrillic | cp1251_general_ci | |
| utf16 | UTF- Unicode | utf16_general_ci | |
| cp1256 | Windows Arabic | cp1256_general_ci | |
| cp1257 | Windows Baltic | cp1257_general_ci | |
| utf32 | UTF- Unicode | utf32_general_ci | |
| binary | Binary pseudo charset | binary | |
| geostd8 | GEOSTD8 Georgian | geostd8_general_ci | |
| cp932 | SJIS for Windows Japanese | cp932_japanese_ci | |
| eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | |
+----------+-----------------------------+---------------------+--------+
rows in set (0.00 sec)
2.1.3. 当前数据库默认字符集
MariaDB [(none)]> show variables like '%character_set%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 | ## 客户端来源数据使用的字符集
| character_set_connection | utf8 | ## 连接层字符集
| character_set_database | latin1 | ## 当前选中数据库的默认字符集
| character_set_filesystem | binary |
| character_set_results | utf8 | ## 查询结果返回字符集
| character_set_server | latin1 | ## 默认的内部操作字符集【服务端(数据库)字符】
| character_set_system | utf8 | ## 系统元数据(字段名等)字符集【Linux系统字符集】
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
rows in set (0.00 sec)
2.1.4. 修改字符集为utf8
[root@zhang ~]# vim /etc/my.cnf
[client]
default-character-set=utf8 [mysqld]
character-set-server=utf8
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd [mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid #
# include all files from the config directory
#
!includedir /etc/my.cnf.d [root@zhang ~]# systemctl restart mariadb.service # 重启mariadb # 字符集查看
MariaDB [(none)]> show variables like '%character_set%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
rows in set (0.00 sec)
2.2. 数据库建库、授权操作
2.2.1. 创建数据库
MariaDB [(none)]> create database zhangtest01;
Query OK, row affected (0.00 sec) MariaDB [(none)]> show create database zhangtest01;
+-------------+----------------------------------------------------------------------+
| Database | Create Database |
+-------------+----------------------------------------------------------------------+
| zhangtest01 | CREATE DATABASE `zhangtest01` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+-------------+----------------------------------------------------------------------+
row in set (0.00 sec) MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| zhangtest01 |
+--------------------+
rows in set (0.00 sec)
2.2.2. 授权
MariaDB [(none)]> grant all on zhangtest01.* to zhang01@'%' identified by 'zhang01'; # 错误授权【大表操作时会失败】
Query OK, rows affected (0.00 sec) MariaDB [(none)]> grant all on *.* to zhang06@'%' identified by 'zhang06'; # 正确授权
Query OK, rows affected (0.00 sec) MariaDB [(none)]> flush privileges; # 刷新权限
Query OK, rows affected (0.00 sec) MariaDB [(none)]> show grants for zhang01@'%' ;
+--------------------------------------------------------------------------------------------------------+
| Grants for zhang01@% |
+--------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'zhang01'@'%' IDENTIFIED BY PASSWORD '*4D6E977808109CE3DEEDEDA4E3EA17CE0F9CC8C1' |
| GRANT ALL PRIVILEGES ON `zhangtest01`.* TO 'zhang01'@'%' |
+--------------------------------------------------------------------------------------------------------+
rows in set (0.00 sec) MariaDB [(none)]> show grants for zhang06@'%' ;
+-----------------------------------------------------------------------------------------------------------------+
| Grants for zhang06@% |
+-----------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'zhang06'@'%' IDENTIFIED BY PASSWORD '*45D6EF2FFF78EB89123D0056C9AE2FC6BA6DA0E7' |
+-----------------------------------------------------------------------------------------------------------------+
row in set (0.00 sec) mysql> show variables like '%connect%';
+--------------------------+-----------------+
| Variable_name | Value |
+--------------------------+-----------------+
| character_set_connection | utf8 |
| collation_connection | utf8_general_ci |
| connect_timeout | |
| extra_max_connections | |
| init_connect | |
| max_connect_errors | |
| max_connections | |
| max_user_connections | |
+--------------------------+-----------------+
rows in set (0.00 sec) mysql> show status like '%connect%'; # 连接信息
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| Aborted_connects | |
| Connections | |
| Max_used_connections | |
| Ssl_client_connects | |
| Ssl_connect_renegotiates | |
| Ssl_finished_connects | |
| Threads_connected | |
+--------------------------+-------+
rows in set (0.00 sec)
2.3. 数据库建表、插入数据
2.3.1. 建表语句
CREATE TABLE `zhang_test` (
`id` int() NOT NULL,
`name` varchar() NOT NULL,
`address` varchar() DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2.3.2. 插入语句示例
INSERT INTO `zhangtest01`.`zhang_test` (`id`, `name`, `address`) VALUES ('', 'test0', '中国XX省XX市0');
2.3.3. 对应的批量SQL语句脚本
[root@zhang database]# vim batch_insert.sh
#!/bin/sh for i in `echo {..}`;do
echo "INSERT INTO zhangtest01.zhang_test (id, name, address) VALUES ('${i}', 'test${i}', '中国XX省XX市${i}'); " done
执行脚本将插入数据放到一个文本中,之后导入数据库即可
3. percona-toolkit安装【可以在另外一台机器】
# 官网下载
[root@zhang tools]# wget https://www.percona.com/downloads/percona-toolkit/3.0.10/binary/redhat/7/x86_64/percona-toolkit-3.0.10-1.el7.x86_64.rpm
………………
[root@zhang tools]# yum install -y percona-toolkit-3.0.-.el7.x86_64.rpm
………………
[root@docker01 tools]# pt-online-schema-change --help # 帮助文档
………………
4. 大表DDL操作
4.1. 添加表字段【并保存原始表】
[root@docker01 tools]# pt-online-schema-change -h172.16.1. -uzhang06 -pzhang06 --nocheck-replication-filters --nodrop-old-table --charset=UTF8 --max-load="Threads_running=1000" --alter "add uuid varchar(100) NOT NULL DEFAULT '0' COMMENT 'UUID' after id" D=zhangtest01,t=zhang_test --execute # 语句
No slaves found. See --recursion-method if host zhang has slaves.
Not checking slave lag because no slaves were found and --check-slave-lag was not specified.
Operation, tries, wait:
analyze_table, ,
copy_rows, , 0.25
create_triggers, ,
drop_triggers, ,
swap_tables, ,
update_foreign_keys, ,
Altering `zhangtest01`.`zhang_test`...
Creating new table...
Created new table zhangtest01._zhang_test_new OK.
Altering new table...
Altered `zhangtest01`.`_zhang_test_new` OK.
--23T13:: Creating triggers...
--23T13:: Created triggers OK.
--23T13:: Copying approximately rows...
Copying `zhangtest01`.`zhang_test`: % : remain
--23T13:: Copied rows OK.
--23T13:: Swapping tables...
--23T13:: Swapped original and new tables OK.
Not dropping old table because --no-drop-old-table was specified.
--23T13:: Dropping triggers...
--23T13:: Dropped triggers OK.
Successfully altered `zhangtest01`.`zhang_test`.
4.1.1. 修改后的表结构
CREATE TABLE `zhang_test` (
`id` int() NOT NULL,
`uuid` varchar() NOT NULL DEFAULT '' COMMENT 'UUID',
`name` varchar() NOT NULL,
`address` varchar() DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4.1.2. 命令参数说明
--nocheck-replication-filters
不检查复制过滤器【有主从复制也照样执行】 --[no]drop-old-table
操作完后是否删除原始表【默认TRUE】 --critical-load="Threads_running=1000" # 终止拷贝【不优先使用】
类似于--max-load,不同的是检测到超高负载时会直接中断OSC进程而不是暂停
--max-load="Threads_running=1000" # 暂停拷贝【优先使用】
默认如果检测到服务器负载过重会暂停操作
检查每个块后显示全局状态,如果负载太高暂停(默认Threads_running=) D=zhangtest01
操作的哪个数据库 t=zhang_test
操作哪张表 --execute
执行操作
4.2. 修改表字段
[root@docker01 ~]# pt-online-schema-change -h172.16.1. -uzhang06 -pzhang06 --nocheck-replication-filters --charset=UTF8 --max-load="Threads_running=1000" --alter "MODIFY uuid varchar(80)" D=zhangtest01,t=zhang_test --execute
[root@docker01 ~]# pt-online-schema-change -h172.16.1. -uzhang06 -pzhang06 --nocheck-replication-filters --charset=UTF8 --max-load="Threads_running=1000" --alter "MODIFY uuid int(11)" D=zhangtest01,t=zhang_test --execute
No slaves found. See --recursion-method if host zhang has slaves.
Not checking slave lag because no slaves were found and --check-slave-lag was not specified.
Operation, tries, wait:
analyze_table, ,
copy_rows, , 0.25
create_triggers, ,
drop_triggers, ,
swap_tables, ,
update_foreign_keys, ,
Altering `zhangtest01`.`zhang_test`...
Creating new table...
Created new table zhangtest01._zhang_test_new OK.
Altering new table...
Altered `zhangtest01`.`_zhang_test_new` OK.
--23T22:: Creating triggers...
--23T22:: Created triggers OK.
--23T22:: Copying approximately rows...
--23T22:: Copied rows OK.
--23T22:: Swapping tables...
--23T22:: Swapped original and new tables OK.
--23T22:: Dropping old table...
--23T22:: Dropped old table `zhangtest01`.`__zhang_test_old` OK.
--23T22:: Dropping triggers...
--23T22:: Dropped triggers OK.
Successfully altered `zhangtest01`.`zhang_test`.
4.3. 删除表字段
[root@docker01 ~]# pt-online-schema-change -h172.16.1. -uzhang06 -pzhang06 --nocheck-replication-filters --charset=UTF8 --max-load="Threads_running=1000" --alter "DROP uuid" D=zhangtest01,t=zhang_test --execute
No slaves found. See --recursion-method if host zhang has slaves.
Not checking slave lag because no slaves were found and --check-slave-lag was not specified.
Operation, tries, wait:
analyze_table, ,
copy_rows, , 0.25
create_triggers, ,
drop_triggers, ,
swap_tables, ,
update_foreign_keys, ,
Altering `zhangtest01`.`zhang_test`...
Creating new table...
Created new table zhangtest01._zhang_test_new OK.
Altering new table...
Altered `zhangtest01`.`_zhang_test_new` OK.
--23T22:: Creating triggers...
--23T22:: Created triggers OK.
--23T22:: Copying approximately rows...
--23T22:: Copied rows OK.
--23T22:: Swapping tables...
--23T22:: Swapped original and new tables OK.
--23T22:: Dropping old table...
--23T22:: Dropped old table `zhangtest01`.`__zhang_test_old` OK.
--23T22:: Dropping triggers...
--23T22:: Dropped triggers OK.
Successfully altered `zhangtest01`.`zhang_test`.
4.4. 添加表索引
[root@docker01 ~]# pt-online-schema-change -h172.16.1. -uzhang06 -pzhang06 --nocheck-replication-filters --charset=UTF8 --max-load="Threads_running=1000" --alter "ADD INDEX index_name(name)" D=zhangtest01,t=zhang_test --execute # ADD INDEX indexName(columnName)
No slaves found. See --recursion-method if host zhang has slaves.
Not checking slave lag because no slaves were found and --check-slave-lag was not specified.
Operation, tries, wait:
analyze_table, ,
copy_rows, , 0.25
create_triggers, ,
drop_triggers, ,
swap_tables, ,
update_foreign_keys, ,
Altering `zhangtest01`.`zhang_test`...
Creating new table...
Created new table zhangtest01._zhang_test_new OK.
Altering new table...
Altered `zhangtest01`.`_zhang_test_new` OK.
--23T22:: Creating triggers...
--23T22:: Created triggers OK.
--23T22:: Copying approximately rows...
--23T22:: Copied rows OK.
--23T22:: Swapping tables...
--23T22:: Swapped original and new tables OK.
--23T22:: Dropping old table...
--23T22:: Dropped old table `zhangtest01`.`__zhang_test_old` OK.
--23T22:: Dropping triggers...
--23T22:: Dropped triggers OK.
Successfully altered `zhangtest01`.`zhang_test`.
4.4.1. 修改后的表结构
CREATE TABLE `zhang_test` (
`id` int() NOT NULL,
`uuid` int() DEFAULT NULL,
`name` varchar() NOT NULL,
`address` varchar() DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `index_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4.5. 删除表索引
[root@docker01 ~]# pt-online-schema-change -h172.16.1. -uzhang06 -pzhang06 --nocheck-replication-filters --charset=UTF8 --max-load="Threads_running=1000" --alter "DROP INDEX index_name" D=zhangtest01,t=zhang_test --execute # DROP INDEX indexName
No slaves found. See --recursion-method if host zhang has slaves.
Not checking slave lag because no slaves were found and --check-slave-lag was not specified.
Operation, tries, wait:
analyze_table, ,
copy_rows, , 0.25
create_triggers, ,
drop_triggers, ,
swap_tables, ,
update_foreign_keys, ,
Altering `zhangtest01`.`zhang_test`...
Creating new table...
Created new table zhangtest01._zhang_test_new OK.
Altering new table...
Altered `zhangtest01`.`_zhang_test_new` OK.
--23T22:: Creating triggers...
--23T22:: Created triggers OK.
--23T22:: Copying approximately rows...
--23T22:: Copied rows OK.
--23T22:: Swapping tables...
--23T22:: Swapped original and new tables OK.
--23T22:: Dropping old table...
--23T22:: Dropped old table `zhangtest01`.`__zhang_test_old` OK.
--23T22:: Dropping triggers...
--23T22:: Dropped triggers OK.
Successfully altered `zhangtest01`.`zhang_test`.
4.6. 添加唯一索引
##### 注意:确保字段中数据的唯一性,不然会丢失数据
[root@docker01 ~]# pt-online-schema-change -h172.16.1. -uzhang06 -pzhang06 --nocheck-replication-filters --nocheck-unique-key-change --charset=UTF8 --max-load="Threads_running=1000" --alter "ADD UNIQUE uniq_index_name(name)" D=zhangtest01,t=zhang_test --execute # ADD UNIQUE uniqueName(columnName)
No slaves found. See --recursion-method if host zhang has slaves.
Not checking slave lag because no slaves were found and --check-slave-lag was not specified.
Operation, tries, wait:
analyze_table, ,
copy_rows, , 0.25
create_triggers, ,
drop_triggers, ,
swap_tables, ,
update_foreign_keys, ,
Altering `zhangtest01`.`zhang_test`...
Creating new table...
Created new table zhangtest01._zhang_test_new OK.
Altering new table...
Altered `zhangtest01`.`_zhang_test_new` OK.
--23T22:: Creating triggers...
--23T22:: Created triggers OK.
--23T22:: Copying approximately rows...
Copying `zhangtest01`.`zhang_test`: % : remain
--23T22:: Copied rows OK.
--23T22:: Swapping tables...
--23T22:: Swapped original and new tables OK.
--23T22:: Dropping old table...
--23T22:: Dropped old table `zhangtest01`.`__zhang_test_old` OK.
--23T22:: Dropping triggers...
--23T22:: Dropped triggers OK.
Successfully altered `zhangtest01`.`zhang_test`.
4.6.1. 修改后的表结构
CREATE TABLE `zhang_test` (
`id` int() NOT NULL,
`uuid` int() DEFAULT NULL,
`name` varchar() NOT NULL,
`address` varchar() DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_index_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4.6.2. 命令参数说明
--nocheck-unique-key-change
添加该参数选项,才可以添加唯一索引
4.7. 删除唯一索引
##### 与删除普通索引一样
[root@docker01 ~]# pt-online-schema-change -h172.16.1. -uzhang06 -pzhang06 --nocheck-replication-filters --charset=UTF8 --max-load="Threads_running=1000" --alter "DROP INDEX uniq_index_name" D=zhangtest01,t=zhang_test --execute # DROP UNIQUE uniqueName
No slaves found. See --recursion-method if host zhang has slaves.
Not checking slave lag because no slaves were found and --check-slave-lag was not specified.
Operation, tries, wait:
analyze_table, ,
copy_rows, , 0.25
create_triggers, ,
drop_triggers, ,
swap_tables, ,
update_foreign_keys, ,
Altering `zhangtest01`.`zhang_test`...
Creating new table...
Created new table zhangtest01._zhang_test_new OK.
Altering new table...
Altered `zhangtest01`.`_zhang_test_new` OK.
--23T22:: Creating triggers...
--23T22:: Created triggers OK.
--23T22:: Copying approximately rows...
--23T22:: Copied rows OK.
--23T22:: Swapping tables...
--23T22:: Swapped original and new tables OK.
--23T22:: Dropping old table...
--23T22:: Dropped old table `zhangtest01`.`__zhang_test_old` OK.
--23T22:: Dropping triggers...
--23T22:: Dropped triggers OK.
Successfully altered `zhangtest01`.`zhang_test`.
4.8. 删除表主键
4.8.1. 重要说明
对主键修改的步骤:
、保证有一个唯一索引【如果没有那么就添加一个唯一索引】
、删除原主键
、添加新主键
、删除之前的唯一索引【可选】
原因如下:
The new table `zhangtest01`.`_zhang_test_new` does not have a PRIMARY KEY or a unique index which is required for the DELETE trigger.
[root@docker01 ~]# pt-online-schema-change -h172.16.1. -uzhang06 -pzhang06 --nocheck-replication-filters --nocheck-alter --charset=UTF8 --max-load="Threads_running=1000" --alter "DROP PRIMARY KEY" D=zhangtest01,t=zhang_test --execute
No slaves found. See --recursion-method if host zhang has slaves.
Not checking slave lag because no slaves were found and --check-slave-lag was not specified.
Operation, tries, wait:
analyze_table, ,
copy_rows, , 0.25
create_triggers, ,
drop_triggers, ,
swap_tables, ,
update_foreign_keys, ,
Altering `zhangtest01`.`zhang_test`...
Creating new table...
Created new table zhangtest01._zhang_test_new OK.
Altering new table...
Altered `zhangtest01`.`_zhang_test_new` OK.
--23T22:: Creating triggers...
--23T22:: Created triggers OK.
--23T22:: Copying approximately rows...
--23T22:: Copied rows OK.
--23T22:: Swapping tables...
--23T22:: Swapped original and new tables OK.
--23T22:: Dropping old table...
--23T22:: Dropped old table `zhangtest01`.`__zhang_test_old` OK.
--23T22:: Dropping triggers...
--23T22:: Dropped triggers OK.
Successfully altered `zhangtest01`.`zhang_test`.
4.8.2. 修改后的表结构【没有主键了,但有唯一索引】
CREATE TABLE `zhang_test` (
`id` int() NOT NULL,
`uuid` int() DEFAULT NULL,
`name` varchar() NOT NULL,
`address` varchar() DEFAULT NULL,
UNIQUE KEY `uniq_index_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4.8.3. 命令参数说明
--[no]check-alter
解析-ALTER指定并尝试警告可能的意外行为(默认为“是”)
如果没有改选项,修改会失败
4.9. 添加表主键
[root@docker01 ~]# pt-online-schema-change -h172.16.1. -uzhang06 -pzhang06 --nocheck-replication-filters --nocheck-alter --charset=UTF8 --max-load="Threads_running=1000" --alter "ADD PRIMARY KEY (id)" D=zhangtest01,t=zhang_test --execute
No slaves found. See --recursion-method if host zhang has slaves.
Not checking slave lag because no slaves were found and --check-slave-lag was not specified.
Operation, tries, wait:
analyze_table, ,
copy_rows, , 0.25
create_triggers, ,
drop_triggers, ,
swap_tables, ,
update_foreign_keys, ,
Altering `zhangtest01`.`zhang_test`...
Creating new table...
Created new table zhangtest01._zhang_test_new OK.
Altering new table...
Altered `zhangtest01`.`_zhang_test_new` OK.
--23T22:: Creating triggers...
--23T22:: Created triggers OK.
--23T22:: Copying approximately rows...
--23T22:: Copied rows OK.
--23T22:: Swapping tables...
--23T22:: Swapped original and new tables OK.
--23T22:: Dropping old table...
--23T22:: Dropped old table `zhangtest01`.`__zhang_test_old` OK.
--23T22:: Dropping triggers...
--23T22:: Dropped triggers OK.
Successfully altered `zhangtest01`.`zhang_test`.
4.9.1. 修改后的表结构
CREATE TABLE `zhang_test` (
`id` int() NOT NULL,
`uuid` int() DEFAULT NULL,
`name` varchar() NOT NULL,
`address` varchar() DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_index_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4.10. 多个操作合一
[root@docker01 ~]# pt-online-schema-change -h172.16.1. -uzhang06 -pzhang06 --nocheck-replication-filters --charset=UTF8 --max-load="Threads_running=1000" --alter "add last_name varchar(20) NOT NULL DEFAULT '' COMMENT '姓名' after name, ADD INDEX index_address(address), add birthday date COMMENT '生日'" D=zhangtest01,t=zhang_test --execute
No slaves found. See --recursion-method if host zhang has slaves.
Not checking slave lag because no slaves were found and --check-slave-lag was not specified.
Operation, tries, wait:
analyze_table, ,
copy_rows, , 0.25
create_triggers, ,
drop_triggers, ,
swap_tables, ,
update_foreign_keys, ,
Altering `zhangtest01`.`zhang_test`...
Creating new table...
Created new table zhangtest01._zhang_test_new OK.
Altering new table...
Altered `zhangtest01`.`_zhang_test_new` OK.
--23T22:: Creating triggers...
--23T22:: Created triggers OK.
--23T22:: Copying approximately rows...
--23T22:: Copied rows OK.
--23T22:: Swapping tables...
--23T22:: Swapped original and new tables OK.
--23T22:: Dropping old table...
--23T22:: Dropped old table `zhangtest01`.`__zhang_test_old` OK.
--23T22:: Dropping triggers...
--23T22:: Dropped triggers OK.
Successfully altered `zhangtest01`.`zhang_test`.
4.10.1. 修改前的表结构
CREATE TABLE `zhang_test` (
`id` int() NOT NULL,
`uuid` int() DEFAULT NULL,
`name` varchar() NOT NULL,
`address` varchar() DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_index_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4.10.2. 修改后的表结构
CREATE TABLE `zhang_test` (
`id` int() NOT NULL,
`uuid` int() DEFAULT NULL,
`name` varchar() NOT NULL,
`last_name` varchar() NOT NULL DEFAULT '' COMMENT '姓名',
`address` varchar() DEFAULT NULL,
`birthday` date DEFAULT NULL COMMENT '生日',
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_index_name` (`name`),
KEY `index_address` (`address`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
5. 附录:
5.1. 参考文章
1、linux下percona-toolkit工具包的安装和使用(超详细版)
percona-toolkit大表操作DDL使用的更多相关文章
- MySQL数据表操作(DDL)
		
一.创建数据表 语法:create table 表名称(字段 字段类型 [字段属性],字段 字段类型 [字段属性],...) [表选项]; 表选项:数据表的属性,一般包括engine.charset. ...
 - SqlServer新建表操作DDL
		
创建新表:1,五要素 2,not null 3,默认值 4,字段注释,表名称 5,索引 6,指定约束名称 -- ------------------------------ Table structu ...
 - MySQL在线大表DDL操作
		
在线大表DDL操作的方法: 1.主从架构轮询修改 需要注意: a.主库会话级别的记录binglog的参数关闭 b.500\502错误异常捕捉 c.检查备库的second behind master是否 ...
 - MySQL在线大表DDL操作 (转)
		
http://www.cnblogs.com/janehoo/p/5382474.html 线大表DDL操作的方法: 1.主从架构轮询修改 需要注意: a.主库会话级别的记录binglog的参数关闭 ...
 - mysql大表在不停机的情况下增加字段该怎么处理
		
MySQL中给一张千万甚至更大量级的表添加字段一直是比较头疼的问题,遇到此情况通常该如果处理?本文通过常见的三种场景进行案例说明. 1. 环境准备 数据库版本: 5.7.25-28(Percona 分 ...
 - MySQL 大表在线DML神器--pt-online-schema-change
		
一个朋友问我在线对大表进行ddl操作,如何做能尽量避免主从延迟以及不影响在线dml操作呢?我想到一个开源的pt-online-schema-change工具,测试了吧,效果还可以. pt-online ...
 - 如何drop大表的中不用的字段 set unused column
		
转自 http://foxmile.blog.163.com/blog/static/81169805201143191957184/ 我 们要删除表中不用的字段,如果直接drop column,对于 ...
 - MySQL 上亿大表优化实践
		
目录 背景 分析 select xxx_record语句 delete xxx_record语句 测试 实施 索引优化后 delete大表优化为小批量删除 总结 背景 XX实例(一主一从)xxx告警中 ...
 - MySQL8.0大表秒加字段,是真的吗?
		
前言: 很早就听说 MySQL8.0 支持快速加列,可以实现大表秒级加字段.笔者自己本地也有8.0环境,但一直未进行测试.本篇文章我们就一起来看下 MySQL8.0 快速加列到底要如何操作. 1.了解 ...
 
随机推荐
- Android应用系列:完美运行GIF格式的ImageView(附源码)
			
前言 我们都知道ImageView是不能完美加载Gif格式的图片,如果我们在ImageView中src指定的资源是gif格式的话,我们将会惊喜的发觉画面永远停留在第一帧,也就是不会有动画效果.当然,经 ...
 - C#效率优化(3)-- 使用foreach时避免装箱
			
Introduction: ※本文不是在描述旧版本Unity中mono编译器导致的foreach语句额外装箱错误 博主是一名Unity 3D游戏开发者,游戏使用C#+lua开发,最近在优化C#代码时, ...
 - 使用commit方式构建具有sshd服务的centos镜像
			
一般我们是通过SSH服务来管理服务器的,但是现在很多Docker镜像不带SSH服务,那我们该如何来管理这些容器呢?现在我们通常使用attach和nsenter工具.但是都无法解决远程管理容器的问题,当 ...
 - Jenkins持续集成学习-Windows环境进行.Net开发4
			
目录 Jenkins持续集成学习-Windows环境进行.Net开发4 目录 前言 目标 Github持续集成 提交代码到Github 从Github更新代码 git上显示构建状态 自动触发构建 Gi ...
 - Linux 强制安装 rpm 包
			
Linux 正常安装 rpm 的命令是: rpm -ivh xxx.rpm 重复安装时需加属性: 软件包重复安装将会失败,若仍需要安装必须加 --replacepkgs 属性 软件包的某个文件已在安装 ...
 - Yapi学习笔记
			
. 下载源码:https://github.com/YMFE/yapi 2. 安装MongoDB数据库,下载地址:链接:https://pan.baidu.com/s/1bZKlcy 密码:ah3n ...
 - 一道生成不重复随机数字的C#笔试编程题
			
当时写在纸上的程序没有验证输入,出面试公司没多久就突然想起来这点了,囧啊! 不过当时笔试的时候想到写异常处理了. 回来上机整理了一下程序,才发现原来还会用到递归的. 当时面试官边说边出的题,问他数字是 ...
 - [转]使用@Test 也可以从spring容器中获取依赖注入
			
转自:http://blog.csdn.net/u010987379/article/details/52091790 @RunWith(SpringJUnit4ClassRunner.class) ...
 - 2、买卖股票的最佳时机 II
			
2.买卖股票的最佳时机 II 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能 ...
 - Matlab forward Euler demo
			
% forward Euler demo % take two steps in the solution of % dy/dt = y, y(0) = 1 % exact solution is y ...