最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL進行數(shù)據離線遷移的實現(xiàn)方案

 更新時間:2026年02月26日 08:47:27   作者:西門吹雪分身  
在實際的業(yè)務需求中,mysql數(shù)據庫往往需要從一個服務器遷移或者導出到另外一臺服務器,這個數(shù)據導入導出的工作,是不可避免的,所以本文介紹了MySQL數(shù)據遷移的物理操作方式,需要的朋友可以參考下

在實際的業(yè)務需求中,mysql數(shù)據庫往往需要從一個服務器遷移或者導出到另外一臺服務器。這個數(shù)據導入導出的工作,是不可避免的。

mysql對于數(shù)據的導入導出提供了邏輯操作與物理操作兩種方式,其中mysqdump的邏輯操作往往需要生成SQL文件,如果數(shù)據量比較大,可能執(zhí)行的效果比較差,耗時比較長。本文主要介紹一下基于mysql文件層面的物理操作,也可以叫做冷備份。

mysql的相關官網說明

mysql官網

Transportable Tablespace(可傳輸表空間) 是 MySQL InnoDB 存儲引擎提供的一種機制,允許用戶將某個表的表空間文件(.ibd)及其元數(shù)據校驗文件(.cfg)從一臺服務器“運輸”到另一臺服務器,并直接掛載到目標數(shù)據庫的表結構上。

核心原理
InnoDB 表空間文件內部包含了一個唯一的 Tablespace ID 和 Schema 指紋。直接拷貝 .ibd 文件時,目標庫的元數(shù)據(Data Dictionary)中記錄的 ID 與文件內部的 ID 不一致,導致無法識別。

  • .ibd實際的數(shù)據文件。
  • .cfg:由 FLUSH TABLES … FOR EXPORT 命令生成。它包含了表空間的元數(shù)據副本(包括 Tablespace ID、Schema 校驗和、頁大小等)。
  • 流程本質:
    1. 目標庫先創(chuàng)建一個空表,生成一個新的空的 .ibd。
    2. 執(zhí)行 DISCARD TABLESPACE:目標庫刪除這個空的 .ibd,并進入“等待導入”狀態(tài)。
    3. 放入源庫的 .ibd 和 .cfg。
    4. 執(zhí)行 IMPORT TABLESPACE:目標庫讀取 .cfg,驗證 .ibd 的完整性和一致性。如果通過,它將更新內部數(shù)據字典,將現(xiàn)有的 .ibd 文件“認領”為該表的數(shù)據文件。

詳細的操作流程

假設我們要遷移表 users,數(shù)據庫為 test_db。

前提條件:

  • 源庫和目標庫 MySQL 大版本一致(如都是 5.7 或 8.0)。
  • 源庫和目標庫的 innodb_file_per_table 均為 ON。
  • 目標庫已創(chuàng)建好結構完全一致的表。

第一階段:在源庫(Source)生成文件

這一步的目的是獲取一份一致性快照數(shù)據文件配套的校驗文件

  1. 確保表是可傳輸?shù)模ㄍǔDJ就是,但顯式執(zhí)行一次更穩(wěn)妥):
USE test_db;
-- 這一步會刷新臟頁到磁盤,并鎖定表進行元數(shù)據凍結
FLUSH TABLES users FOR EXPORT;

注意:執(zhí)行此命令后,表 users 會被鎖定為只讀(Read Only),直到你解鎖或復制完文件。其他會話對該表的寫操作會被阻塞。

  1. 復制文件
    保持終端窗口不關閉(保持鎖狀態(tài)),打開另一個終端或通過腳本復制文件。
    找到數(shù)據目錄(通常是 /var/lib/mysql/test_db/):
    • users.ibd:數(shù)據文件。
    • users.cfg:關鍵文件,包含元數(shù)據校驗信息。
# 在另一個終端執(zhí)行
cp /var/lib/mysql/test_db/users.{ibd,cfg} /tmp/backup_for_migration/

# 確認文件已復制完成
ls -lh /tmp/backup_for_migration/
  1. 解鎖源庫
    文件復制完成后,必須立即解鎖,恢復業(yè)務寫入。
    回到第一個執(zhí)行 SQL 的終端:
UNLOCK TABLES;

此時源庫業(yè)務恢復正常。

