欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mysql在線安全變更工具 gh-ost的使用

 更新時間:2025年02月21日 09:32:52   作者:龍大.  
gh-ost是一個用于在線安全地進(jìn)行MySQL數(shù)據(jù)庫表結(jié)構(gòu)變更的工具,它可以在不中斷業(yè)務(wù)的情況下進(jìn)行表結(jié)構(gòu)的修改,具有一定的參考價(jià)值,感興趣的可以了解一下

gh-ost(GitHub Online Schema Translater)是一個用于安全地進(jìn)行 MySQL 數(shù)據(jù)庫表結(jié)構(gòu)變更的工具,專門為在線數(shù)據(jù)庫遷移而設(shè)計(jì)。它的主要優(yōu)點(diǎn)是可以在不中斷業(yè)務(wù)的情況下,不影響數(shù)據(jù)庫的可用性和性能,進(jìn)行表結(jié)構(gòu)的修改。

主要特點(diǎn)

  • 在線遷移gh-ost 允許在高負(fù)載的生產(chǎn)環(huán)境中進(jìn)行表結(jié)構(gòu)的更改,而不需要鎖定表,確保數(shù)據(jù)庫的可用性。

  • 漸進(jìn)式復(fù)制:通過逐步復(fù)制行,gh-ost 可以在針對大量數(shù)據(jù)的情況下,避免短時間內(nèi)的負(fù)載高峰。

  • 安全性:它具備自動回滾功能,如果遷移過程中出現(xiàn)問題,可以安全地回滾到原始狀態(tài)。

  • 編程和操作簡便:工具使用簡單、直觀,與 MySQL 客戶端兼容,支持使用 SQL 語句進(jìn)行表結(jié)構(gòu)的更改。

  • 多種配置選項(xiàng):支持多種選項(xiàng)用于配置操作,例如并行遷移、最大移動速度等。

使用場景

  • 發(fā)布新字段:添加新的列而不影響應(yīng)用的訪問。
  • 修改現(xiàn)有字段類型:安全地改變列的數(shù)據(jù)類型,比如從 VARCHAR 到 TEXT
  • 重命名列:而不影響運(yùn)行中的系統(tǒng)。

基本用法

  • 安裝:可以通過 github 下載可執(zhí)行文件,或使用 Homebrew(在 macOS 上)進(jìn)行安裝。

    brew install gh-ost
    
  • 基本命令
    以下是一個使用 gh-ost 進(jìn)行表結(jié)構(gòu)變更的基本示例:

    gh-ost \
    --max-load=Threads_running=25 \
    --critical-load=Threads_running=1000 \
    --host=127.0.0.1 \
    --user=username \
    --password=your_password \
    --database=your_database \
    --table=your_table \
    --alter="ADD COLUMN new_col INT DEFAULT 0" \
    --execute
    

    這個命令將向 your_table 表中添加一個名為 new_col 的新列,字段類型為 INT,默認(rèn)值為 0。

配置選項(xiàng)

  • --max-load:指定允許的最大負(fù)載。
  • --critical-load:指定觸發(fā)回滾的負(fù)載。
  • --host,--user--password:數(shù)據(jù)庫連接信息。
  • --database,--table:要修改的數(shù)據(jù)庫和表名。
  • --alter:指定 ALTER 語句。
  • --execute:表示執(zhí)行遷移;如果不加這個選項(xiàng),則只進(jìn)行干運(yùn)行(dry run),不實(shí)際執(zhí)行。

gh-ost 數(shù)據(jù)遷移流程

1. 準(zhǔn)備與初始化

  • 安裝與配置:確保你的 MySQL 數(shù)據(jù)庫已啟用二進(jìn)制日志(binlog),并安裝 gh-ost 工具。
  • 參數(shù)設(shè)置:使用合適的參數(shù)啟動 gh-ost,包括連接信息、要遷移的表、變更語句等。

2. 創(chuàng)建臨時表

  • 臨時表的結(jié)構(gòu)gh-ost 首先會創(chuàng)建一個新的臨時表,并按照你的 ALTER 語句的定義,將原有表的結(jié)構(gòu)復(fù)制到臨時表中
  • 開始復(fù)制數(shù)據(jù):臨時表一旦創(chuàng)建,gh-ost 即可開始將原始表中的現(xiàn)有數(shù)據(jù)逐行復(fù)制到臨時表中。

3. 數(shù)據(jù)復(fù)制與變更監(jiān)控

  • 逐行復(fù)制gh-ost 以增量的方式逐行將原始表的數(shù)據(jù)復(fù)制到臨時表,這個復(fù)制過程是漸進(jìn)的,確保了對數(shù)據(jù)庫的負(fù)載最低。

  • 使用事務(wù)隔離:在數(shù)據(jù)復(fù)制的過程中,gh-ost 使用 REPEATABLE READ 事務(wù)隔離級別。這意味著在數(shù)據(jù)復(fù)制期間,原始表的讀取是一個快照,不會受到其他事務(wù)的影響。

  • 監(jiān)控二進(jìn)制日志(binlog)

    • 同時,gh-ost 啟動一個線程,實(shí)時監(jiān)控 MySQL 的 binlog,捕獲所有對原始表的變更(包括 INSERT、UPDATE、DELETE)。
    • 這允許 gh-ost 捕獲到在數(shù)據(jù)復(fù)制過程中對原始表的任何更新。

