[toc] ## 前情提要 实验环境: - 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 版本信息 [image:511 size:orig] 首先依然是mysqldump的版本信息 主机名信息 已经一些变量的设置 再次提醒 \/*!123456*\/ 不是注释 详情看上一节介绍 ### 2.2 表的结构 [image:512 size:orig] 接下来是表的信息 首先是如果表存在则删除表(DROP TABLE IF EXISTS) 之后建立表(CREATE TABLE) ### 2.3 表数据的备份 [image:513 size:orig] 接下来是表数据的备份(Dumping data for table) 首先锁定表不让其他进程写(LOCK TABLE WRITE) 然后使MySQL停止更新非唯一索引(ALTER TABLE DISABLE KEYS),这样能加快插入速度 之后将数据转换成insert语句(INSERT INTO) 之后重新建立丢失的索引(ALTER TABLE ENABLE KEYS) 最后释放锁(UNLOCK TABLES) ### 2.4 触发器的导出 [image:514 size:orig] 可以看到单独导出表的话,该表的触发器会一并导出 ## 3. 总结 可以看出单独导出表有如下内容 - 删除表(如果存在) - 建表 - 锁表 - 禁用非唯一索引 - 插入数据 - 启用非唯一索引(重建索引) - 释放锁 - 触发器(如果有) 不同于全库备份没有如下内容 - 建立数据库(如果不存在) - 使用数据库 同时一条语句不能导出多个数据库中的表 今天的内容就到这里,欢迎查看