下面主要针对的是InnoDB存储引擎。流水帐般的记录一下mysql的备份和恢复相关。
理备份与逻辑备份
物理备份是通过对数据库所保存的目录和文件进行拷贝来实现备份的。适用与大型、重要的数据库,并且需要在出现问题时可以快速恢复的情况。
逻辑备份保存的是数据库的创建语句和插入语句。这类备份适合备份少量数据,而且备份后可能还会修改表结构或者数据。这里备份可以将数据回复到一个不同的机器上。
物理备份速度快。因为备份的是数据库的文件,所以从备份粒度比较大,可能是数据库级别,是否可以到达表级别,要看使用的存储引擎。并且备份的内容可能也包含日志的部分或者配置的部分。存储在内存中的表通过这样的方法就无法进行备份。这样的备份可能无法在其他不同配置或者类型的机器上进行恢复。物理备份需要在数据库没有在运行或者加锁之后进行备份,防止备份过程中数据发生变化。
逻辑备份速度慢,备份出来的数据也比物理备份出来的数据要大很多。但是逻辑备份的结果可以跨存储引擎和机器来实现恢复。备份和恢复的粒度也可以灵活控制。并且可以实现备份内存表。逻辑备份不需要mysql停机,可以在线备份。
在线备份与离线备份
在线备份又叫热备份。离线备份又叫冷备份。温备份一般指数据库不停止,但是禁止对数据进行修改的情况下进行备份。
在线备份显然比离线备份对线上业务的影响要小很多。很多时候只需要加少量的锁就可以实现。相反的,在线恢复对线上业务的影响就很大。因为恢复的时候有可能对所有的数据进行写。
本地备份与远程备份
这也没啥好说的。select * into outfile. 这样的备份语句产生的文件保存在数据库所在机器上。
全量备份与增量备份
全量备份的方法,上面已经说过了。增量备份的方法就是开启mysql的binary log来记录从某个时间点到另一个时间点对数据的更改。
使用mysqldump备份
mysqldump可以备份各种类型的表。如果要在线无锁备份数据,则可以添加 --single-transaction参数。
使用导出文件备份数据
使用这样的语句(SELECT * INTO OUTFILE 'file_name' FROM tbl_name.)可以导出表中的数据。导出的文件是在mysql所在的服务器上,而且导出文件不能是已经存在的。这样的方式只能导出表内容,无法导出表结构。
恢复数据的时候可以使用load data语句。
使用binary log进行增量备份
使用bianry log可以使数据恢复到任意时刻。配合全量备份可以完美实现任意时刻数据的备份和恢复。
使用备份服务器进行备份
如果不想在备份的时候影响线上数据库的性能。那就可以考虑使用主备架构中的备份服务器进行备份,而不是在主服务器上进行备份。
如果要用在备份机上做备份,则同时要备份备份机上的连接元数据存储库和元数据存储库。如果备份库上曾经执行过load data之类的语句,那么相关的sql文件也需要进行备份。这些文件一般保存在slave_load_tmpdir配置的目录下。如果没有设置过这个参数,这些文件会保存在tmpdir系统参数指向的目录。
使用文件系统快照进行备份
如果你使用的是支持快照功能的文件系统,可以使用下面的方法进行备份。
a、从一个客户端执行FLUSH TABLES WITH READ LOCK.
b、在另一个终端里执行:mount vxfs snapshot.
c、重新去地一个客户端里执行:UNLOCK TABLES.
d、从snapshop拷贝文件
e、unmount snapshot




