马哥学习笔记十九——MySQL进阶之备份和还原
备份:副本
RAID1,RAID10:保证硬件损坏而不会业务中止;
备份类型:
热备份、温备份和冷备份
热备份:读、写不受影响;
温备份:仅可以执行读操作;
冷备份:离线备份;读、写操作均中止;
物理备份和逻辑备份
物理备份:复制数据文件;
逻辑备份:将数据导出至文本文件中;
完全备份、增量备份和差异备份;
完全备份:备份全部数据;
增量备份:仅备份上次完全备份或增量备份以后变化的数据;
差异备份:仅备份上次完全备份以来变化的数据;
备份什么:
数据、配置文件、二进制日志、事务日志
物理备份:速度快
逻辑备份:速度慢、丢失浮点数精度;方便使用文本处理工具直接对其处理、可移植能力强;
备份策略:完全+增量;完全+差异
MySQL备份工具:
mysqldump: 逻辑备份工具、MyISAM(温)、InnoDB(热备份)
mysqlhotcopy:物理备份工具、温备份
文件系统工具:
cp:冷备 lv: 逻辑卷的快照功能,几乎热备;
mysql> FLUSH TABLES;
mysql> LOCK TABLES
创建快照:释放锁,而后复制数据
第三组工具:
ibbackup: 商业工具
xtrabackup: 开源工具
mysqldump: 逻辑备份
mysqldump(完全备份)+ 二进制日志
完全+增量:
备份单个数据库,或库中特定表
mysqldump DB_NAME [tb1] [tb2]
--master-data={0|1|2}
0: 不记录二进制日志文件及事件位置;
1:以CHNAGE MASTER TO的方式记录位置,可用于恢复后直接启动从服务器;
2:以CHANGE MASTER TO的方式记录位置,但默认为被注释;
--lock-all-tables:锁定所有表
--flush-logs: 执行日志flush
如果指定库中的表类型均为InnoDB,可使用--single-transaction启动热备(不要和--lock-all-tabes同时使用);
备份多个库:
--all-databases: 备份所有库
--databases DB_NAME,DB_NAME,...: 备份指定库
--events
--routines
--triggers
备份策略:每周完全+每日增量
完全备份:mysqldump
增量备份:备份二进制日志文件(flush logs)
逻辑备份:
1、浮点数据丢失精度;
2、备份出的数据更占用存储空间,压缩后可大大节省空间;
3、不适合对大数据库做完全备份;
mysql>show engine innodb status;查看innodb存储引擎状态
备份:
SELECT * INTO OUTFILE '/path/to/somefile.txt' FROM tb_name [WHERE clause];
还原:
LOAD DATA INFILE '/path/to/somefile.txt' INTO TABLE tb_name;
几乎热备:LVM快照备份
snapshot:
前提:
1、数据文件要在逻辑卷上;
2、此逻辑卷所在卷组必须有足够空间使用快照卷;
3、数据文件和事务日志要在同一个逻辑卷上;
步骤:
1、打开会话,施加读锁,锁定所有表;
mysql> FLUSH TABLES WITH READ LOCK;
mysql> FLUSH LOGS;
2、通过另一个终端,保存二进制日志文件及相关位置信息;
$ mysql -uroot -p -e 'SHOW MASTER STATUS\G' > /path/to/master.info
3、创建快照卷
# lvcreate -L # -s -p r -n LV_NAME /path/to/source_lv
4、释放锁
mysql> UNLOCK TABLES;
5、挂载快照卷,备份
mount
cp
6、删除快照卷;
7、增量备份二进制日志;