mysqldump工具,是最流行的MySQL数据库的备份工具之一。
开发、运维DBA,都会用过。
如果开发,想要跟DBA运维要数据,DBA在50%甚至以上,都会用它。
一、mysqldump工具(小程序)
1.1 OUTFILE命令的改进
- 如果想备份整个数据库,使用OUTFILE命令就必须每一张表,就select一次。
- 比如,InnoDB支持事务,或支持MVCC。
- 输出的只是孤零零的数据,但不能还原。------------------------------ 最大的痛点
dump:
倾倒
1.2 mysqldump特点
- MySQL server自带,那就好说了,还不用安装
- 平衡了还原和阅读,是分别针对OUTFILE命令、后续要讲的xtrabackup来说的
1.3 mysqldump原理
本质:就是往MySQL中发SQL指令,查询到数据并导出到系统中的一个文件中。
- 即对select语句的结果不进行缓存,因为白白占用了server层的空间,同时,又不是热指令,使用频率很低
二、mysqldump的使用方法
mysqldump本身就是个程序,不是进入MySQL客户端才去操作的。
2.1 理论:保存为sql语句
--single-transaction
,即使用Repeatable Read
可重复读的隔离级别,可以确保我们从备份第一张表,到最后一张表,备份的内容都是同一时刻的。用MVCC实现。- 进入MySQL的客户端,直接执行一下这sql文件即可还原
2.2 演示
1.
使用新建的d1这个库:
里面有Z这个数据表:
查询一下该表:就三行数据
2.
退出数据库,进入Linux系统中:
查看mysqldump
的使用说明:
3.
- 因为mysqldump本身就是一个程序,跟MySQL平级的,所以要通过用户名、密码,来登录
备份文件如下:
4.
用cat命令,打开上述备份文件:
- 自动写了一个建表语句;
- 备份的时候不用加锁,但是还原的时候要加锁,保证数据一致性。插入数据的同时,还有自动的加锁、释放锁;
- 如果想还原:进入MySQL客户端,用source命令,执行下
其实,做技术也好,还是做用户体验也好:
其实技术早就已经实现了,但是别人做的没有这么好。你稍微改进下,你就能称为最流行的那个。
2.3 注意事项
2.4 不足
- 因为原理:是向MySQL数据库,发送SQL命令。然后,MySQL对其进行解析、查询硬盘上的数据页(B+树)、组织好数据返回给你、处理成Insert语句写到文本文件中。流程很长,一定不会太快,且会影响其他的select性能。
- 因为只要是通过SQL语句进行备份、还原,那么就一定会走MySQL。
三、小结
- 热备:运行过程中就能实现备份,不影响正常业务。如果使用InnoDB存储引擎,可以可重复读的事务的隔离级别,用MVCC功能,把这一时刻的数据给dump下来
- SQL:不只是干干的数据,能人类阅读,还能还原使用
- 因为原理决定了,必须走MySQL 的解析、查询、执行
Comments | NOTHING