实验环境:
前面我们建立了数据库并建立相关的对象
今天的内容为按条件备份表数据
我们来备份test数据库中的innodb_table表和isam_table表中id为10的数据
从这起开始在备份语句中加入--single-transaction 参数
该参数在innodb中可以不对表施加写入锁进行导出,MyISAM引擎还是锁表的
mysqldump -h127.0.0.1 -usystem -p123456 --single-transaction --set-gtid-purged=OFF --databases test --tables innodb_table isam_table --where='id=10' > /tmp/table_id.sql
注意这里 innodb_table 拥有id为10的数据 而 isam_table则没有
mysqldump -h127.0.0.1 -usystem -p123456 --single-transaction --set-gtid-purged=OFF --databases test --tables innodb_table isam_table --where='1 limit 1000000' > /tmp/table_id.sql
导出前1000000行数据
首先依然是mysqldump的版本信息 主机名信息
已经一些变量的设置
再次提醒 \/!123456\/ 不是注释
详情看上一节介绍
接下来是表的信息
首先是如果表存在则删除表(DROP TABLE IF EXISTS)
之后建立表(CREATE TABLE)
接下来是表数据的备份(Dumping data for table)
这里有提示只备份id=10的数据
首先锁定表不让其他进程写(LOCK TABLE WRITE)
然后使MySQL停止更新非唯一索引(ALTER TABLE DISABLE KEYS),这样能加快插入速度
之后将数据转换成insert语句(INSERT INTO)
之后重新建立丢失的索引(ALTER TABLE ENABLE KEYS)
最后释放锁(UNLOCK TABLES)
可以看出虽然isam_table表没有符合条件的数据
但是还是会导出表结构 只是没有数据的导入
可以看到isam_table表的触发器会一并导出
可以看出单独导出表的某行有如下内容
不同于全库备份没有如下内容
同时如果表中没有符合条件的行,表结构也是会导出的
同样不会导出存储过程和函数
今天的内容就到这里,欢迎查看