第二階段:在目標庫(Target)準備環(huán)境

  1. 創(chuàng)建結構一致的表
    在目標庫執(zhí)行與源庫完全相同的 CREATE TABLE 語句。
CREATE DATABASE IF NOT EXISTS test_db;
USE test_db;

CREATE TABLE users (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    -- 必須與源庫完全一致,包括字符集、排序規(guī)則、索引
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

提示:可以用 SHOW CREATE TABLE users\G 在源庫查看精確語句。

  1. 丟棄自動生成的表空間:

剛才建表時,InnoDB 已經生成了一個空的 users.ibd。需要刪掉它,以便導入舊的。

ALTER TABLE users DISCARD TABLESPACE;

執(zhí)行后,去操作系統(tǒng)查看 /var/lib/mysql/test_db/users.ibd,它應該已經消失了。此時表存在,但無法讀寫數(shù)據。

第三階段:導入文件到目標庫

  1. 拷貝文件到目標數(shù)據目錄:
    將第一階段生成的 users.ibd 和 users.cfg 上傳到目標庫對應的數(shù)據目錄。
# 假設文件在 /tmp/backup_for_migration/
cp /tmp/backup_for_migration/users.{ibd,cfg} /var/lib/mysql/test_db/
  1. 修正文件權限(至關重要):
    MySQL 進程通常以 mysql 用戶運行。如果文件歸屬是 root,導入會失敗。
chown mysql:mysql /var/lib/mysql/test_db/users.{ibd,cfg}
chmod 660 /var/lib/mysql/test_db/users.{ibd,cfg}
  1. 執(zhí)行導入命令
    登錄目標庫 MySQL:
USE test_db;
ALTER TABLE users IMPORT TABLESPACE;

  • 如果成功:無任何輸出,表立即變?yōu)榭捎脿顟B(tài)。
  • 如果失?。簳箦e。常見原因包括:
    • Schema mismatch:建表語句不一致(字段類型、順序、字符集等)。
    • Tablespace ID mismatch:通常是因為沒執(zhí)行 DISCARD TABLESPACE 或者 .cfg 文件不匹配。
  1. 驗證數(shù)據:
SELECT COUNT(*) FROM users;
SELECT * FROM users LIMIT 5;

特點與限制

優(yōu)點

  1. 速度極快:不涉及邏輯導出(SQL 生成)和導入(SQL 解析執(zhí)行),本質是文件拷貝,適合 TB 級大表遷移。
  2. 節(jié)省 IO:不會像 mysqldump 那樣產生巨大的重做日志(Redo Log)和二進制日志(Binlog)壓力(導入時可以暫時關閉 Binlog)。
  3. 支持分區(qū)表:可以單獨導入某個分區(qū),也可以導入整個分區(qū)表。

限制與注意事項

4. 版本嚴格限制:

  • 源和目標必須是相同的大版本(如 5.7 -> 5.7, 8.0 -> 8.0)。
  • 跨大版本(如 5.6 -> 8.0)通常不支持,因為 .ibd 內部格式可能發(fā)生變化。
  1. 架構一致:
  • 表結構(DDL)必須比特級一致。哪怕是字符集 utf8 和 utf8mb4 的區(qū)別,或者自增列初始值不同,都可能導致 Schema mismatch 錯誤。
  1. 只針對 InnoDB:MyISAM 或其他引擎不適用。
  2. 外鍵約束:如果表之間有外鍵約束,導入過程可能會比較復雜,建議先禁用外鍵檢查 (SET FOREIGN_KEY_CHECKS=0),導入后再開啟。
  3. 只讀窗口:在源庫執(zhí)行 FLUSH TABLES … FOR EXPORT 期間,該表是只讀的。雖然時間很短(僅拷貝文件的時間),但在高并發(fā)場景下仍需注意。

總結

Transportable Tablespace 是 MySQL 官方提供的“物理備份/遷移”方案。

  • 核心命令組合:FLUSH TABLES … FOR EXPORT (源) + DISCARD TABLESPACE (目標) + IMPORT TABLESPACE (目標)。
  • 關鍵文件:.ibd (數(shù)據) + .cfg (元數(shù)據校驗)。
  • 適用場景:海量數(shù)據快速遷移、表空間損壞后的單表恢復、跨實例克隆大表

以上就是MySQL進行數(shù)據離線遷移的實現(xiàn)方案的詳細內容,更多關于MySQL數(shù)據離線遷移的資料請關注腳本之家其它相關文章!

