MySQL Online DDL(下)

本文首發於我的微信公衆號《andyqian》,期待你的關注!

若是你對Java生成pdf感興趣,關注公衆號《andyqian》,回覆 【pdf】,會給你一份福利!mysql

前言

  今天咱們繼續談談MySQL Online DDL,不知道MySQL Online DDL 是什麼的,能夠先回顧前面《淺談MySQL Online DDL (上)》,《淺談MySQL Online DDL(中)》這兩篇文章。sql

Online DDL空間要求

  在執行Online DDL操做時,其實也須要一些空間的,以下:數據庫

  1. 臨時日誌文件空間。該文件主要是執行DDL操做期間,用於保存DML操做數據的(innodb_online_alter_log_max_size)。臨時日誌文件大於指定的最大值時, ALTER TABLE操做會失敗。未提交的DML操做將所有回滾。服務器

  2. 中間表文件的空間,指的是,重建表的,DDL操做期間,會在原始表中建立一個臨時中間表文件,注意的是,這裏不是重建表格,中間表文件的大小可能大於等於原始表大小。微信

  3. 臨時排序文件的空間。重建表的在線DDL操做將臨時排序文件寫入MySQL臨時目錄,該目錄的大小可能大於該數據以及索引的大小總和,若是磁盤可用空間小於該值時,則會致使DDL操做失敗。spa

低成本Online DDL操做

  前面文章說了Online DDL諸多好處,簡直愛不釋手。但目前不是全部的DDL都支持在線操做的,有些DDL操做仍是會影響生產的DML操做,甚至會鎖住整張表。這時咱們就應該理清楚,哪些是低成本操做,哪些高成本操做。設計

下面是經常使用操做不會鎖住表(成本低)的操做:3d

請注意: 這裏指的索引爲二級索引日誌

高成本 Online DDL操做code

下面這些操做,因爲數據會重組,即便是Online DDL操做,其操做也很是昂貴,不建議在生產環境高峯時直接操做。不然會形成大量的等待操做。

Online DDL注意點

  在使用Online DDL操做時,有不少的注意事項,這裏給出幾個比較常見的注意點:

1. 若是是主從複製模式,主服務器執行Online DDL會中止從庫的複製操做,並一直等待主庫的DDL操做後,採會恢復複製操做,也就是說從庫會有延遲現象產生。

2. Online DDL操做不可中斷,或者顯示Online DDL操做的CPU/IO操做佔用率。

3. MySQL5.6以前的版本,執行Online DDL操做會報語法錯誤,例如:

alter table t_base_user modify telephone varchar(50) null comment "",lock=none;

該語句在MySQL5.6及之後的版本中,能正常執行,在5.6版本以前,則直接報語法錯誤。在執行前,必定要檢查本身的MySQL版本(可經過select version();命令查看)。

今日命令

SHOW {DATABASES | SCHEMAS}
    [LIKE 'pattern' | WHERE expr]

命令: show databases;
做用: 顯示當前數據庫服務器上的全部數據庫。
例如:

  1. 顯示全部數據庫

    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | andyqian           |
    | mydata             |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    6 rows in set (0.00 sec)
  2. 過濾指定數據庫

mysql> show databases like "andyqian";
+---------------------+
| Database (andyqian) |
+---------------------+
| andyqian            |
+---------------------+
1 row in set (0.00 sec)

以下圖所示:

應用場景: 在顯示數據庫服務器上的數據庫時,很是有用,和show tables;命令結合起來,很是有用!

小結

  MySQL Online DDL 確實給咱們帶來了很多便利,但我以爲,這能夠作爲前期數據表設計不足或業務變化的一個補充,不該該過分依賴該操做。後期越多的Online DDL操做,說明前期的設計越不足,越值得總結!
(恩,這又是一個被打臉的地方,我本身數據庫表設計時,時常也會比較粗心,忘記這,忘記那的。)到這裏,MySQL Online DDL相關的內容已經所有說完了。下一篇咱們繼續。

 

ps:在文章記錄的時候,有些知識點確實比較欠缺,寫的不深刻,理解也有些誤差,也有很多錯別字。被各類打臉!不過我以爲挺好的,打臉了就記住了,就糾正了。下次就不被打臉了。

恩, 祝你們晚安!

相關閱讀:

淺談MySQL Online DDL(中)

淺談MySQL Online DDL (上)

MySQL事務隔離級別

談談MySQL隱式類型轉換

掃碼關注,一塊兒進步

我的博客: http://www.andyqian.com

相關文章
相關標籤/搜索