天天看点

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. 总结

可以看出单独导出表有如下内容

  • 删除表(如果存在)
  • 建表
  • 锁表
  • 禁用非唯一索引
  • 插入数据
  • 启用非唯一索引(重建索引)
  • 释放锁
  • 触发器(如果有)

不同于全库备份没有如下内容

  • 建立数据库(如果不存在)
  • 使用数据库

同时一条语句不能导出多个数据库中的表

今天的内容就到这里,欢迎查看