mysql备份的几种类型

2017/04/15 mysql

#mysql备份的几种类型 Backup and Recovery Types

##物理与逻辑备份 Backup and Recovery Types

物理备份 是直接拷备data目录的文件内容。适合于数据量较大,重要的数据备份,当问题发生时,以快速的恢复。

物理备份的特点: 它是精确的拷备data目录下的所有文件或部分文件 物理备份的速度比逻辑备份较快,因为它只是拷备,而不需要转化为sql语句 输出比逻辑备份更为紧凑 除了数据库外,这种备份还可以包含相关的文件,如日志,配置文件等 MEMORY中的表备份是比较棘手的,因为内容没在存储在磁盘上。(使用企业版的备份工具可以解决) 备份仅可移植到具有相同或相似硬件特性的其他机器上 备份可以在MySQL服务器没有运行时进行。如果服务器正在运行,则必须加上适当的锁LOCK,以便服务器在备份过程中不会更改数据库内容 可以使用系统命令如cp ,scp,tar rsync备份MyISAM表。

还原数据:直接拷备文件到相应的数据目录下

*逻辑备份 是保存数据库的结构如(CREATE DATABASE , CREATE TABLE语句),和数据内容(INSERT语句)。它适合于较少量的数据备份,你可能会编辑这些数据的内容或数据结构,或者在另一台机器上重建

逻辑备份的特点: 通过查询mysql服务器,获得数据库的结构和内容 它的备份速度比物理备份更慢。因为要访问mysql,将数据转化为SQL语句,还要将数据输出保存 输出的文件将比物理备份更大,占用更多空间,特别是保存为text格式的时候 备份和还原的粒度可以在服务器级(all databases),数据库级(某个数据库的所有表),表级(某个table),不管存储引擎是什么类型的 备份没有包含配置文件等相关的文件 备份需要mysql服务正在运行,关闭无法备份 逻辑备份的工具有mysqldump,mysqlpump,SELECT … INTO OUTFILE语句等,这些可以备份任何存储引擎的数据。包括MEMORY

还原数据:可以使用mysql客户端工具还原,对于txt的备份,可以使用LOAD DATA INFILE或mysqlimport还原

##在线与离线备份 Online Versus Offline Backups 服务器运行时的备份通常称为热备份(hot), 服务器停止时的备份通常称为冷备份(cold), 服务器运行时,锁住表,只读不能修改数据的备份常称为暖备份(warm)

##本地与远程备份 Local Versus Remote Backups mysqldump可以进行本地与远程备份,对于(create,insert语句)可以从本地或远程进行导出数据,内容可以导出到客户端,对于有格式的txt文件,导出至服务器端 SELECT … INTO OUTFILE 可以从本地或远程导出数据, 但是文件会创建在服务器端。 对于物理备份通常是从本地备份,可以脱机,虽然备份的目的地可能是远程服务器。

##快照备份 Snapshot Backups 一些文件系统实现“快照”备份功能。它提供在一个给定的时间点上的文件系统的逻辑副本,而不需要整个文件系统的物理副本。(例如,它的实现可以使用写时复制技术使文件系统的快照时间后只需要修改部分被复制。)MySQL本身不带文件系统快照提供能力。它可通过第三方解决方案如Veritas、LVM、或ZFS。

##全局与增量备份 Full Versus Incremental Backups 一个完整的备份,包括所有的数据由一个MySQL服务器在给定的时间点。一个增量备份包括在一个给定的时间跨度(从一个时间点到另一个时间点)的数据的变化。MySQL有不同的方法来执行完整备份,如本节前面所描述的。通过启用服务器的二进制日志,服务器用来记录数据的变化,从而实现了增量备份。


备份的方法 —-

##使用mysqldump备份 mysqldump程序可以备份。它可以备份所有类型的表。 InnoDB表,可以执在线备份,不需要锁,使用 –single-transaction选项

##使用复制表文件进行备份 对于每个表有独自的文件来表示的存储引擎,通过复制这些文件来备份相应的表。例如MyISAM表存储文件,所以很容易通过复制文件做一个备份(.FRM,.MYD,和*.MYI文件)。要获得一致的备份,停止服务器或锁定和刷新相关表:

FLUSH TABLES tbl_list WITH READ LOCK;

锁定表后只能读,不能写入,保证了数据完整性,FLUSH操作使相应的数据写入磁盘在备份之前。

##使用分隔符的txt文件备份 Making Delimited-Text File Backups

创建一个包含表数据的文本文件,你可以使用SELECT * INTO OUTFILE ‘file_name’ FROM tbl_name。输出的内容是保存在服务端,而不能保存在客户端。为了安全,存储位置不能存在相应的文件名。此方法用于任何类型的数据文件,但只保存表数据,而不表结构。

另外,还可以使用mysqldump –tab=DIR选项备份数据到文本文件。

重新导入文本文件内容 (delimited-text data file),可以使用 LOAD DATA INFILE 或 mysqlimport

##通过启用二进制日志进行增量备份 mysql支持增量备份。必需在启动mysql服务的时候加上–log-bin选项,开启二进制日志。 在进行全量或增量备份时,使用FLUSH LOGS 或 mysqldump –flush-logs刷新操作。

如,使用以下命令,先进行全局备份:

shell> mysqldump --single-transaction --flush-logs --master-data=2 \
         --all-databases > backup_sunday_1_PM.sql

导出的数据会包含如下内容

-- Position to start replication or point-in-time recovery from
-- CHANGE MASTER TO MASTER_LOG_FILE='gbichot2-bin.000007',MASTER_LOG_POS=4;

下一次增量备份的时候,使用如下命令,则会产生一个新的二进制日志文件gbichot2-bin.000008,而gbichot2-bin.000007包含了自上次备份以来的所有改变数据库的操作。

shell> mysqldump --single-transaction --flush-logs --master-data=2 \
         --all-databases > backup_Monday_1_PM.sql

如果日志不再需要,可以使用–delete-master-logs删除,但这样操作是很危险的,请参考PURGE BINARY LOGS 来清除日志。

shell> mysqldump --single-transaction --flush-logs --master-data=2 \
         --all-databases --delete-master-logs > backup_sunday_1_PM.sql

##通过复制slave进行备份 如果通过maste主服务器执行备份,有相应的性能问题,可以使用基于slave从服务器的备份 应该备份master中的bin log和relay log中继日志信息

##恢复损坏的表 如果恢复过程中,发生了问题损坏了MYISAM表,尝试使用REPAIR TABLE 或 myisamchk -r,应该可以修复99.9%的问题,如果还是失败,请参考http://dev.mysql.com/doc/refman/5.7/en/myisam-table-maintenance.html

##使用文件系统快照进行备份 如果你使用Veritas文件系统,可以使用下面的方式进行备份 From a client program, execute FLUSH TABLES WITH READ LOCK. From another shell, execute mount vxfs snapshot. From the first client, execute UNLOCK TABLES. Copy files from the snapshot. Unmount the snapshot.

http://dev.mysql.com/doc/refman/5.7/en/backup-types.html http://dev.mysql.com/doc/refman/5.7/en/backup-methods.html


Search

    Table of Contents