一、环境准备
1 、建立存放备份的目录以及存放二进位制日志的目录

   # mkdir /backup
   # chown -R mysql:mysql /backup
   # mkdir /binlogdir
   # chown mysql:mysql /binlogdir

2 、修改二进位制档案存放路径为新建目录下,并设定 innodb 每表一档案

 # vim /etc/my.cnf
   log-bin=/binlogdir/mysql-bin   #二进位制日志档案存放位置
   innodb_file_per_table = 1      #启用 InnoDB 表每表一档案,预设所有库使用一个表空间

3 、启动服务并建立资料库

   # service mysqld start
   # mysql -uroot -ptsb-net
   mysql> create database testdb;
   mysql> use testdb;
   mysql> CREATE TABLE tb1 (ID TINYINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, 
   Name CHAR(30) NOT NULL UNIQUE KEY, Age TINYINT UNSIGNED);
   mysql> insert into tb1 values (1,’Huchong’,24);
   mysql> insert into tb1 values (2,’Huafeng’,24);
   mysql> insert into tb1 values (3,’Jim’,21);
   mysql> insert into tb1 values (4,’Tom’,25);

二、进行备份(完全备份+增量备份+节点恢复)
1 、完全备份

# mysqldump -uroot -ptsb-net –lock-all-tables –flush-logs –events –routines –master-data=2 –all-databases > /backup/fulldata-`date +%F`.sql
    –single-transaction: 基于此选项能实现热备InnoDB表;mysql> show table statusG;可以检视表的型别,如果表的型别不是全部为 InnoDB,则需要使用–lock-all-tables;
    –events:备份资料的同时,备份事件排程器程式码;
    –master-data=2:在备份档案中记录当前二进位制日志的位置
    –all-databases:备份所有库
    –flush-logs:重新整理二进位制日志,产生一个新的二进位制日志档案

2 、模拟增量备份并进行增量备份

# mysql -uroot -ptsb-net
mysql> use testdb;
mysql> delete from tb1 where id = 4;  #模拟增量备份
mysql> show master status;
+——————+———-+————–+——————+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000002 |      297 |              |                  |
+——————+———-+————–+——————+
mysql> flush logs;
mysql> quit;
# mysqlbinlog /binlogdir/mysql-bin.000002 > /backup/cactidb-`date +%F`.sql #增量备份

三、产生新的二进位制事件并模拟资料库损坏

# mysql -uroot -ptsb-net
mysql> use testdb;
mysql> delete from tb1 where id = 3;
mysql> drop database testdb;    #模拟资料库损坏

四、资料库恢复
1 、恢复前的准备

mysql> set global sql_log_bin=0;                  #不需要记录二进位制日志
mysql> show global variables like ‘sql_log_bin’;  #检视二进位制日志状态
mysql> flush logs;            #滚动日志
mysql> show master status;

+——————+———-+————–+——————+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000004 |      107 |              |                  |
+——————+———-+————–+——————+
2 、汇入完全备份及增量备份

# mysql -u root -ptsb-net < /backup/fulldata-2015-07-17.sql # mysql -u root -ptsb-net < /backup/cactidb-2015-07-17.sql 3、节点恢复(目前日志档案是mysql-bin.000004,所以我们需要恢复的档案是mysql-bin.000003) # mysqlbinlog  /binlogdir/mysql-bin.000003    #检视日志档案 # mysqlbinlog --stop-position=297 /binlogdir/mysql-bin.000003 > /backup/last.sql
# mysql -u root -ptsb-net < /backup/last.sql  # mysql -u root -ptsb-net mysql> use testdb;
mysql> select * from tb1;

五、收尾工作

mysql> set global sql_log_bin=1;    #开启二进位制日志记录
mysql> quit;
# service mysqld restart

总结:mysqldump 工具对 InnoDB 储存引擎的表可实现热备,备份时可以不锁定表,否则在备份前需要锁定表,只能实现温备。当备份的资料 量较大时,恢复时间会很长,因为恢复是把一条一条的 sql 语句读取后在 mysql 中执行,是写入操作。所以建议在资料量不大时可以使用此工具进行备份操 作,但当随著资料增长此工具将不适合进行 mysql 的备份可恢复操作,应选取其他更优的资料备份恢复方案。