MySQL 遷移后無(wú)法快速導(dǎo)數(shù)據(jù)問(wèn)題解決
背景
關(guān)于 5.6 升級(jí)到 5.7 之后,GTID 的相關(guān)功能的注意事項(xiàng)。
某金融公司有套系統(tǒng)最近剛遷移完,從 5.6 遷移到 5.7.30,并且在遷移前未開(kāi)啟 GTID,遷移后開(kāi)啟了 GTID 相關(guān)功能。業(yè)務(wù)按照以往的方式使用 CREATE TABLE ... SELECT ...
導(dǎo)數(shù)據(jù)的時(shí)候出現(xiàn)報(bào)錯(cuò):Error Code:1786 (HY000): Mysql Statement violates GTID consistency: CREATE TABLE ... SELECT
。
問(wèn)題原理
這個(gè)問(wèn)題比較簡(jiǎn)單,原因就是遷移后的 MySQL5.7 使用了 GTID,開(kāi)啟了 enforce_gtid_consistency
參數(shù)(GTID 強(qiáng)一致性)。
為保證分布式事務(wù)的一致性,MySQL 使用 GTID 來(lái)唯一標(biāo)識(shí)一個(gè)事務(wù)。在 GTID 模式下,DDL 和 DML 語(yǔ)句會(huì)自動(dòng)產(chǎn)生不同的 GTID 來(lái)標(biāo)識(shí)不同的事務(wù)操作。但是 CREATE TABLE ... SELECT ...
只生成了一個(gè) GTID,將 DDL 和 DML 操作合并為一個(gè)事務(wù)執(zhí)行,這在語(yǔ)句執(zhí)行失敗時(shí),會(huì)造成主從數(shù)據(jù)不一致。開(kāi)啟 enforce_gtid_consistency
參數(shù)就是為了 GTID 事務(wù)的原子性。
官方文檔也有對(duì) CREATE TABLE ... SELECT ...
這一操作的說(shuō)明:
解決方案
為了安全,不建議關(guān)閉這個(gè)參數(shù)。
在 MySQL5.7 上可以用拆分成兩句 SQL 的方式,解決這個(gè)問(wèn)題,比如:
#先創(chuàng)建表 CREATE TABLE ... LIKE... #再插入數(shù)據(jù) INSERT INTO ... SELECT ...
雖然之前的單條 SQL 能簡(jiǎn)單快速的導(dǎo)數(shù)到另一張表,但為了安全可以適當(dāng)麻煩一點(diǎn)。
MySQL 8.0
好消息是從 MySQL8.0.21 開(kāi)始,支持原子 DDL 的存儲(chǔ)引擎允許使用 CREATE TABLE ... SELECT ...
語(yǔ)句了。
以上就是MySQL 遷移后無(wú)法快速導(dǎo)數(shù)據(jù)問(wèn)題解決的詳細(xì)內(nèi)容,更多關(guān)于MySQL遷移導(dǎo)數(shù)據(jù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- MySQL遷移到Oracle數(shù)據(jù)庫(kù)的超詳細(xì)步驟和方法總結(jié)
- MySql使用存儲(chǔ)過(guò)程進(jìn)行單表數(shù)據(jù)遷移的實(shí)現(xiàn)
- MySQL數(shù)據(jù)庫(kù)遷移實(shí)戰(zhàn)
- mysql數(shù)據(jù)遷移之data目錄復(fù)制方法
- Mysql遷移Postgresql的實(shí)現(xiàn)示例
- mysql 實(shí)現(xiàn)遷移數(shù)據(jù)庫(kù)到另一臺(tái)服務(wù)器
- MySQL根據(jù)條件遷移數(shù)據(jù)的幾種方法實(shí)現(xiàn)
相關(guān)文章
一次docker登錄mysql報(bào)錯(cuò)問(wèn)題的實(shí)戰(zhàn)記錄
這篇文章主要給大家介紹了一次docker登錄mysql報(bào)錯(cuò)問(wèn)題的實(shí)戰(zhàn)記錄,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用docker具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-01-01Mysql數(shù)據(jù)庫(kù)事務(wù)的臟讀幻讀及不可重復(fù)讀詳解
這篇文章主要為大家介紹了Mysql數(shù)據(jù)庫(kù)事務(wù)的臟讀幻讀及不可重復(fù)讀詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05master and slave have equal MySQL server ids
Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids2013-07-07解決mysql5.6 utf8設(shè)置無(wú)效問(wèn)題
這篇文章主要介紹了mysql5.6 utf8設(shè)置無(wú)效問(wèn)題,本文雖然內(nèi)容不長(zhǎng),但是解決方法給出,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02mysql按天/小時(shí)/半小時(shí)/N分鐘/分鐘進(jìn)行數(shù)據(jù)分組統(tǒng)計(jì)功能
我們?cè)谧鲰?xiàng)目或者數(shù)據(jù)分析時(shí),經(jīng)常遇到這樣的需求:統(tǒng)計(jì)不同時(shí)間粒度下的數(shù)據(jù)分布情況,例如,每一天中每個(gè)小時(shí)網(wǎng)站的訪問(wèn)量,某路口每半個(gè)小時(shí)通過(guò)的車(chē)輛數(shù)量等,下面給大家分享mysql按天/小時(shí)/半小時(shí)/N分鐘/分鐘進(jìn)行數(shù)據(jù)分組統(tǒng)計(jì)功能,感興趣的朋友跟隨小編一起看看吧2024-04-04MySQL循環(huán)插入千萬(wàn)級(jí)數(shù)據(jù)
這篇文章主要介紹了MySQL如何實(shí)現(xiàn)循環(huán)插入千萬(wàn)級(jí)數(shù)據(jù),幫助大家更好的理解和使用MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下2020-09-09MySQL的的數(shù)據(jù)一致性保障與延遲問(wèn)題處理
在分布式數(shù)據(jù)庫(kù)和高并發(fā)應(yīng)用場(chǎng)景下,數(shù)據(jù)一致性 和 數(shù)據(jù)延遲 是兩個(gè)不可忽視的問(wèn)題,MySQL 作為廣泛使用的關(guān)系型數(shù)據(jù)庫(kù),提供了多種機(jī)制來(lái)保障數(shù)據(jù)一致性,本文將深入探討 MySQL 如何保障數(shù)據(jù)一致性 以及 應(yīng)對(duì)數(shù)據(jù)延遲的策略,需要的朋友可以參考下2025-03-03mysql關(guān)聯(lián)查詢速度慢的問(wèn)題及解決
這篇文章主要介紹了mysql關(guān)聯(lián)查詢速度慢的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03