17.6 高手私房菜
技巧1:mysqldump备份的文件只能在MySQL中使用吗?
mysqldump备份的文本文件实际是数据库的一个副本,使用该文件不仅可以在MySQL中恢复数据库,而且通过对该文件的简单修改,可以使用该文件在SQL Server或者Sybase等其他数据库中恢复数据库。这在某种程度上实现了数据库之间的迁移。
技巧2:如何选择备份工具?
直接拷贝数据文件是最为直接、快速的备份方法,但缺点是基本上不能实现增量备份。备份时必须确保没有使用这些表。如果在拷贝一个表的同时服务器正在修改它,则拷贝无效。备份文件时,最好关闭服务器,然后重新启动服务器。为了保证数据的一致性,需要在备份文件前,执行以下SQL语句:
FLUSH TABLES WITH READ LOCK;
也就是把内存中的数据都刷新到磁盘中,同时锁定数据表,以保证拷贝过程中不会有新的数据写入。这种方法备份出来的数据恢复也很简单,直接拷贝回原来的数据库目录下即可。
mysqlhotcopy是一个PERL程序,它使用LOCK TABLES、FLUSH TABLES和cp或scp来快速备份数据库。它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件所在的机器上,并且mysqlhotcopy只能用于备份MyISAM表。mysqlhotcopy适合于小型数据库的备份,数据量不大,可以使用mysqlhotcopy程序每天进行一次完全备份。
mysqldump将数据表导成SQL脚本文件,在不同的MySQL版本之间升级时相对比较合适,这也是最常用的备份方法。mysqldump比直接拷贝要慢些。
技巧3:使用mysqldump备份整个数据库成功,把表和数据库都删除了,但使用备份文件却不能恢复数据库?
出现这种情况,是因为备份的时候没有指定--databases参数。默认情况下,如果只指定数据库名称,mysqldump备份的是数据库中所有的表,而不包括数据库创建语句。例如:
mysqldump -u root -p booksdb > c:/backup/booksdb_20110101.sql
该语句只备份了booksdb数据库下所有的表,读者打开该文件,可以看到,文件中不包含创建booksdb数据库的CREATE DATABASE语句,因此如果把booksdb也删除了,使用该sql文件不能还原以前的表,还原时会出现ERROR 1046 (3D000): No database selected的错误信息。必须在MySQL命令行下创建booksdb数据库,并使用use语句选择booksdb之后才可以还原。而下面的语句,数据库删除之后,可以正常还原备份时的状态。
mysqldump -u root -p --databases booksDB > C:\backup\books_DB_20110101.sql
该语句不仅备份了所有数据库下的表结构,而且包括了创建数据库的语句。