文中案例說明需要在大表中新增一個欄位group_id,表中有個1千萬的資料量,而且有幾個索引欄位,如果直接在客戶端通過sql ALTER TABLE h_app_message ADD group_id bigint(20) 會
2021-08-09 05:36:47
文中案例說明
需要在大表中新增一個欄位group_id,表中有個1千萬的資料量,而且有幾個索引欄位,如果直接在客戶端通過sql ALTER TABLE h_app_message ADD group_id bigint(20) 會造成資料庫卡頓,耗費時間很長,直接影響線上正常使用。
一般對於較大資料量的修改方式,如果線上併發不是很高的情況下是可以手動處理的,方式如下:
我們的處理方式是通過pt-online-schame-change 工具線上修改正式環境的欄位,新增group_id。
此工具的好處:
建議:
在業務低峰期做,將影響降到最低
直接原表修改缺點:
當表的資料量很大的時候,如果直接線上修改表結構,嚴重影響線上環境,而且耗時不可預估
注意:
原理:
無論操作多麼有把握,也要把備份做好(萬一很可怕的)
下載安裝包:
wget https://downloads.percona.com/downloads/percona-toolkit/3.3.1/source/tarball/percona-toolkit-3.3.1.tar.gz
解壓:
tar -xvf percona-toolkit-3.3.1.tar.gz
安裝一些依賴包:
yum install perl-DBIyum install perl-DBD-MySQLyum install perl-Time-HiResyum install perl-IO-Socket-SSLyum -y install perl-Digest-MD5
在解壓包的bin目錄下執行,看是否正常,檢視命令
./pt-online-schema-change --help
1. 新增一個欄位
如果執行失敗,檢查alter語句,如果確認無誤 可以避免檢查 --no-check-alter
./pt-online-schema-change --user=xxxx --password=xxxx --host=xxx.xxx.xxx.xxxx --alter "add column group_id bigint(20) not NULL default '0' comment 'test' " P=30306,D=h_pushcenter,t=h_message --charset=utf8 --no-version-check --print --execute
2. 修改欄位
sql語句:
ALTER TABLE `h_message` MODIFY COLUMN `group_id` int(20) NOT NULL DEFAULT '1';ALTER TABLE `h_message` MODIFY COLUMN `group_id` int(20) NOT NULL DEFAULT '1';
pt命令:
--alter "MODIFY COLUMN group_id int(20) NOT NULL DEFAULT '1'"
3. 修改欄位名
sql語句:
ALTER TABLE `h_message` CHANGE column group_id group_id_0 bigint(20);
pt命令:
--alter "CHANGE group_id group_id_0 bigint(20)"
4. 新增索引
sql語句:
ALTER TABLE `h_message` ADD INDEX h_message_n1(group_id);
pt命令:
--alter "ADD INDEX h_message_n1(group_id)"
Creating new table...CREATE TABLE `h_pushcenter`.`_h_message_new` .....Created new table h_pushcenter._h_message_new OK.
Altering new table...ALTER TABLE `h_pushcenter`.`_h_message_new` add column group_id bigint(20) not NULL default '0' comment 'test'Altered `h_pushcenter`.`_h_message_new` OK.
Creating triggers...Event : DELETEEvent : UPDATEEvent : INSERTCreated triggers OK.
Copying approximately 8187 rows...Copied rows OK.
2021-05-19T10:33:08 Swapping tables...RENAME TABLE `h_pushcenter`.`h_message` TO `h_pushcenter`.`_h_message_old`, `h_pushcenter`.`_h_message_new` TO `h_pushcenter`.`h_message`2021-05-19T10:33:09 Swapped original and new tables OK.2021-05-19T10:33:09 Dropping old table...DROP TABLE IF EXISTS `h_pushcenter`.`_h_message_old`2021-05-19T10:33:09 Dropped old table `h_pushcenter`.`_h_message_old` OK.
2021-05-19T10:33:09 Dropping triggers...DROP TRIGGER IF EXISTS `h_pushcenter`.`pt_osc_h_pushcenter_h_message_del`DROP TRIGGER IF EXISTS `h_pushcenter`.`pt_osc_h_pushcenter_h_message_upd`DROP TRIGGER IF EXISTS `h_pushcenter`.`pt_osc_h_pushcenter_h_message_ins`2021-05-19T10:33:09 Dropped triggers OK.
作者:紀先生
連結:https://juejin.cn/post/6993339537824940046
來源:掘金
相關文章
文中案例說明需要在大表中新增一個欄位group_id,表中有個1千萬的資料量,而且有幾個索引欄位,如果直接在客戶端通過sql ALTER TABLE h_app_message ADD group_id bigint(20) 會
2021-08-09 05:36:47
八月,國內手機市場又將迎來新機「扎堆」釋出的盛況。除了已經發布的摩托羅拉Edge S Pro以外,小米的年度旗艦也是小米首部屏下手機MIX 4也將在8月10日釋出,另外則還有榮耀Magic3
2021-08-09 05:36:37
在過去5年的時間裡,拼多多極速狂奔,已經成長為阿里強有力的競爭對手。2020年底,拼多多年度活躍買家達到了7.884億,超過阿里同期的7.79億,阿里「中國使用者規模最大電商平臺」的身
2021-08-09 05:36:26
如果你是一名司機,你肯定會有一個感覺,如果在你熟悉的路段開車,你會熟練很多,因為你知道哪裡有岔路口,哪裡有人行道等,哪裡有紅綠燈,哪裡可能會有摩托車出現,你會有習慣性的動作保證
2021-08-09 05:36:19
榮耀Magic3系列預定8月12日釋出。在它到來前幾周,它的渲染、實時影象和規格已經洩露到了網際網路。現在,就在釋出前幾天,首批搭載驍龍888+的榮耀Magic 3系列該智慧手機系列已經
2021-08-09 05:36:14
雷鋒網按:距離 Google 第一代 TPU 助力 AlphaGo 打敗李世石已有 5 年,Google TPU 已經更新到第四代。與此同時,資料中心領域的 AI 晶片大熱,在大量投資下湧現了不少新玩家,儘管未
2021-08-09 05:36:04