实验环境:

  • MySQL 5.7.25
  • Redhat 6.10

前面我们建立了数据库并建立相关的对象

  • 数据库
  • 存储过程
  • 函数
  • 触发器
  • 事件

今天的内容为--masterr-data的使用

1. --master-data

该参数用于将主库的bin-log信息写入到dump文件中,即当前文件名(filename)和位置(position),用于主从复制的搭建

相当于执行了一次 show master;




mysqldump 导出表结构和数据 带列名 mysqldump 导出指定表_数据库


他有2个值可供选择

--master-data=1

会将change master 语句写入dump文件中

在从库导入后,配置主从无需再指定文件名和位置

--master-data=2

会将change master 语句写入dump文件中,只不过会被注释掉

在从库导入后,配置主从需要指定文件名和位置

建议使用该值

其他

除非指定--single-transaction开启,这个参数会将--lock-all-tables开启

2. 使用--master-data=2备份数据库

备份所有数据库


mysqldump -h127.0.0.1 -usystem -p123456  --single-transaction --set-gtid-purged=OFF  --all-databases  --master-data=2  --triggers --events --routines> /tmp/all_master.sql


备份test数据库


mysqldump -h127.0.0.1 -usystem -p123456  --single-transaction --set-gtid-purged=OFF  --databases test  --master-data=2   --triggers --events --routines> /tmp/test_all_master.sql


2. 内容解析

2.1 版本信息


mysqldump 导出表结构和数据 带列名 mysqldump 导出指定表_mysql_02


第一行是mysqldump的版本

这里为10.13的版本

第二三行显示主机名为127.0.0.1

数据库版本为5.7.25

接下来为一些系统变量的设置

注意这里/* !12345 */ 不是注释 (/* */ 是MySQL的多行注释符)

它表示如果MySQL的版本大于4.1.1 则执行相应的语句

2.2 master-data信息


mysqldump 导出表结构和数据 带列名 mysqldump 导出指定表_数据库_03


可以看出多了change master语句

同时是被注释掉的

2.3 数据库和表的信息


mysqldump 导出表结构和数据 带列名 mysqldump 导出指定表_mysqldump 导出指定表_04


接下来是备份数据库的语句

Current Database :test 代表当前进行的是mysql数据库

后面跟的是建数据库的语句(CREATE DATABASE test)

如果不存在的话(IF NOT EXISTS),如果存在也不会删除

之后使用该数据库(use test)

接下来是表结构相关的(Table structure for table)

如果已经有该表则先删除(DROP TABLE IF EXISTS)

之后是建立mysql数据库下表的表结构的语句(Create TABLE )

2.4 表数据的备份


mysqldump 导出表结构和数据 带列名 mysqldump 导出指定表_数据库_05


接下来是表数据的备份(Dumping data for table)

首先锁定表不让其他进程写(LOCK TABLE WRITE)

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

之后将数据转换成insert语句(INSERT INTO)

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

最后释放锁(UNLOCK TABLES)

直到该数据库所有的表导出完毕后进行下一个数据库

2.5 备份events


mysqldump 导出表结构和数据 带列名 mysqldump 导出指定表_MySQL_06


接下来是备份事件

导出事件(Dumping events for database 'test')

2.6 备份routines

MySQL中的routines 代表存储过程和函数


mysqldump 导出表结构和数据 带列名 mysqldump 导出指定表_mysql_07


导出routines(Dumping routines for database 'test')

之后是详细的建立语句

2.7 结束备份


mysqldump 导出表结构和数据 带列名 mysqldump 导出指定表_数据库_08


最后是备份的完成日期

3. 总结

可以看出在备份全库的时候使用--master-data有如下内容

  • 导出master信息
  • 建立数据库(如果不存在)
  • 使用数据库
  • 删除表(如果存在)
  • 建表
  • 锁表
  • 禁用非唯一索引
  • 插入数据
  • 启用非唯一索引(重建索引)
  • 释放锁
  • 导出视图
  • 导出events
  • 导出routines(存储过程和函数)

这里就是一个完整的备份语句,包含了MySQL所有的内容

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

7.mysqldump命令详解 Part 7- --master-data参数的使用

mysqldump 导出表结构和数据 带列名 mysqldump 导出指定表_mysqldump 导出指定表_09