数据库的备份是非常重要的事情,危机来的时候可用于恢复。如同旱情的时候的水塔,粮荒时候的粮仓!那么我们的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的变量的取值符号.

脚本如下:

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

连接数据库端口号