实验环境:
前面我们建立了数据库并建立相关的对象
今天的内容为导出MySQL所有的对象
事件 函数 存储过程
我们来备份数据库并且备份其中的触发器,函数和存储过程
从这起开始在备份语句中加入--single-transaction 参数
该参数在innodb中可以不对表施加写入锁进行导出,MyISAM引擎还是锁表的
通过前面实验我们知道了 备份单独数据库或表的话触发器是会导出的
而其他的是不会导出的
备份所有数据库
mysqldump -h127.0.0.1 -usystem -p123456 --single-transaction --set-gtid-purged=OFF --all-databases --triggers --events --routines> /tmp/test_all.sql
备份test数据库
mysqldump -h127.0.0.1 -usystem -p123456 --single-transaction --set-gtid-purged=OFF --databases test --triggers --events --routines> /tmp/test_all.sql
这里备份test数据库及下面的触发器 事件 存储过程和函数
第一行是mysqldump的版本
这里为10.13的版本
第二三行显示主机名为127.0.0.1
数据库版本为5.7.25
接下来为一些系统变量的设置
注意这里/* !12345 */ 不是注释 (/* */ 是MySQL的多行注释符)
它表示如果MySQL的版本大于4.1.1 则执行相应的语句
接下来是备份数据库的语句
Current Database :test 代表当前进行的是mysql数据库
后面跟的是建数据库的语句(CREATE DATABASE test)
如果不存在的话(IF NOT EXISTS),如果存在也不会删除
之后使用该数据库(use test)
接下来是表结构相关的(Table structure for table)
如果已经有该表则先删除(DROP TABLE IF EXISTS)
之后是建立mysql数据库下表的表结构的语句(Create TABLE )
接下来是表数据的备份(Dumping data for table)
首先锁定表不让其他进程写(LOCK TABLE WRITE)
然后使MySQL停止更新非唯一索引(ALTER TABLE DISABLE KEYS),这样能加快插入速度
之后将数据转换成insert语句(INSERT INTO)
之后重新建立丢失的索引(ALTER TABLE ENABLE KEYS)
最后释放锁(UNLOCK TABLES)
直到该数据库所有的表导出完毕后进行下一个数据库
接下来是备份事件
导出事件(Dumping events for database 'test')
MySQL中的routines 代表存储过程和函数
导出routines(Dumping routines for database 'test')
之后是详细的建立语句
最后是备份的完成日期
可以看出导出mysql所有对象有如下内容
这里就是一个完整的备份语句,包含了MySQL所有的内容
今天的内容就到这里,欢迎查看