MySQL如何妥善更改大表表结构(Alter table structure of a single column

MySQL如何妥善更改大表表结构(Alter table structure of a single column

http://blog.sina.com.cn/s/blog_445e807b0101egpf.html

在网上搜到的一段很有帮助的三段脚本,贴出来供参考,以飨读者,做个笔记:
#
#  Script 1
#  Alter table structure of a single column of a large table
#
CREATE TABLE WorkingTableNew LIKE WorkingTable;
ALTER TABLE WorkingTableNew MODIFY BigColumn VARCHAR(50);
INSERT INTO WorkingTableNew SELECT * FROM WorkingTable;
ALTER TABLE WorkingTable RENAME WorkingTableOld;
ALTER TABLE WorkingTableNew RENAME WorkingTable;
DROP TABLE WorkingTableOld;
You can perform this on all slaves. What about the master ??? How do you prevent this \
from replicating to the slaves. Simple: Don‘t send the SQL \into the master‘s binary logs.\
 Simply shut off binary logging in the session before doing the ALTER TABLE stuff:
#
#  Script 2
#  Alter table structure of a single column of a large table
#  while preventing it from replicating to slaves
#
SET SQL_LOG_BIN = 0;
CREATE TABLE WorkingTableNew LIKE WorkingTable;
ALTER TABLE WorkingTableNew MODIFY BigColumn VARCHAR(50);
INSERT INTO WorkingTableNew SELECT SQL_NO_CACHE * FROM WorkingTable;
ALTER TABLE WorkingTable RENAME WorkingTableOld;
ALTER TABLE WorkingTableNew RENAME WorkingTable;
DROP TABLE WorkingTableOld;
But wait !!! What about any new data that comes in while processing these \
commands ??? Renaming the table in the beginning of the operation should do the trick. \
Let alter this code a little to prevent entering new data in that respect:
#
#  Script 3
#  Alter table structure of a single column of a large table
#  while preventing it from replicating to slaves
#  and preventing new data from entering into the old table
#
SET SQL_LOG_BIN = 0;
ALTER TABLE WorkingTable RENAME WorkingTableOld;
CREATE TABLE WorkingTableNew LIKE WorkingTableOld;
ALTER TABLE WorkingTableNew MODIFY BigColumn VARCHAR(50);
INSERT INTO WorkingTableNew SELECT SQL_NO_CACHE * FROM WorkingTableOld;
ALTER TABLE WorkingTableNew RENAME WorkingTable;
DROP TABLE WorkingTableOld;
Script 1 can be executed on any slave that do not have binary logs enabled
Script 2 can be executed on any slave that does have binary logs enabled
Script 3 can be executed on a master or anywhere else

时间: 2024-10-12 19:53:22

MySQL如何妥善更改大表表结构(Alter table structure of a single column的相关文章

MySQL5.6 ALTER TABLE 分析和测试

在MySQL5.5和之前版本,在运行的生产环境对大表(超过数百万纪录)执行Alter操作是一件很困难的事情.因为将重建表和锁表,影响用户者的使用.因此知道Alter操作何时结束对我们是非常重要的.甚至当执行Create index的时候.如果启用了 fast_index_creation,则不会重建表,但是仍然会锁表.fast_index_creation特性引进在MySQL5.5和更高版本里.在MySQL5.1中如果使用了innodb plugin则也可以使用该特性. 自从MySQL5.6开始

[转]ALTER TABLE的用法 增多列、删除列、改列名、改列约束、改表名

[转]ALTER TABLE的用法 增加列.删除列.改列名.改列约束.改表名 ALTER TABLE 名称ALTER TABLE - 更改表属性语法ALTER TABLE table [ * ]      ADD [ COLUMN ] column typeALTER TABLE table [ * ]      ALTER [ COLUMN ] column { SET DEFAULT value | DROP DEFAULT }ALTER TABLE table [ * ]      REN

[Hive - LanguageManual] Alter Table/Partition/Column

Alter Table/Partition/Column Alter Table Rename Table Alter Table Properties Alter Table Comment Add SerDe Properties Alter Table Storage Properties Additional Alter Table Statements Alter Partition Add Partitions Dynamic Partitions Rename Partition

一次难忘的在线大表表结构修改

背景介绍: 服务器 252GMem 40CPU SSD盘 小编所使用的mysql版本是5.6.25 mysql> select count(*) from  CISXX_DATA_XXX;+-----------+| count(*)  |+-----------+| 110908162 |+-----------+1 row in set (1 min 27.38 sec) mysql> desc  CISXX_DATA_XXX; … 82 rows in set (0.01 sec) 第一

在线修改大表结构pt-online-schema-change

使用场景 在线数据库的维护中,总会涉及到研发修改表结构的情况,修改一些小表影响很小,而修改大表时,往往影响业务的正常运转,如表数据量超过500W,1000W,甚至过亿时 在线修改大表的可能影响 在线修改大表的表结构执行时间往往不可预估,一般时间较长 由于修改表结构是表级锁,因此在修改表结构时,影响表写入操作 如果长时间的修改表结构,中途修改失败,由于修改表结构是一个事务,因此失败后会还原表结构,在这个过程中表都是锁着不可写入 修改大表结构容易导致数据库CPU.IO等性能消耗,使MySQL服务器性

pt-online-schema-change工具使用教程(在线修改大表结构)

percona-toolkit中pt-online-schema-change工具安装和使用 pt-online-schema-change介绍 使用场景:在线修改大表结构 在数据库的维护中,总会涉及到生产环境上修改表结构的情况,修改一些小表影响很小,而修改大表时,往往影响业务的正常运转,如表数据量超过500W,1000W,甚至过亿时 在线修改大表的可能影响(1)在线修改大表的表结构执行时间往往不可预估,一般时间较长(2)由于修改表结构是表级锁,因此在修改表结构时,影响表写入操作(3)如果长时间

[MySQL Reference Manual] 23 Performance Schema结构

23 MySQL Performance Schema 23 MySQL Performance Schema.. 1 23.1 性能框架快速启动... 3 23.2 性能框架配置... 5 23.2.1 性能框架编译时配置... 5 23.2.2 性能框架启动配置... 6 23.2.3 启动时性能框架配置... 8 23.2.3.1 性能架构事件定时... 8 23.2.3.2 性能框架事件过滤... 9 23.2.3.3 事件预过滤... 10 23.2.3.4命名记录点或者消费者的过滤.

MySQL优化四(优化表结构)

body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-top: 10px; padding-bottom: 10px; background-color: white; padding: 30px } body>*:first-child { margin-top: 0 !important } body>*:last-child { margin-bottom:

MySQL数据库如何解决大数据量存储问题

利用MySQL数据库如何解决大数据量存储问题? 各位高手您们好,我最近接手公司里一个比较棘手的问题,关于如何利用MySQL存储大数据量的问题,主要是数据库中的两张历史数据表,一张模拟量历史数据和一张开关量历史数据表,这两张表字段设计的很简单(OrderNo,Value,DataTime).基本上每张表每天可以增加几千万条数据,我想问如何存储数据才能不影响检索速度呢?需不需要换oracle数据库呢?因为我是数据库方面的新手,希望可以说的详细一点,万分感谢!!?-0-#暂时可以先考虑用infobri