MySQL數據庫遷移SQL語句指南

MySQL數據庫遷移SQL語句指南

一、基礎遷移方法

1. 使用mysqldump進行全量遷移

-- 導出源數據庫(在命令行執行)
mysqldump -u [源用戶名] -p[源密碼] --single-transaction --routines --triggers --events 
--master-data=2 [數據庫名] > migration_backup.sql-- 導入目標數據庫(在命令行執行)
mysql -u [目標用戶名] -p[目標密碼] [目標數據庫名] < migration_backup.sql

2. 只遷移表結構

-- 導出表結構
mysqldump -u [用戶名] -p[密碼] --no-data [數據庫名] > schema_only.sql-- 導入表結構
mysql -u [用戶名] -p[密碼] [目標數據庫] < schema_only.sql

二、大型數據庫遷移策略

1. 分表遷移

-- 導出特定表
mysqldump -u [用戶名] -p[密碼] [數據庫名] [1] [2] > tables_backup.sql-- 批量導出所有表(生成導出命令)
SELECT CONCAT('mysqldump -u [用戶名] -p[密碼] [數據庫名] ', table_name, ' > ', table_name, '.sql')
FROM information_schema.tables 
WHERE table_schema = '[數據庫名]';

2. 分批遷移大數據表

-- 導出表中部分數據(按ID范圍)
mysqldump -u [用戶名] -p[密碼] [數據庫名] [表名] --where="id BETWEEN 1 AND 100000" > table_part1.sql-- 使用LIMIT分批導出
SELECT * FROM large_table LIMIT 0, 100000 INTO OUTFILE '/tmp/part1.csv';

三、跨版本/跨服務器遷移

1. 使用SELECT INTO OUTFILE

-- 導出數據到文件
SELECT * FROM table_name INTO OUTFILE '/tmp/table_name.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';-- 導入數據
LOAD DATA INFILE '/tmp/table_name.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';

2. 使用存儲過程實現增量遷移

DELIMITER //
CREATE PROCEDURE incremental_migration(IN last_id INT)
BEGINDECLARE batch_size INT DEFAULT 1000;DECLARE max_id INT;SELECT COALESCE(MAX(id), 0) INTO max_id FROM target_db.target_table;INSERT INTO target_db.target_tableSELECT * FROM source_db.source_tableWHERE id > max_id AND id <= max_id + batch_size;-- 記錄遷移位置INSERT INTO migration_log (table_name, last_migrated_id, batch_size, migrate_time)VALUES ('source_table', max_id + batch_size, batch_size, NOW());
END //
DELIMITER ;

四、數據庫遷移驗證SQL

1. 數據一致性檢查

-- 檢查表記錄數是否一致
SELECT (SELECT COUNT(*) FROM source_db.table1) AS source_count,(SELECT COUNT(*) FROM target_db.table1) AS target_count,(SELECT COUNT(*) FROM source_db.table1) - (SELECT COUNT(*) FROM target_db.table1) AS difference;-- 檢查數據校驗和
SELECT COUNT(*) AS total_rows,SUM(CRC32(CONCAT_WS(',', col1, col2, col3))) AS checksum
FROM source_db.table_name;-- 與目標庫比較
SELECT (SELECT SUM(CRC32(CONCAT_WS(',', col1, col2, col3))) FROM source_db.table_name) AS source_checksum,(SELECT SUM(CRC32(CONCAT_WS(',', col1, col2, col3))) FROM target_db.table_name) AS target_checksum;

2. 索引和約束驗證

-- 比較表結構
SELECT column_name, column_type, is_nullable, column_default 
FROM information_schema.columns 
WHERE table_schema = 'source_db' AND table_name = 'table_name'EXCEPTSELECT column_name, column_type, is_nullable, column_default 
FROM information_schema.columns 
WHERE table_schema = 'target_db' AND table_name = 'table_name';-- 檢查索引差異
SELECT index_name, column_name, non_unique 
FROM information_schema.statistics 
WHERE table_schema = 'source_db' AND table_name = 'table_name'EXCEPTSELECT index_name, column_name, non_unique 
FROM information_schema.statistics 
WHERE table_schema = 'target_db' AND table_name = 'table_name';

