数据库的备份是非常重要的事情,危机来的时候可用于恢复。如同旱情的时候的水塔,粮荒时候的粮仓!那么我们的MYSQL的备份就相当的重要了!
话说备份有很多种,什么冷备,热备的;什么逻辑备份和物理备份的。还有什么单表备份,全库备份,全实列备份。估计学习并理解起来有点复杂和吃力,很多时候根本用不着,学了也白学了。
MYSQL的备份跟ORACLE备份有点区别!
ORACLE 备份使用RMAN工具,备份的时候直接采用物理BLOCK备份成文件,并且可以压缩。同时可以把参数文件,控制文件,日志文件打包进去。
ORACLE 还有个工具叫EXPDP/IMDP 导入导出,主要是该时间点的数据导出来。
那么MYSQL 有个工具叫MYSQLDUMP,该工具跟EXPDP一样属于导入导出的。属于逻辑导出工具,并且导出成类似于文本格式的SQL语句。包含建表,插入数据等。
物理备份速度快,不影响数据库。逻辑就慢些,也影响数据库一些性能。
MYSQL 没有物理备份工具,只好使用逻辑备份工具MYSQLDUMP
在MYSQL 有两种主流引擎 MYISAM和INNODB。
针对不同引擎要带上不同的参数,这一点比较ORACLE显得麻烦些。
mysqldump -u$MYUSER -p$MYPASS -h$HOST --databases test mysql > backup.SQL
-u 是连接用户
-p 是密码
-h 是IP地址
--databases 是要导出的数据库 也可以使用 -B 简写
$ 符合是SHELL的变量的取值符号.
脚本如下:
#!/bin/sh
MYUSER=root
MYPASS=2019
HOST=192.168.1.207
MYDUMP="mysqldump -u$MYUSER -p$MYPASS -h$HOST --databases test mysql > backup.SQL"
假如是MYISAM引擎呢? 要加额外参数 --lock-all-tables 锁定该库的所有表,不能写操作,这个就很那个了,因为MYISAM引擎没有UNDO表空间。
对于InnoDB将--lock-all-tables替换为--single-transaction
--single-transaction
该选项在导出数据之前提交一个 BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于事务表,例如 InnoDB 和 BDB。
现在大家用的MYSQL基本上都是INNODB引擎了,这下有轻松了些,我们只关注INNODB的备份参数就行了。
MYDUMP="mysqldump -u$MYUSER -p$MYPASS -h$HOST --databases test mysql--single-transaction> backup.SQL"
全备就解决了!好像每天全备有点遗憾,要是上午9点备了,下午18点崩溃了,使用全备只能恢复到上午9点的数据,那么这白天的数据就无法恢复算丢失了。
这样只能增加全备的频率,如果是大数据库的话又不合适!
怎么办呢? 那只有增量备份了
不过MYSQL的增量备份跟ORACLE增量备份不是同一个概念。ORACLE的增量备份是基于全备后的增量备份,是根据物理BLOCK的变化,它有个参数记录BLOCK的变化。MYSQL的增量备份只是备份全备后的日志。就是保存日志就行了。
这下就简单多了,不需要记太多,只要全备后,把日志也保存起来,手工物理文件方式就行了。
那么就要开启MYSQL的BINLOG,BINLOG类似于ORACLE的ARCHIVE_LOG。反正都是数据库的所有变化都记录在BINLOG里面了。
那就剩下个问题,就是我怎么知道要从哪个BINLOG文件开始呢?
这就要我们在全备的时候增加两个参数来识别
--flush-logs --master-data=2
--flush-logs为结束当前日志,生成新日志文件;
--master-data=2选项将会在输出SQL中记录下完全备份后新日志文件的名称,
这个--FLUSH-LOGS 类似于ORACLE 备份的时候切换日志味道!
MYDUMP="mysqldump -u$MYUSER -p$MYPASS -h$HOST--flush-logs--master-data=2--databases test mysql--single-transaction> backup.SQL"
那么我就打开该备份文件的头部,就知道要从这个BINLOG文件开始备份。
其他几个常用参数:
--compress, -C
在客户端和服务器之间启用压缩传递所有信息
--default-character-set
设置默认字符集,默认值为utf8
--port, -P
连接数据库端口号
领取专属 10元无门槛券
私享最新 技术干货