男女做爽爽爽网站-男女做羞羞高清-男女做爰高清无遮挡免费视频-男女做爰猛烈-男女做爰猛烈吃奶啪啪喷水网站-内射白浆一区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網站管理員

MySQL下200GB大表備份,利用傳輸表空間解決停服發(fā)版表備份問題

freeflydom
2025年4月18日 10:49 本文熱度 292

問題背景

在停服發(fā)版更新時,需對 200GB 大表(約 200 億行數據)進行快速備份以預防操作失誤。

因為曾經出現過有開發(fā)寫的發(fā)版語句里,UPDATE語句的WHERE條件寫錯了,原本只需要更新幾行數據,最終導致更新了半張表的數據。

MySQL版本是MySQL 8.0.X,為了預防這種情況,需要對某個重要的大表進行預先備份,以便可以及時回滾,及時恢復,及時回退,對于備份方法大概有下面幾種:

方案優(yōu)點缺點
mysqldump  導出簡單易用大表導出耗時(200GB 可能需數小時)
CREATE TABLE...SELECT直接 SQL 操作數據復制慢,鎖表風險高
表空間 傳輸秒級備份 ,零數據復制需操作系統權限,依賴文件拷貝
主從復制/延遲復制無需停服,恢復靈活需主從架構,維護成本高

這個場景的核心需求:停服更新的時間非常有限,比如1個小時之內要完成更新。

操作流程

前面兩種都比較簡單,通過導數據的方法來備份舊表,萬一出現問題,可以使用導出來的數據進行快速恢復,第三種方法估計比較少人用,下面是具體操作方法

  1. 源表與備胎表結構

-- 源表(aa)
CREATE TABLE aa (
id int(11) DEFAULT NULL,
  sname VARCHAR(100)
) ENGINE=InnoDB;
-- 備胎表(bb)
CREATE TABLE bb (
id int(11) DEFAULT NULL,
  sname VARCHAR(100)
) ENGINE=InnoDB;
greatsql> INSERTINTO aa SELECT1,"nihao";

2、查看兩個表的表ID和表空間ID,可以看到aa表的表ID是1081 表空間ID是13,bb表的表ID是1082 表空間ID是14

greatsql> select * from information_schema.innodb_tables where name='school/aa'\G
*************************** 1. row ***************************
          TABLE_ID: 1081
              NAME: school/aa
              FLAG: 33
            N_COLS: 6
             SPACE: 13
        ROW_FORMAT: Dynamic
     ZIP_PAGE_SIZE: 0
        SPACE_TYPE: Single
      INSTANT_COLS: 0
TOTAL_ROW_VERSIONS: 0
1 row in set (0.01 sec)
greatsql> select * from information_schema.innodb_tables where name='school/bb'\G
*************************** 1. row ***************************
          TABLE_ID: 1082
              NAME: school/bb
              FLAG: 33
            N_COLS: 6
             SPACE: 14
        ROW_FORMAT: Dynamic
     ZIP_PAGE_SIZE: 0
        SPACE_TYPE: Single
      INSTANT_COLS: 0
TOTAL_ROW_VERSIONS: 0
1 row in set (0.00 sec)

3、備胎表卸載表空間:

greatsql> ALTER TABLE bb DISCARD TABLESPACE;  -- 加鎖并生成配置文件

4、源表執(zhí)行表空間導出:

greatsql> USE school;
greatsql> FLUSH TABLES aa FOR EXPORT;   

5、拷貝表空間文件(ibd和cfg文件),然后重新賦予權限,確保導入表空間時候不會出現問題