4. 實(shí)時同步變更

  • 處理變更

    • 任何在數(shù)據(jù)復(fù)制過程中對原始表的變更(例如:INSERT 或 UPDATE)都會被 gh-ost 監(jiān)控到并記錄在 binlog 中。
    • gh-ost 會將這些變化實(shí)時應(yīng)用到臨時表中(不會等到復(fù)制完成后,再處理變更數(shù)據(jù)),確保臨時表里的數(shù)據(jù)與原始表保持同步。
  • 最終更新操作

    • 對于原始表的更新操作,如果在復(fù)制到某一行時,該行數(shù)據(jù)已經(jīng)被修改,gh-ost 將依賴于二進(jìn)制日志來更新臨時表,以阻止出現(xiàn)數(shù)據(jù)不一致的情況。

5. 表切換

  • 完成復(fù)制與更新

    • 一旦所有的數(shù)據(jù)都已復(fù)制,并且所有的二進(jìn)制日志變更均已同步到臨時表,gh-ost 將進(jìn)行最后的檢查。
  • 原子重命名

    • gh-ost 進(jìn)行原子操作,將原始表重命名為備份名稱(例如:your_table_old),然后將臨時表重命名為原始表的名稱(例如:your_table)。
    • 這一過程確保在任何時刻,數(shù)據(jù)庫中的數(shù)據(jù)都是一致的,并且整個遷移操作對外界是透明的。

6. 清理與回滾

  • 刪除舊表:如果配置允許,gh-ost 可以安全刪除舊表,以釋放資源。
  • 回滾機(jī)制
    • 如果在遷移過程中發(fā)生錯誤,gh-ost 會提供回滾功能,能夠安全地將數(shù)據(jù)庫恢復(fù)到原始狀態(tài),從而確保錯誤不會影響數(shù)據(jù)庫的運(yùn)作和數(shù)據(jù)的完整性。

總結(jié)

gh-ost 通過以上步驟實(shí)現(xiàn)了在線、安全、逐漸的 MySQL 數(shù)據(jù)遷移。其設(shè)計(jì)保證了在整個過程中,數(shù)據(jù)的一致性和準(zhǔn)確性,以及對生產(chǎn)系統(tǒng)的影響最小。利用事務(wù)隔離和二進(jìn)制日志捕獲,gh-ost 確保所有變更都在遷移過程中得以有效處理,最終實(shí)現(xiàn)平滑的表結(jié)構(gòu)更新。

到此這篇關(guān)于Mysql在線安全變更工具 gh-ost的使用的文章就介紹到這了,更多相關(guān)Mysql  gh-ost內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決MySQL innoDB間隙鎖產(chǎn)生的死鎖問題

    解決MySQL innoDB間隙鎖產(chǎn)生的死鎖問題

    線上經(jīng)常偶發(fā)死鎖問題,當(dāng)時處理一張表,也沒有聯(lián)表處理,但是有兩個mq入口,并且消息體存在一樣的情況,但是是偶發(fā)的,又模擬不出來什么場景會導(dǎo)致死鎖,只能進(jìn)行代碼分析,問題還原的方式去排查問題,本文給大家介紹了如何解決MySQL innoDB間隙鎖產(chǎn)生的死鎖問題
    2023-10-10
  • 在EF中使用MySQL的方法及常見問題

    在EF中使用MySQL的方法及常見問題

    這篇文章主要介紹了在EF中使用MySQL的方法及常見問題 的相關(guān)資料,需要的朋友可以參考下
    2016-06-06
  • Mysql指定某個字符串字段前面幾位排序查詢方式

    Mysql指定某個字符串字段前面幾位排序查詢方式

    這篇文章主要介紹了Mysql指定某個字符串字段前面幾位排序查詢方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • MySQL禁用InnoDB引擎的方法

    MySQL禁用InnoDB引擎的方法

    這篇文章主要介紹了MySQL禁用InnoDB引擎的方法,針對的Mysql版本是5.5和5.6,使用了兩種不同的配置文件,需要的朋友可以參考下
    2014-05-05
  • MySql事務(wù)及ACID實(shí)現(xiàn)原理詳解

    MySql事務(wù)及ACID實(shí)現(xiàn)原理詳解

    這篇文章主要為大家介紹了MySql事務(wù)及ACID實(shí)現(xiàn)原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Mysql存儲引擎詳解

    Mysql存儲引擎詳解

    存儲引擎其實(shí)就是如何實(shí)現(xiàn)存儲數(shù)據(jù),如何為存儲的數(shù)據(jù)建立索引以及如何更新,查詢數(shù)據(jù)等技術(shù)實(shí)現(xiàn)的方法。本文我們來詳細(xì)探討下MySQL中的幾個存儲引擎(MyISAM、InnoDB、archive、MERGE)的相關(guān)知識
    2016-12-12
  • 最新評論