mysql大表重定義

2021-07-25 17:33:49 字數 1460 閱讀 3582

mysql5.6以後的版本,小表直接操作表結構變更即可,如果是大表,那麼就避免直接操作,就要使用pt-online-schema-change

工作原理:

用新錶代替原表,預設動作是將原表drop掉。在copy資料的過程中,任何在原表的更新操作都會更新到新錶,因為這個工具在會在原表上建立觸發器,

觸發器會將在原表上更新的內容更新到新錶。如果表中已經定義了觸發器這個工具就不能工作了。

注意點:

1、操作的表必須有主鍵或唯一索引否則報錯。

2、如果表有外來鍵,除非使用 --alter-foreign-keys-method 指定特定的值,否則工具不予執行。

3、當業務量較大時,修改操作會等待沒有資料修改後,執行最後的rename操作。因此,在修改表結構時,應該盡量選擇在業務相對空閒時,至少修改表上的資料操作較低時,執行較為妥當。

4、由於可能存在一定的風險,在操作之前,建議對資料表進行備份,可以使得操作更安全、可靠。

5、當是主從環境,不在乎從的延遲,則需要加--recursion-method=none引數。當需要盡可能的對服務產生小的影響,則需要加上--max-load引數。

-- 新增列

[root@centos7 pscripts]# pt-online-schema-change -uroot -p123456 --alter='add column dt datetime' --execute d=test1,t=t1

-- 修改列型別

[root@centos7 pscripts]# pt-online-schema-change -uroot -p123456 --alter='modify column dt date' --execute d=test1,t=t1

-- 修改列名 謹慎操作

[root@centos7 pscripts]# pt-online-schema-change -uroot -p123456 --alter='change column dt dt1 date' --execute d=test1,t=t1 --no-check-alter

-- 刪除列

[root@centos7 pscripts]# pt-online-schema-change -uroot -p123456 --alter='drop column  dt1 ' --execute d=test1,t=t1

-- 新增索引  show index from t1 \g;

[root@centos7 pscripts]# pt-online-schema-change -uroot -p123456 --alter='add key i_name(name) ' --execute d=test1,t=t1

-- 刪除索引

[root@centos7 pscripts]# pt-online-schema-change -uroot -p123456 --alter='drop index i_name ' --execute d=test1,t=t1

mysql 表定義 MySQL的表定義語法

mysql 資料庫mysql的表定義語法 表定義只有成功建立資料庫後,才能建立資料表,資料表是字段的集合,在表中資料按行和列的格式儲存 建立表mysql 使用 create table 建立表。其中有多個選擇,主要由表建立定義 create definition 表選項定義 table option...

mysql表結構定義 mysql表定義語法詳細介紹

首先我們都知道只有成功建立資料庫後,才能建立資料表,資料表是字段的集合,在表中資料按行和列的格式儲存。建立表mysql 使用 create table 建立表。其中有多個選擇,主要由表建立定義 create definition 表選項定義 table options 和區分選項 partition...

mysql 大表 驅動 MySQL小表驅動大表

在了解之前要先了解對應語法 in 與 exist。in後的括號的表示式結果要求先輸出一列字段。與之前的搜尋字段匹配,匹配到相同則返回對應行。mysql的執行順序是先執行子查詢,然後執行主查詢,用子查詢的結果按條匹配主查詢。exist後的括號裡則無輸出要求,exist判斷後面的結果集中有沒有行,有行則...