$ cd /data/mysql/mysql3306/data/school
$ cp aa.ibd  bb.ibd  
$ cp aa.cfg  bb.cfg
$ chown -R mysql:mysql /data/mysql/mysql3306/data/*

6、在相同數據庫下,備胎表導入表空間

greatsql> USE school;
greatsql> UNLOCK TABLES;  
greatsql> ALTER TABLE bb IMPORT TABLESPACE;

7、查詢表數據,驗證數據一致性

greatsql> USE school;
greatsql> SELECT * FROM bb;
greatsql> SELECT * FROM aa;

查詢表數據正常,沒有任何問題

greatsql> SELECT * FROM aa;
+------+-------+
| id   | sname |
+------+-------+
|    1 | nihao |
+------+-------+
1 row in set (0.01 sec)
greatsql> SELECT * FROM bb;
+------+-------+
| id   | sname |
+------+-------+
|    1 | nihao |
+------+-------+
1 row in set (0.00 sec)

查看表的數據文件,沒什么問題

$ ll
total 228
-rw-r----- 1 mysql mysql 114688 Mar  4 16:51 aa.ibd
-rw-r----- 1 mysql mysql    781 Mar  4 16:52 bb.cfg
-rw-r----- 1 mysql mysql 114688 Mar  4 16:52 bb.ibd

 

8、再次查看兩個表的表ID和表空間ID,可以看到aa表的表ID是1081 表空間ID是13(沒有變化),bb表的表ID是1083 表空間ID是14(表空間ID已經變了),bb表的表ID變了是防止與現有表沖突


mysql> select * from information_schema.innodb_tables where name='school/aa'\G
*************************** 1. row ***************************
          TABLE_ID: 1081
              NAME: school/aa
              FLAG: 33
            N_COLS: 6
             SPACE: 13
        ROW_FORMAT: Dynamic
     ZIP_PAGE_SIZE: 0
        SPACE_TYPE: Single
      INSTANT_COLS: 0
TOTAL_ROW_VERSIONS: 0
1 row in set (0.00 sec)
mysql> select * from information_schema.innodb_tables where name='school/bb'\G
*************************** 1. row ***************************
          TABLE_ID: 1083
              NAME: school/bb
              FLAG: 33
            N_COLS: 6
             SPACE: 14
        ROW_FORMAT: Dynamic
     ZIP_PAGE_SIZE: 0
        SPACE_TYPE: Single
      INSTANT_COLS: 0
TOTAL_ROW_VERSIONS: 0
1 row in set (0.00 sec)

9、發(fā)版更新與回滾

-- 發(fā)版操作(示例)
greatsql> UPDATE aa SET sname = 'new_value' WHERE id > 1;

10、如果發(fā)版有問題,直接交換表名,最快速度恢復整個表的數據

-- 回滾操作(交換表名)
greatsql> ALTER TABLE aa RENAME TO aa_temp; 
greatsql> ALTER TABLE bb RENAME TO aa; 

總結

整個操作最重要的是第4步,操作系統級別的拷貝就完成了整個表的備份,相比于數據倒來倒去在速度上要快不少。另外,第5步的備胎表也可以不用導入,只有當發(fā)現發(fā)版出現問題時候,再導入也可以。

這種方法的關鍵優(yōu)勢如下

  • 直接拷貝 .ibd 文件,無需逐行復制數據。
  • 零鎖表時間:FLUSH TABLES tablename FOR EXPORT 僅短暫加鎖(秒級)。
  • 快速恢復:通過表名交換實現秒級回滾。

特別適合于這幾種場景:無主從架構的單實例環(huán)境、大表快速備份、停服時間敏感。

當然,如果有主從架構的話,則更加推薦使用第四種方法,在操作上也更加可控,短時間也能保證能夠完成。

轉自https://www.cnblogs.com/lyhabc/p/18816226/ 


該文章在 2025/4/18 10:49:52 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業(yè)務管理,結合碼頭的業(yè)務特點,圍繞調度、堆場作業(yè)而開發(fā)的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 欧美日韩国产中文在线亚 | 国产午夜精品一 | 老王轻一点儿好爽在深一点 | 2024最新热播日韩无码 | 成人精品线观看 | 亚洲欧美日韩综合久久久久 | 搡老女人老熟妇HHD 搡老熟女老女人一区二区 搡女人真爽免费视频大全软件 | 在线观看av中文字幕不卡 | 色婷婷精品免费视频 | 2024久久国产综合精品 | 51社区精品视频 | 91欧美视频 | 久久伊人| 亚洲欧美在线综合一区二区三区 | 精品无码国产一区二区三区麻豆 | 国产精品乱码久久久久软件 | 欧美黄黄黄AAA片片 欧美黄色免费网址 | 久久一区二区三区精华液 | 丁香狠狠色婷婷久久综合亚洲日本一区二区 | 色综合久久88色综合天天提莫 | 亚洲国产精品一区二区久久 | 国产成人精品综合在线 | freefron性妇女| 成人无码av一区二区三区 | 女人毛多水多高潮A片 | 免费看日b视频 | 国产日产欧产精品精品推荐 | 蜜臀91精品国产高清在线观看 | 波多野结衣家庭教师视频 | 欧美在线一区二区 | 亚洲国产精品99久久久久久 | 国产婷婷视频在线观看 | 亚洲 欧美 天堂 综合 | 波多野结衣作品番号 | 亚洲中文字幕无码卡通动漫 | 国产午夜福利亚洲第一 | 国产成人综合亚洲欧美 | 91精品国产三级在线观看 | 真人性做爰无遮A片免费 | 大沢佑香种子 | av人无码综合在线 |