一、环境准备
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 的备份可恢复操作,应选取其他更优的资料备份恢复方案。