MySQL線上新增欄位的幾種方案介紹
方案1:業務低峰期進行alter table操作:
例如,凌晨1點或2點進行:
mysql>ALTER TABLE `test` ADD `new_column` int not null default 0 comment '文字長度';
方案2:建立臨時表、加欄位、插入舊資料,增量資料插入和重新命名錶名
1). 建立臨時表
mysql>create table test_tmp like test;
2). 在臨時表上新增欄位
mysql>ALTER TABLE `test_tmp` ADD `new_column` int not null default 0 comment '文字長度';
3). 向臨時表裡插入舊資料
mysql>INSERT INTO test_tmp(id,name) (SELECT id,name from test);
4). 增量資料插入:
mysql>INSERT INTO test_tmp(id,name) (SELECT id,name from test WHERE `id` > (SELECT MAX(`id`) from `test_tmp`));
5). 重新命名錶名:
mysql>rename table test TO test_2018;
mysql>rename table test_tmp TO test;
方案3:用第三方開源工具實現,具體實現步驟看連結:
oak-online-alter-table:
%E5%B7%A5%E5%85%B7/
pt-osc:
gh-ost:
http://www.cnblogs.com/jiangwenju/p/5846743.html
facebook osc(Online Schema Change for MySQL):
https://github.com/facebookincubator/OnlineSchemaChange
方案4:在從庫進行新增欄位操作,然後進行mysql主從切換
注意事項:主從複製日誌格式如果為row格式,新增的新列必須是在表的最後。
例如,凌晨1點或2點進行:
mysql>ALTER TABLE `test` ADD `new_column` int not null default 0 comment '文字長度';
方案2:建立臨時表、加欄位、插入舊資料,增量資料插入和重新命名錶名
1). 建立臨時表
mysql>create table test_tmp like test;
2). 在臨時表上新增欄位
mysql>ALTER TABLE `test_tmp` ADD `new_column` int not null default 0 comment '文字長度';
3). 向臨時表裡插入舊資料
mysql>INSERT INTO test_tmp(id,name) (SELECT id,name from test);
4). 增量資料插入:
mysql>INSERT INTO test_tmp(id,name) (SELECT id,name from test WHERE `id` > (SELECT MAX(`id`) from `test_tmp`));
5). 重新命名錶名:
mysql>rename table test TO test_2018;
mysql>rename table test_tmp TO test;
方案3:用第三方開源工具實現,具體實現步驟看連結:
oak-online-alter-table:
%E5%B7%A5%E5%85%B7/
pt-osc:
gh-ost:
http://www.cnblogs.com/jiangwenju/p/5846743.html
facebook osc(Online Schema Change for MySQL):
https://github.com/facebookincubator/OnlineSchemaChange
方案4:在從庫進行新增欄位操作,然後進行mysql主從切換
注意事項:主從複製日誌格式如果為row格式,新增的新列必須是在表的最後。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2153012/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Mysql多欄位大表的幾種優化方法MySql優化
- 線上直播原始碼,flutter 溢位幾種佈局方案原始碼Flutter
- MYSQL SET型別欄位的SQL操作知識介紹MySql型別
- MySQL表、欄位、庫的字符集修改方法介紹MySql
- MySQL欄位新增註釋,但不改變欄位的型別MySql型別
- 介紹幾種MySQL常見的圖形化工具MySql
- 簡單介紹MySQL索引失效的幾種情況MySql索引
- MongoDB Oplog中的欄位介紹MongoDB
- MySQL-新增列,新增或修改欄位的註釋MySql
- MySQL 8.0 新增特性介紹MySql
- 為 MySQL 的查詢結果新增排名欄位MySql
- MySQL高可用方案介紹MySql
- MySQL和Oracle的新增欄位的處理差別MySqlOracle
- Oracle11g新特性 - 快速線上新增not null欄位OracleNull
- Oracle-欄位的新增Oracle
- 簡單介紹2種Java讀取Oracle大欄位資料(CLOB)的方法JavaOracle
- 幾種新DevOps工具介紹dev
- oracle複合索引介紹(多欄位索引)Oracle索引
- 介紹幾種提高mysql的效能和對於sql的優化的方法MySql優化
- HTML中使用CSS的幾種方式介紹HTMLCSS
- 簡單介紹mysql中資料庫覆蓋匯入的幾種方式MySql資料庫
- MySQL中各種欄位的取值範圍(轉)MySql
- MySQL高可用方案MHA介紹MySql
- MySQL保留幾位小數的4種方法MySql
- MySQL 分割槽表 partition線上修改分割槽欄位MySql
- mysql 5.7 新特性中線上in-place 修改欄位的大小MySql
- SQL新增表欄位SQL
- 介紹幾種List集合分批操作的工具
- Java中幾種常用的RPC框架介紹JavaRPC框架
- 【整理】組建MySQL叢集的幾種方案MySql
- MySQL為欄位新增預設時間(插入時間)MySql
- MySQL中的幾類日誌檔案介紹MySql
- mysql建立表的時候對欄位和表新增COMMENTMySql
- 新增欄位對SQL的影響SQL
- Oracle建立自增欄位方法-ORACLE SEQUENCE的簡單介紹Oracle
- js宣告陣列的幾種方式簡單介紹JS陣列
- 【MySql】mysql 欄位個數的限制MySql
- MySQL檢視版本號的五種方式介紹MySql