http://cwtea.blog.51cto.com/4500217/1259509/
ysql 备份与恢复
--煮酒品茶
用官方的文档讲解
mysqldump
备份文件(MYISAM)
INNODB?
数据库备份(完全备份和增量备份)
mysqldump --tab=/path/to/some/dir --opt db_name
--tab
mysqldump创建一个包含创建表的CREATE TABLE语句的tbl_name.sql文件,和一个包含其数据的tbl_name.txt文件。选项值为写入文件的目录。
默认情况,.txt数据文件的格式是在列值和每行后面的新行之间使用tab字符。可以使用--fields-xxx和--行--xxx选项明显指定格式。
1 2 |
|
1 2 3 4 |
|
过程:
1、导出一个创建table语名气的文件
2、导出一个含有数值的txt文件,以tab分开
1 2 3 4 5 6 7 8 |
|
自动备份脚本的流程:
1、获取一系列的信息
2、以单前时间备份在目录中建立的以当前时间为目录的结构
1 |
|
增量备份:
A > Z
A--B(完备)--C(增量备份)--D(增量备份) > Z
mysql-bin.000001 (时间段) 0:00
mysql-bin.000002 (时间段) 0:00
mysql-bin.000003 (时间段) 0:00 ~ 6:00
6:00 --flush-logs
mysql-bin.000004 (时间段) 6:00 ~ 0:00
mysql-bin.000005 (时间段)
ySQL支持增量备份:需要用--log-bin选项来启动服务器以便启用二进制日志;参见5.11.3节,“二进制日志”。当想要进行增量备份时(包含上一次完全备份或增量备份之后的所有更改),应使用FLUSH LOGS回滚二进制日志。然后,你需要将从最后的完全或增量备份的某个时刻到最后某个点的所有二进制日志复制到备份位置。这些二进制日志为增量备份;恢复时,按照下面的解释应用。下次进行完全备份时,还应使用FLUSH LOGS或mysqlhotcopy --flushlogs回滚二进制日志。参见8.8节,“mysqldump:数据库备份程序”和8.9节,“mysqlhotcopy:数据库备份程序”。
如果MySQL服务器为从复制服务器,则无论选择什么备份方法,当备份从机数据时,还应备份master.info和relay-log.info文件。恢复了从机数据后,需要这些文件来继续复制。如果从机执行复制LOAD DATA INFILE命令,你应还备份用--slave-load-tmpdir选项指定的目录中的SQL_LOAD-*文件。(如果未指定,该位置默认为tmpdir变量值)。从机需要这些文件来继续复制中断的LOAD DATA INFILE操作。
如果必须恢复MyISAM表,先使用REPAIR TABLE或myisamchk -r来恢复。99.9%的情况下该方法可以工作。
1. 恢复原mysqldump备份,或二进制备份。
2. 执行下面的命令重新更新二进制日志:
3. shell> mysqlbinlog hostname-bin.[0-9]* | mysql
1 2 |
|
告诉服务器关闭当前的二进制日志文件并创建一个新文件。
1 |
|
mysqldump --delete-master-logs
MySQL二进制日志占据硬盘空间。要想释放空间,应随时清空。操作方法是删掉不再使用的二进制日志,例如进行完全备份时:
恢复:
导入完备:
1 |
|
1 |
|
现在这个点(周一)进行完全备份,下次完备(下周一) mysql-bin.000007
......(data)
mysql-bin.000007
周二进行增量备份
mysql-bin.000008
....(add table) table name:zhou2
周三进行增量备份
.... (add table) table name:zhou3s
1、完备
1 |
|
mysql-bin.000009 ~ mysql-bin.000010
有新数据
2、直接回GUNbin-log日志
周二
1 |
|
mysql-bin.000010 ~ mysql-bin.000011
周三
1 |
|
mysql-bin.000011 ~ mysql-bin.000012
2、备份bin-log日志
1 |
|
恢复过程:
1、恢复完备(OK)
1 |
|
#星期一的完备状态
2、恢复周二的增量备份
2.1、进入binlog目录
cd /data/mysql
2.2、执行以下命令(bin-log是时间段,一次执行多个)
*数据不一致,那么我们必须严格按照binlog顺序来进行恢复。
*假定周二删除A用户,周三有新用户申请A名称。
1 |
|
#星期二的状态(zhou2的库没有zhou3的库)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
9 rows in set (0.00 sec)
3、恢复周三的增量备份
备份目录:
增量备份目录:Zl-test-date
完全备份目录:Wb-test-date
TEST:
周三:(周三开始的)
mysql-bin.000012
周四:(周四开始的)
mysql-bin.000013
周五:(删除周四的,新建周五的)
mysql-bin.000014
mysql-bin.000015
备份机制:
周一完备,周二到周四增量备份
周一:完备后回GUN日志,同时备份的时候锁表和把表的内存刷入磁盘
周二到周日执行回GUN日志,并备份bin-log日志
结论:
增量备份是完全基于bin-log日志来进行的。
全备脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
增量备份脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|