天天看點

mysqldump指令詳解 Part 4-備份單表

前情提要

實驗環境:

  • MySQL 5.7.25
  • Redhat 6.10

前面我們建立了資料庫并建立相關的對象

  • 資料庫
  • 存儲過程
  • 函數
  • 觸發器
  • 事件

今天的内容為備份全庫

1. 備份語句

我們來備份test資料庫中的innodb_table表和isam_table表

mysqldump -h127.0.0.1 -usystem -p123456  --set-gtid-purged=OFF  --databases test --tables innodb_table  isam_table > /tmp/table.sql           

複制

2. 内容解析

2.1 版本資訊

mysqldump指令詳解 Part 4-備份單表

首先依然是mysqldump的版本資訊 主機名資訊

已經一些變量的設定

再次提醒 \/!123456\/ 不是注釋

詳情看上一節介紹

2.2 表的結構

mysqldump指令詳解 Part 4-備份單表

接下來是表的資訊

首先是如果表存在則删除表(DROP TABLE IF EXISTS)

之後建立表(CREATE TABLE)

2.3 表資料的備份

mysqldump指令詳解 Part 4-備份單表

接下來是表資料的備份(Dumping data for table)

首先鎖定表不讓其他程序寫(LOCK TABLE WRITE)

然後使MySQL停止更新非唯一索引(ALTER TABLE DISABLE KEYS),這樣能加快插入速度

之後将資料轉換成insert語句(INSERT INTO)

之後重建立立丢失的索引(ALTER TABLE ENABLE KEYS)

最後釋放鎖(UNLOCK TABLES)

2.4 觸發器的導出

mysqldump指令詳解 Part 4-備份單表

可以看到單獨導出表的話,該表的觸發器會一并導出

3. 總結

可以看出單獨導出表有如下内容

  • 删除表(如果存在)
  • 建表
  • 鎖表
  • 禁用非唯一索引
  • 插入資料
  • 啟用非唯一索引(重建索引)
  • 釋放鎖
  • 觸發器(如果有)

不同于全庫備份沒有如下内容

  • 建立資料庫(如果不存在)
  • 使用資料庫

同時一條語句不能導出多個資料庫中的表

今天的内容就到這裡,歡迎檢視