操作系统与安装数据库
1 | [root@zhang ~]# cat /etc/redhat-release # 也可以使用其他版本 |
数据库准备工作
数据库字符集修改
数据库版本信息
1 | MariaDB [(none)]> select version(); |
支持哪些字符集
1 | MariaDB [(none)]> show CHARACTER SET; |
当前数据库默认字符集
1 | MariaDB [(none)]> show variables like '%character_set%'; |
修改字符集为utf8
1 | [root@zhang ~]# vim /etc/my.cnf |
数据库建库、授权操作
创建数据库
1 | MariaDB [(none)]> create database zhangtest01; |
授权
1 | MariaDB [(none)]> grant all on zhangtest01.* to zhang01@'%' identified by 'zhang01'; # 错误授权【大表操作时会失败】 |
数据库建表、插入数据
建表语句
1 | CREATE TABLE `zhang_test` ( |
插入语句示例
1 | INSERT INTO `zhangtest01`.`zhang_test` (`id`, `name`, `address`) VALUES ('0', 'test0', '中国XX省XX市0'); |
对应的批量SQL语句脚本
1 | [root@zhang database]# vim batch_insert.sh |
执行脚本将插入数据放到一个文本中,之后导入数据库即可
percona-toolkit安装【可以在另外一台机器】
1 | # 官网下载 |
大表DDL操作
添加表字段【并保存原始表】
1 | [root@docker01 tools]# pt-online-schema-change -h172.16.1.14 -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 # 语句 |
修改后的表结构
1 | CREATE TABLE `zhang_test` ( |
命令参数说明
1 | --nocheck-replication-filters |
修改表字段
1 | [root@docker01 ~]# pt-online-schema-change -h172.16.1.14 -uzhang06 -pzhang06 --nocheck-replication-filters --charset=UTF8 --max-load="Threads_running=1000" --alter "MODIFY uuid varchar(80)" D=zhangtest01,t=zhang_test --execute |
删除表字段
1 | [root@docker01 ~]# pt-online-schema-change -h172.16.1.14 -uzhang06 -pzhang06 --nocheck-replication-filters --charset=UTF8 --max-load="Threads_running=1000" --alter "DROP uuid" D=zhangtest01,t=zhang_test --execute |
添加表索引
1 | [root@docker01 ~]# pt-online-schema-change -h172.16.1.14 -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) |
修改后的表结构
1 | CREATE TABLE `zhang_test` ( |
删除表索引
1 | [root@docker01 ~]# pt-online-schema-change -h172.16.1.14 -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 |
添加唯一索引
1 | ##### 注意:确保字段中数据的唯一性,不然会丢失数据 |
修改后的表结构
1 | CREATE TABLE `zhang_test` ( |
命令参数说明
1 | --nocheck-unique-key-change |
删除唯一索引
1 | ##### 与删除普通索引一样 |
删除表主键
重要说明
1 | 对主键修改的步骤: |
1 | [root@docker01 ~]# pt-online-schema-change -h172.16.1.14 -uzhang06 -pzhang06 --nocheck-replication-filters --nocheck-alter --charset=UTF8 --max-load="Threads_running=1000" --alter "DROP PRIMARY KEY" D=zhangtest01,t=zhang_test --execute |
修改后的表结构【没有主键了,但有唯一索引】
1 | CREATE TABLE `zhang_test` ( |
命令参数说明
1 | --[no]check-alter |
添加表主键
1 | [root@docker01 ~]# pt-online-schema-change -h172.16.1.14 -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 |
修改后的表结构
1 | CREATE TABLE `zhang_test` ( |
多个操作合并
1 | [root@docker01 ~]# pt-online-schema-change -h172.16.1.14 -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 |
修改前的表结构
1 | CREATE TABLE `zhang_test` ( |
修改后的表结构
1 | CREATE TABLE `zhang_test` ( |