五、特殊場景遷移方案

1. 遷移存儲過程和函數

-- 導出所有存儲過程
mysqldump -u [用戶名] -p[密碼] --routines --no-create-info --no-data 
--no-create-db --skip-opt [數據庫名] > routines.sql-- 單獨導出某個存儲過程
SHOW CREATE PROCEDURE procedure_name\G

2. 遷移用戶和權限

-- 導出用戶權限
mysql -u root -p -e "SELECT CONCAT('SHOW GRANTS FOR ''', user, '''@''', host, ''';') 
FROM mysql.user WHERE user NOT IN ('root','mysql.sys')" | mysql -u root -p > all_grants.sql-- 導入用戶權限
mysql -u root -p < all_grants.sql

六、自動化遷移腳本示例

#!/bin/bash
# MySQL數據庫遷移腳本SOURCE_DB="source_db"
TARGET_DB="target_db"
SOURCE_USER="source_user"
SOURCE_PASS="source_pass"
TARGET_USER="target_user"
TARGET_PASS="target_pass"
BACKUP_DIR="/backup/migration"
DATE=$(date +%Y%m%d)# 創建備份目錄
mkdir -p $BACKUP_DIR# 1. 導出源數據庫
echo "導出源數據庫..."
mysqldump -u $SOURCE_USER -p$SOURCE_PASS --single-transaction --routines --triggers --events $SOURCE_DB > $BACKUP_DIR/${SOURCE_DB}_${DATE}.sql# 2. 創建目標數據庫
echo "創建目標數據庫..."
mysql -u $TARGET_USER -p$TARGET_PASS -e "CREATE DATABASE IF NOT EXISTS $TARGET_DB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"# 3. 導入到目標數據庫
echo "導入到目標數據庫..."
mysql -u $TARGET_USER -p$TARGET_PASS $TARGET_DB < $BACKUP_DIR/${SOURCE_DB}_${DATE}.sql# 4. 驗證遷移
echo "驗證遷移結果..."
mysql -u $TARGET_USER -p$TARGET_PASS -e "SELECT COUNT(*) AS tables_migrated FROM information_schema.tables WHERE table_schema = '$TARGET_DB'"

遷移注意事項

  1. 版本兼容性:檢查MySQL版本差異,特別是5.7到8.0的遷移
  2. 字符集設置:確保源和目標數據庫使用相同的字符集
  3. 外鍵約束:遷移時暫時禁用外鍵檢查 SET FOREIGN_KEY_CHECKS=0;
  4. 大表遷移:考慮使用pt-archiver等工具分批遷移
  5. 停機時間:評估業務影響,盡量在低峰期執行遷移

以上SQL語句和腳本可根據實際遷移需求進行調整,建議在測試環境驗證后再進行生產環境遷移。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/80643.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/80643.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/80643.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

畫立方體軟件開發筆記 js three 投影 參數建模 旋轉相機 @tarikjabiri/dxf導出dxf

gitee&#xff1a; njsgcs/njsgcs_3d mainwindow.js:4 Uncaught SyntaxError: The requested module /3dviewport.js does not provide an export named default一定要default嗎 2025-05-10 14-27-58 專門寫了個代碼畫立方體 import{ scene,camera,renderer} from ./3dviewp…

【工具】HandBrake使用指南:功能詳解與視頻轉碼

HandBrake使用指南&#xff1a;功能詳解與視頻轉碼 一、前言 高清視頻在當下日益普及&#xff0c;從影視制作到個人拍攝&#xff0c;從社交媒體發布到遠程教育&#xff0c;如何高效地壓縮、轉換和管理視頻文件的體積與清晰度&#xff0c;成為內容創作者與技術開發者的核心任務…

