`
xumingrencai
  • 浏览: 1180266 次
文章分类
社区版块
存档分类
最新评论

MYSQL备份与恢复

 
阅读更多
1.mysqlhotcopy
其命令格式如下:
shell> mysqlhotcopy db_name /path/to/some/dir
只要服务器不再进行更新,还可以只复制所有表文件(*.frm、*.MYD和*.MYI文件)。
mysqlhotcopy脚本使用该方法。(但请注意如果数据库包含InnoDB表,这些方法不工作.InnoDB不将表的内容保存到数据库目录中,mysqlhotcopy只适合MyISAM表)。
2.mysqldump
mysqldump提供在线逻辑备份,我们在备份的时候使用single-transaction参数的话,MYSQL为我们提供一致性地读,并且保证mysqldump所看见的数据不会更改。(其它客户端对InnoDB表进行的更改不会被mysqldump进程看见)该参数自动关闭--lock-tables。
如果我们还有其它类型的表,我们必须假定在备份过程中它们不会更改。
例如,对于mysql数据库中的MyISAM表,我们必须假定在备份过程中没有对MySQL账户进行管理更改。
mysqldump命令产生的.sql文件包含一系列SQL INSERT语句,可以用来重载转储的表。
C:/Program Files/MySQL/MySQL Server 5.0/bin>mysqldump -uroot -p mytest >mytest.sql
mysqldump增量备份
要想进行增量备份,我们需要保存增量更改。应使用--log-bin选项启动MySQL服务器,以便更新数据时将这些更改保存到文件中。该选项启用二进制日志,因此服务器写将每个更新数据的SQL语句写入MySQL二进制日志。
C:/>mysqld --defaults-file="C:/Program Files/MySQL/MySQL Server 5.0/my.ini" --log-bin
我们可以在basedir找到以下MySQL二进制日志文件:
mochasof-8ed6b1-bin.000001
mochasof-8ed6b1-bin.000002
mochasof-8ed6b1-bin.000003
每次重启,MySQL服务器用序列中的下一个编号创建一个新的二进制日志文件。当服务器运行时,我们还可以通过执行FLUSH LOGS语句或mysqladmin flush-logs命令,告诉服务器关闭当前的二进制日志文件并创建一个新文件。
C:/Program Files/MySQL/MySQL Server 5.0/bin>mysqladmin -uroot -p flush-logs
该命令类似于ORACLE的alter system switch logfile命令(日志切换)。mysqldump也有一个选项来清空日志。
数据目录中的.index文件包含该目录下所有MySQL二进制日志的清单。该文件用于复制。
恢复时MySQL二进制日志很重要,因为它们是增量备份。如果进行完全备份时确保清空了日志,则后面创建的二进制日志文件包含了备份后的所有数据更改。让我们稍稍修改前面的mysqldump命令,让它在完全备份时能够清空MySQL二进制日志,以便转储文件包含包含新的当前的二进制日志,我们在basedir下看到MYSQL产生的最新的日志文件
mochasof-8ed6b1-bin.000004:
C:/>mysqldump -uroot -p --single-transaction --flush-logs --master-data=2 --all-databases> backup_all.sql
Backup.sql文件包含下列行:
-- Position to start replication or point-in-time recovery from
-- CHANGE MASTER TO MASTER_LOG_FILE='mochasof-8ed6b1-bin.000004', MASTER_LOG_POS=98;
-- Current Database: `mysql`
CREATE DATABASE `mysql` ;
USE `mysql`;
--master-data参数:
这个参数把二进制日志的位置和文件名写入备份文件中,如果该值等于1,在备份文件中将会打印一个CHANGE MASTER命令;如果该值等于2,在备份文件中将会给出一个包括CHANGE MASTER的注释,这个操作将会打开--lock-all-tables选项开关,除非和我们前边提到过的--single-transaction参数选项一起结合使用,这时--single-transaction优先级高于master-data,在备份期间人户引起日志改变的操作都自动将--lock-tables关闭。以下是从MYSQL的help中获得的信息。
--master-data[=#] This causes the binary log position and filename to be appended to the output. If equal to 1, will print it as a CHANGE MASTER command; if equal to 2, that command will be prefixed with a comment symbol. This option will turn --lock-all-tables on, unless --single-transaction is specified too (in which case a global read lock is only taken a short time at the beginning of the dump - don't forget to read about --single-transaction below). In all cases any action on logs will happen at the exact moment of the dump.Option automatically turns --lock-tables off.
因为mysqldump命令可以执行完全备份,这些行表示两件事情:
A、backup.sql文件包含所有写入mochasof-8ed6b1-bin.000004二进制日志文件或最新的文件之前的更改。
B、备份后所记录的所有数据更改不出现在backup.sql中,但出现在mochasof-8ed6b1-bin.000004二进制日志文件或最新的文件中。接下来我们可以清空日志开始新的二进制日志文件来创建增量备份。例如,执行mysqladmin flush-logs命令创建mochasof-8ed6b1-bin.000005。完全备份之后所有更改为文件mochasof-8ed6b1-bin.000004。该增量备份很重要,因此最好将它复制到安全的地方。(例如,备份到磁带或DVD上,或复制到另一台机器上)。以后我们执行另一个mysqladmin flush-logs命令创建mochasof-8ed6b1-bin.000006,mochasof-8ed6b1-bin.000005也应复制到某个安全的地方。
MySQL二进制日志占据硬盘空间。要想释放空间,应随时清空。操作方法是删掉不再使用的二进制日志,例如进行完全备份时:
C:/Program Files/MySQL/MySQL Server 5.0/bin>mysqldump -uroot -p --single-transaction --flush-logs --master-data=2 --delete-master-logs mytest > mytest_new.sql
注释:如果你的服务器为复制主服务器,用mysqldump --delete-master-logs删掉MySQL二进制日志很危险,因为从服务器可能还没有完全处理该二进制日志的内容。
PURGE MASTER LOGS语句的描述中解释了为什么在删掉MySQL二进制日志之前应进行确认
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics