对于DBA来说,备份和恢复是一项最基本的操作,在服务器宕机、磁盘损坏、RAID卡损坏等意外情况下,要保证数据不丢失或者丢失量在可接受范围内,每个DBA应该时刻关注所负责的数据库备份情况。个人认为,一个合格的DBA每天来公司的第一件事不应该是倒水喝茶,而应该是查看数据库的备份情况。这里我们首先来看备份的一些方法,根据备份的方法不同可以讲备份分为:

Hot Backup、热备

Cold Backup、冷备

Warm Backup、温备

热备是指在数据库运行中直接备份,对正在运行的数据库操作没有任何的影响,也称之为在线备份;

冷备是指在数据库服务关闭的情况下进行备份,这种备份最为简单,一般只需要复制相关的数据库物理文件即可;

温备同样实在数据库运行过程中进行的,但是会对挡墙的数据库的操作产生一定的影响。例如加一个全局的读锁来保证备份数据的一致性。

按照备份后文件的内容来分,备份又可以分为逻辑备份与物理备份。

其中逻辑备份是指备份出来的文件内容是可读的,内容一般是由表数据组成的,例如我们最常用的mysqldump和select into outfile的方法,这列方法的好处是可以观察导出文件的内容,一般用于数据库的升级,迁移等工作中,它的优点是备份完的文件比较小,缺点是备份的时间较长。

物理备份是指复制数据库的物理文件,既可以在数据库运行中进行复制,也可以在数据库停止的时候直接复制数据文件,这种备份方法备份速度快,需要的时间一般较短,常用的工具有innobackup和xtrabackup这类工具,它的缺点是备份的文件可能会比较大、恢复时候的跨平台性较差。

按照备份数据库的内容来分,又可以分为完全备份、增量备份和日志备份,完全备份指的是对数据库进行一个完整的备份,增量备份指的是在上次完全备份的基础上,对更改的数据进行备份,而日志备份指的是对MySQL数据库日志的备份,通过日志重做来完成数据库的恢复工作。

mysqldump是最常用的备份方法,它是逻辑备份的一种,它的语法如下:

1mysqldump [arguments] > file_name这里给出最常用的一些备份方法:

1#备份所有数据库2mysqldump -uroot -p --all-databases > dump.sql3#备份指定数据库4mysqldump -uroot -p --databases db1 db2 db3 > dump.sql5#备份数据库的结构6mysqldump -uroot -p --no-data --databases db1 db2 db3 > dump.sql7#备份数据库中的两张表8mysqldump -uroot -p mydb t1 t2 > dump.sql一些重要参数如下:

--single-transaction

--master-data=[value]

还有一些需要注意的点,当我们想要复制一个数据库上的数据,来将它恢复到一个从库上时,需要启用--master-data这个参数,当value的值为1的时候,该参数会产生转存备份数据库中的change master语句,当value值为2的时候,change master语句被写成SQL注释,默认的情况下,这个值为空。

还有一些其他的参数,例如备份时间的--events、备份存储过程的--routines、备份触发器的--triggers等,大家可以下面自行查看。

除了mysqldump之外,就是select into outfile这种方法用的最多了,因为它能够很快的备份一个比较小的表里面的数据,它还包含很多输出格式参数,select ...into outfile方法导出的文件可以使用load data infile来进行恢复,这个语法必须拥有file权限,时间关系,后续再细说。今天就先写到这里。