[toc] 前面说了MySQL Linux平台和Windows平台的安装 下面开始是MySQL的一些学习笔记 前面我们说了如果构造数据 这节开始说MySQL 的备份 环境为MySQL 5.7.25 在解释命令之前我们先弄清楚数据库中有哪些对象 上一节我们建立了数据库并建立相关的对象 - 数据库 - 表 - 存储过程 - 函数 - 触发器 - 事件 这节讲一些mysqldump的命令 mysqldump导出是MySQL逻辑备份的一种广泛采用的方式 今天的内容为备份全库 ## 1. 备份语句 ### 1.1 备份所有数据库 我们使用如下语句来备份所有数据库 ``` mysqldump -h127.0.0.1 -usystem -p123456 --all-databases >/tmp/all.sql ``` 或者如下命令 ``` mysqldump -h127.0.0.1 -usystem -p123456 -A >/tmp/all.sql ``` [image:506 size:orig] 命令后警告信息后面章节介绍 ### 1.2 备份独立数据库 下面语句备份单独test数据库 ,多个数据库用空格隔开即可 ``` mysqldump -h127.0.0.1 -usystem -p123456 --databases test >/tmp/test.sql ``` ## 2. 备份内容解释 下面对备份出来的语句进行解释 ### 2.1 版本信息 [image:501 size:orig] 第一行是mysqldump的版本 这里为10.13的版本 第二三行显示主机名为127.0.0.1 数据库版本为5.7.25 接下来为一些系统变量的设置 注意这里/\* !12345 \*/ 不是注释 (/\* \*/ 是MySQL的多行注释符) 它表示如果MySQL的版本大于4.1.1 则执行相应的语句 ### 2.2 GTID信息 [image:502 size:orig] -- 是MySQL的注释符号 接下来是清除掉的GTID的设置 如果在备份时未使用 --set-gtid-purged=off 参数 则会出现这行 这里建议加入该参数,否则在还原到其他服务器时会出错 GTID是全局事务唯一标识符,在一个MySQL环境中保持唯一,主要用于复制 GTID_PURGED的数字代表该GTID的事务及以前的事务不包含在所有的BINLOG中,这意味着无法重现该事务 关于GTID后续解释 ### 2.3 数据库和表的信息 [image:503 size:orig] 接下来是备份数据库的语句 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 表数据的备份 [image:504 size:orig] 接下来是表数据的备份(Dumping data for table) 首先锁定表不让其他进程写(LOCK TABLE WRITE) 然后使MySQL停止更新非唯一索引(ALTER TABLE DISABLE KEYS),这样能加快插入速度 之后将数据转换成insert语句(INSERT INTO) 之后重新建立丢失的索引(ALTER TABLE ENABLE KEYS) 最后释放锁(UNLOCK TABLES) 直到该数据库所有的表导出完毕后进行下一个数据库 ### 2.5 结束备份 [image:505 size:orig] 最后是备份的完成日期 ## 3.总结 所以全库备份出来的语句主要包含如下内容 - 建立数据库(如果不存在) - 使用数据库 - 删除表(如果存在) - 建表 - 锁表 - 禁用非唯一索引 - 插入数据 - 启用非唯一索引(重建索引) - 释放锁 - 视图导出 另外:可能注意到了上面的语句中只有数据库和表的信息 没有存储过程 函数 触发器等的信息 所以默认这些是不导出的 经测试视图也会一并导出 今天的内容就到这里,欢迎查看