常见MySQL数据库备份工具和备份方式比较

原文 Hands on MySQL Backup & Migration

本文在原文的基础上稍有删减。

用以备份的工具

1. mysqldump
http://dev.mysql.com/doc/refman/5.0/en/mysqldump.html

2. mysqlhotcopy
http://dev.mysql.com/doc/refman/5.0/en/mysqlhotcopy.html

3.mysqlsnapshot
http://jeremy.zawodny.com/mysql/mysqlsnapshot/

4.ibbackup
http://www.innodb.com/hot-backup/order/

联机备份 .VS. 脱机备份

联机备份通常使用在不能接受数据库停机的情况下,一般来说,脱机备份速度快,并且发生错误的几率少,我们不用担心数据库正在执行事务,锁表等容易发生一致性问题的发生。如果你幸运的可以停下数据库或者有一个主从方式的数据库,请使用脱机方式备份。

Data Dump vs Raw backups

Data dump 输出一系列SQL 语句序列,可以在后来用来重新创建数据库的结构并恢复数据。mysqldump 是这个领域的首选工具,他可以用在任意类型的表上面,无论是本地的还是网络的。当然,由于要产生很多额外的SQL语句,导出结果将是一个很大的文件并且占用很多CPU资源,最重要的是,当数据恢复后需要一次完全的索引重建。

更有效率的方法是是对MySQL数据库的物理文件做一次快照(snapshot)。因为我们跳过了很多转化步骤,因此处理起来比较高效。 做一个MyISM数据表的备份只要拷贝磁盘上数据文件和索引文件。对InnoDB,需要备份对应表空间和关联的事务日志。

mysqldump / mysqlhotcopy / mysqlsnapshot / ibbackup

mysqldump – (online, dump) – 最一般的工具,他会通过锁表的方式从一个联机数据库中做数据导出并写到指定的文件中(磁盘或网络上)。他只适合小的数据库。

# typical mysql dump backup and restore usage
mysqldump -u root -pPassword -x --all-databases > db_dump.sql
mysql -u root -pPassword < db_dump.sql

# dump into 'backup' folder (local machine), into two text files <data, table_structure>
mysqldump -T backup --fields-terminated-by=',' database-name -u root -pPassword

# compress the dumped data on the fly
mysqldump -u root -pPassword --all-databases | bzip2 -c > db_dump.bz2

mysqlhotcopy – (online, raw) 将对由 ISAM或MyISAM 表构成的数据库做一个完全的物理备份。他的操作方式:对所有表获取一个只读锁=>做文件拷贝=>释放锁。

# perform an online backup into /backup/location
mysqlhotcopy -u root -p password database_name /backup/location

mysqlsnapshot – (online, raw) 一个非常好的工具用来在联机方式下获得MySQL数据库的一个快照。可以配置它来压缩数据,并/或 为每一个数据库提供一个分离的tar文件。 不过他只适合 MyISAM 类型数据库。

# save a full database snapshot of an online database into /backup/location
mysqlsnapshot -u root -pPassword -s /backup/location

# restore a snapshot
tar -xvf /backup/location/db.tar

ibbackup – (online, raw) 可以对使用InnoDB和MyISAM表的任何数据库做联机备份。是一个很好的工具就是要收费.当然如果你是一个InnoDB的用户,还是值得花钱购买的。

# perform online backup of MyISAM / InnoDB tables
ibbackup /etc/my.cnf /etc/ibbackup.cnf

# restore recent backup (as configured in ibbackup.cnf)
ibbackup --restore /etc/ibbackup.cnf

cp, scp, nc – (offline, raw) 如果你可以停下数据库,则可以使用这几个工具直接拷贝数据库目录下的文件。是获取数据库快照的最安全方法。

Popularity: 3% [?]

Related