往期专题请查看www.zhaibibei.cn 这是一个坚持Oracle,Python,MySQL原创内容的公众号
前情提要
MySQL 5.7 Windows平台安装
MySQL 5.7 Linux平台安装 Part 1
MySQL 5.7.21 Linux平台安装 Part 2
MySQL 5.7 常用命令
[MySQL学习笔记]1. MySQL测试数据的构造
[MySQL学习笔记]2. mysqldump命令详解 Part 1
实验环境:
- MySQL 5.7.25
- Redhat 6.10
前面我们建立了数据库并建立相关的对象
- 数据库
- 表
- 存储过程
- 函数
- 触发器
- 事件
今天的内容为备份全库
1. 备份语句
1.1 备份所有数据库
我们使用如下语句来备份所有数据库
代码语言:javascript复制mysqldump -h127.0.0.1 -usystem -p123456 --all-databases >/tmp/all.sql
或者如下命令
代码语言:javascript复制mysqldump -h127.0.0.1 -usystem -p123456 -A >/tmp/all.sql
命令后警告信息后面章节介绍
1.2 备份独立数据库
下面语句备份单独test数据库 ,多个数据库用空格隔开即可
代码语言:javascript复制mysqldump -h127.0.0.1 -usystem -p123456 --databases test >/tmp/test.sql
2. 备份内容解释
下面对备份出来的语句进行解释
2.1 版本信息
第一行是mysqldump的版本
这里为10.13的版本
第二三行显示主机名为127.0.0.1
数据库版本为5.7.25
接下来为一些系统变量的设置
注意这里/* !12345 */ 不是注释 (/* */ 是MySQL的多行注释符)
它表示如果MySQL的版本大于4.1.1 则执行相应的语句
2.2 GTID信息
-- 是MySQL的注释符号
接下来是清除掉的GTID的设置
如果在备份时未使用 --set-gtid-purged=off 参数 则会出现这行
这里建议加入该参数,否则在还原到其他服务器时会出错
GTID是全局事务唯一标识符,在一个MySQL环境中保持唯一,主要用于复制
GTID_PURGED的数字代表该GTID的事务及以前的事务不包含在所有的BINLOG中,这意味着无法重现该事务
关于GTID后续解释
2.3 数据库和表的信息
接下来是备份数据库的语句
Current Database :mysql 代表当前进行的是mysql数据库
后面跟的是建数据库的语句(CREATE DATABASE mysql)
如果不存在的话(IF NOT EXISTS),如果存在也不会删除
之后使用该数据库(use mysql)
接下来是表结构相关的(Table structure for table)
如果已经有该表则先删除(DROP TABLE IF EXISTS)
之后是建立mysql数据库下表的表结构的语句(Create TABLE )
2.4 表数据的备份
接下来是表数据的备份(Dumping data for table)
首先锁定表不让其他进程写(LOCK TABLE WRITE)
然后使MySQL停止更新非唯一索引(ALTER TABLE DISABLE KEYS),这样能加快插入速度
之后将数据转换成insert语句(INSERT INTO)
之后重新建立丢失的索引(ALTER TABLE ENABLE KEYS)
最后释放锁(UNLOCK TABLES)
直到该数据库所有的表导出完毕后进行下一个数据库
2.5 结束备份
最后是备份的完成日期
3.总结
所以全库备份出来的语句主要包含如下内容
- 建立数据库(如果不存在)
- 使用数据库
- 删除表(如果存在)
- 建表
- 锁表
- 禁用非唯一索引
- 插入数据
- 启用非唯一索引(重建索引)
- 释放锁
另外:可能注意到了上面的语句中只有数据库和表的信息
没有存储过程 函数 触发器等的信息
所以默认这些是不导出的
今天的内容就到这里,欢迎查看
可点击阅读原文获得更好的阅读体验,推荐在PC端阅读
也可在公众号内回复 mysqldump 搜索相关内容
或直接打开个人网页搜索
http://www.zhaibibei.cn