相關文章

  • xampp修改mysql默認密碼的方法

    xampp修改mysql默認密碼的方法

    在這里介紹xampp修改mysql默認密碼的大概過程是先利用xampp的phpmyadmin進入修改mysql密碼,修改之后我們再修改xampp中phpmyadmin的密碼,這樣就完整的修改mysql默認密碼了,感興趣的朋友一起通過本文學習吧
    2016-10-10
  • 服務器MYSQL啟動/停止/重啟命令方式

    服務器MYSQL啟動/停止/重啟命令方式

    文章介紹了查看MySQL版本的兩種方法及啟動/停止/重啟命令,提示5.5后服務名改為mysql,舊版本用mysqld;現(xiàn)代系統(tǒng)推薦systemctl替代service,需注意命令差異
    2025-09-09
  • MySQL中Binlog日志的使用方法詳細介紹

    MySQL中Binlog日志的使用方法詳細介紹

    MySQL的binlog(二進制日志)是一種記錄MySQL服務器所有更改的二進制日志文件,下面這篇文章主要給大家介紹了關于MySQL中Binlog日志的使用方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-02-02
  • CentOS系統(tǒng)中MySQL安裝完整步驟詳解

    CentOS系統(tǒng)中MySQL安裝完整步驟詳解

    在?CentOS?系統(tǒng)上安裝?MySQL,需要依次進行環(huán)境檢查、軟件源配置、安裝?MySQL、啟動服務等操作,我將按照規(guī)范流程,為你詳細分享完整且具體的安裝步驟,感興趣的朋友一起看看吧
    2025-04-04
  • SQL實現(xiàn)LeetCode(180.連續(xù)的數(shù)字)

    SQL實現(xiàn)LeetCode(180.連續(xù)的數(shù)字)

    這篇文章主要介紹了SQL實現(xiàn)LeetCode(180.連續(xù)的數(shù)字),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • MYSQL中統(tǒng)計查詢結果總行數(shù)的便捷方法省去count(*)

    MYSQL中統(tǒng)計查詢結果總行數(shù)的便捷方法省去count(*)

    查看手冊后發(fā)現(xiàn)SQL_CALC_FOUND_ROWS關鍵詞的作用是在查詢時統(tǒng)計滿足過濾條件后的結果的總數(shù)(不受 Limit 的限制)具體使用如下,感興趣的朋友可以學習下
    2013-07-07
  • MySQL字符串截取指定字符串right使用示例

    MySQL字符串截取指定字符串right使用示例

    這篇文章主要為大家啊AI介紹了MySQL字符串截取指定字符串right使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • 解決Navicat導入DBF中文亂碼的問題

    解決Navicat導入DBF中文亂碼的問題

    在使用Navicat導入DBF文件到Oracle數(shù)據庫時,如果遇到中文亂碼問題,需要在導入時指定正確的編碼格式,通常是GBK,否則,可能會出現(xiàn)部分字符亂碼的情況
    2025-12-12
  • Mysql 5.7 服務下載安裝圖文教程(經典版)

    Mysql 5.7 服務下載安裝圖文教程(經典版)

    MySQL 5.7在諸多方面都進行了大幅的改進,主要在于安全性、靈活性、易用性、可用性和性能等幾個方面。這篇文章主要介紹了Mysql5.7服務下載安裝圖文教程(經典版),需要的朋友可以參考下
    2016-09-09
  • MySQL之PXC集群搭建的方法步驟

    MySQL之PXC集群搭建的方法步驟

    PXC 是一套 MySQL 高可用集群解決方案,本文主要介紹了MySQL之PXC集群搭建的方法步驟,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05

最新評論

平原县| 马龙县| 广昌县| 烟台市| 乌审旗| 廊坊市| 徐州市| 巴林左旗| 巴里| 余姚市| 福清市| 龙川县| 宁化县| 吴川市| 池州市| 东方市| 泰安市| 钟祥市| 永平县| 乌什县| 乐陵市| 江城| 拉萨市| 磐石市| 石屏县| 丹阳市| 武城县| 鹰潭市| 昌邑市| 湘潭县| 鲜城| 浮山县| 石楼县| 徐水县| 河南省| 武功县| 太湖县| 潜江市| 赫章县| 吴忠市| 武邑县|