Docker容器網絡架構深度解析與技術實踐指南——基于Linux內核特性的企業級容器網絡實現

第1章 容器網絡基礎架構 1 Linux網絡命名空間實現原理 1.1內核級隔離機制深度解析 1.1.1進程隔離的底層實現 通過clone()系統調用創建新進程時&#xff0c;設置CLONE_NEWNET標志位將觸發內核執行以下操作&#xff1a; 內核源碼示例&#xff08;linux-6.8.0/kernel/fork.c&a…

SAP 交貨單行項目含稅金額計算報cx_sy_zerodivide處理

業務背景&#xff1a;SAP交貨單只有數量&#xff0c;沒有金額&#xff0c;所以開發報表從訂單的價格按數量計算交貨單的金額。 用戶反饋近期報表出現異常&#xff1a; ****2012/12/12 清風雅雨 規格變更 Chg 修改開始 ** 修改原因:由于余數為0時&#xff0c;可能會報錯溢出。…

【高數上冊筆記01】:從集合映射到區間函數

【參考資料】 同濟大學《高等數學》教材樊順厚老師B站《高等數學精講》系列課程 &#xff08;注&#xff1a;本筆記為個人數學復習資料&#xff0c;旨在通過系統化整理替代厚重教材&#xff0c;便于隨時查閱與鞏固知識要點&#xff09; 僅用于個人數學復習&#xff0c;因為課…

每日算法刷題 Day3 5.11:leetcode數組2道題,用時1h(有點慢)

5.LC 零矩陣(中等) 面試題 01.08. 零矩陣 - 力扣&#xff08;LeetCode&#xff09; 思想: 法一: 利用兩個集合分別儲存要清0的行和列索引 另外兩種原地優化空間的做法暫時不是目前刷題目標&#xff0c;故不考慮 代碼 c: class Solution { public:void setZeroes(vector&l…

【小記】excel vlookup一對多匹配

一個學生報四門課&#xff0c;輸出每個學生課程 應用概述操作預處理數據計數指令 COUNTIFS進行一對多匹配 vlookup 應用概述 應用場景&#xff1a;學生報名考試&#xff0c;需要整理成指定格式&#xff0c;發給考試院。 一個學生最多報考四門 格式實例&#xff1a;準考證號 …

《從零構建大模型》PDF下載(中文版、英文版)

內容簡介 本書是關于如何從零開始構建大模型的指南&#xff0c;由暢銷書作家塞巴斯蒂安? 拉施卡撰寫&#xff0c;通過清晰的文字、圖表和實例&#xff0c;逐步指導讀者創建自己的大模型。在本書中&#xff0c;讀者將學習如何規劃和編寫大模型的各個組成部分、為大模型訓練準備…

基于 Ubuntu 24.04 部署 WebDAV

1. 簡介 WebDAV&#xff08;Web Distributed Authoring and Versioning&#xff09;是一種基于 HTTP 的協議&#xff0c; 允許用戶通過網絡直接編輯和管理服務器上的文件。 本教程介紹如何在 Ubuntu 24.04 上使用 Apache2 搭建 WebDAV 服務&#xff0c;無需域名&#xff0c;…

node.js 實戰——在express 中將input file 美化,并完成裁剪、上傳進度條

美化上傳按鈕 在ejs 頁面 <!DOCTYPE html> <html> <head><meta charset"utf-8"></meta><title><% title %></title><link relstylesheet href/stylesheets/form.css/><!-- 本地 Bootstrap 引入方式 -->…

MySQL為什么選擇B+樹

1.hash表&#xff1a;不支持范圍查詢 2.跳表&#xff1a;索引層增加太快&#xff0c;IO成本增加太快 3.二叉樹、AVL樹、紅黑樹&#xff1a;樹高度增加太快&#xff0c;IO成本增加太快 4.B樹&#xff1a;樹高增加太快&#xff1b;范圍查詢只能走中序遍歷&#xff0c;IO成本很…

go程序編譯成動態庫,使用c進行調用

