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型別
- Go 匿名欄位介紹Go
- MongoDB Oplog中的欄位介紹MongoDB
- 介紹幾種MySQL常見的圖形化工具MySql
- 簡單介紹MySQL索引失效的幾種情況MySql索引
- MySQL欄位新增註釋,但不改變欄位的型別MySql型別
- MySQL 8.0 新增特性介紹MySql
- mysql資料庫新增和修改欄位MySql資料庫
- 幾種新DevOps工具介紹dev
- oracle資料庫透過sqlplus連線的幾種方式介紹Oracle資料庫SQL
- 介紹幾種提高mysql的效能和對於sql的優化的方法MySql優化
- 簡單介紹2種Java讀取Oracle大欄位資料(CLOB)的方法JavaOracle
- Oracle-欄位的新增Oracle
- Java中幾種常用的RPC框架介紹JavaRPC框架
- fastadmin 新增欄位記圖片欄位AST
- oracle複合索引介紹(多欄位索引)Oracle索引
- MySQL保留幾位小數的4種方法MySql
- 簡單介紹mysql中資料庫覆蓋匯入的幾種方式MySql資料庫
- mysql建立表的時候對欄位和表新增COMMENTMySql
- 介紹幾種List集合分批操作的工具
- MySQL為欄位新增預設時間(插入時間)MySql
- nignx 負載均衡的幾種演算法介紹負載演算法
- 批次殺死MySQL連線的幾種方法MySql
- MySQL:count(*) count(欄位) 實現上區別MySql
- MySQL檢視版本號的五種方式介紹MySql
- 線上更改MySQL表結構工具gh-ost的特點介紹MySql
- MySQL連線控制外掛介紹MySql
- mysql二進位制日誌的引數介紹MySql
- 幾種著名的戰略思想設計工具介紹 - Chris
- Java中的幾種Kafka客戶端比較介紹JavaKafka客戶端
- 幾種不常見的DNS解析記錄型別介紹DNS型別
- 介紹一種更方便的代理池實現方案
- webpack 專案接入Vite的通用方案介紹(上)WebVite
- 幾種常見網路抓包方式介紹
- 簡單介紹redis加鎖常用幾種方式Redis
- MySQL 5.6使用pt-online-schema-change線上修改大表欄位長度MySql