以下是使用 Go 語言打包成 .so 庫并使用 C 語言調用的完整步驟&#xff1a; 1. Go 語言打包成 .so 庫 &#xff08;1&#xff09;編寫 Go 代碼 創建一個 Go 文件&#xff08;如 calculator.go&#xff09;&#xff0c;并定義需要導出的函數。導出的函數名必須以大寫字母開頭…

YOLO-World:基于YOLOv8的開放詞匯目標檢測

文章目錄 前言1、出發點2、方法2.1.TextEncoder2.2.ReparmVLPAN2.3.輸出頭 3、實驗3.1.數據集3.2.LVIS測試集 總結 前言 本文介紹一篇來自騰訊的開放詞匯檢測工作&#xff0c;發表自CVPR2024&#xff0c;論文鏈接&#xff0c;開源地址。 1、出發點 GroundingDINO在開放詞匯檢測…

華為網路設備學習-21 IGP路由專題-路由過濾(filter-policy)

一、路由過濾&#xff08;filter-policy&#xff09; 1、用于控制路由更新、接收的一個工具 2、只能過濾路由信息&#xff0c;無法過濾LSA 二、路由過濾&#xff08;filter-policy&#xff09;與動態路由協議 1、距離矢量路由協議 RIP動態路由協議 交換的是路由表&#xff0…

美化IDEA注釋:Idea 中快捷鍵 Ctrl + / 自動注釋的縮進(避免添加注釋自動到行首)以及 Ctrl + Alt + l 全局格式化代碼的注釋縮進

打開 Settings 界面&#xff0c;依次選擇 Editor -> Code Style -> Java&#xff0c;選擇 Code Generation&#xff0c; 取消 Line comment at first column 和 Block comment at first column 的勾選即可&#xff0c; 1、Line comment at first column (行注釋在第一列…

服務器數據恢復—硬盤壞道導致EqualLogic存儲不可用的數據恢復

服務器存儲數據恢復環境&故障&#xff1a; 一臺EqualLogic某型號存儲中有一組由16塊SAS硬盤組建的RAID5陣列。上層采用VMFS文件系統&#xff0c;存放虛擬機文件&#xff0c;上層一共分了4個卷。 磁盤故障導致存儲不可用&#xff0c;且設備已經過保。 服務器存儲數據恢復過程…

openharmony系統移植之gpu mesa3d適配

openharmony系統移植之gpu mesa3d適配 文章目錄 openharmony系統移植之gpu mesa3d適配1. 環境說明2. gpu內核panfrost驅動2.1 使能panfrost驅動2.2 panfrost dts配置 3. buildroot下測試gpu驅動3.1 buildroot配置編譯 4. ohos下mesa3d適配4.1 ohos下mesa3d編譯調試4.1.2 編譯4.…

Kafka生產者send方法詳解

Kafka生產者send方法詳解 1. send方法的工作原理 1.1 基本流程 #mermaid-svg-EXvKiyf8oSlenrxK {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-EXvKiyf8oSlenrxK .error-icon{fill:#552222;}#mermaid-svg-EXvKiyf…

【sdkman】sdk命令使用簡介

SDKMAN! 使用指南 SDKMAN! 是一個用于管理多個軟件開發工具包版本的命令行工具。 基本命令 安裝 SDK # 安裝最新穩定版 sdk install java# 安裝特定版本 sdk install scala 3.4.2# 安裝本地版本 sdk install groovy 3.0.0-SNAPSHOT /path/to/groovy-3.0.0-SNAPSHOT sdk ins…

開源字體設計工具字玩 FontPlayer

開源字體設計工具字玩 FontPlayer 內測版 v0.2.0 于 2025 年 5 月 9 日發布 基礎功能&#xff1a;用戶可以使用該工具繪制字體并導出 otf 字體文件&#xff0c;設計屬于自己的字庫。腳本功能&#xff1a;提供了腳本功能&#xff0c;用戶可以用程序的方式繪制字形組件&#xff0…