MYSQL的备份和还原 备份 :副本 RAID1,RAID10 :保证硬件损坏而不会业务中止; 备份和还原 :可以保证因逻辑错误引起的数据丢失 备份类型 : 热备份 :读写不受影响 温备份 :仅可以执行读操作 冷备份 :离线备份,读、写操作均中止

物理备份和逻辑备份 物理备份 :复制数据文件 逻辑备份 :将数据导出至文本文件中

完全备份、增量备份和差异备份 备份什么: 数据、配置文件、二进制日志、事务日志 主从服务器架构

物理备份 :速度快 逻辑备份 :速度慢、丢失浮点数精度:方便使用文本处理工具直接对其处理,可移植能力强;

备份策略 :完全+增量 、 完全+差异 MYSQL备份工具 : mysqldump : 逻辑备份工具、MyISAM(温)、InnoDB(热备份) mysqlhotcopy : 物理备份工具、温备份 文件系统工具 : cp :冷备 lv : 逻辑卷的快照功能,几乎热备; FLUSH TABLES; LOCK TABLES 创建快照,释放锁,而后复制数据 第三组工具 : ibbackup : 商业工具 xtrabackup : 开源工具 MYSQL备份工具比较列表

mysqldump : 逻辑备份 mysqldump(完全备份)+二进制日志 完全+增量 备份单个数据库,或库中单个表 mysqldump DB_NAME [tb1] [tb2] mysqldump --master-data={0|1|2} 0 : 不记录二进制日志文件及路位置 1 :以CHNAGE MASTER TO的方式记录位置,可用于恢复后直接启动从服务器 2 :以CHNAGE MASTER TO的方式记录位置,但默认为被注释; --lock-all-tables : 锁定所有表 --flush-logs : 执行日志flush; 如果指定库中的表类型均为InnoDB,可使用--single-transaction启动热备; 备份多个库 : --all-databases : 备份所有库 --datebases DB_NAME,DB_NAME,... 备份指定库 --events 事件 --routines 存储过程、存储函数 --triggers 触发器

FLUSH TABLES WITH READ LOCK; 刷新表并使用读锁

备份策略 :周完全+每日增量 完全备份:mysqldump 增量备份:备份二进制日志文件(flush logs) 二进制日志 : set sql_log_bin=1 1=ON 0=OFF 二进制日志 : format statement row mixed mysqldump : --databases DB1,DB2,... --all-databases

逻辑备份 : 1、浮点数据丢失精度; 2、备份出的数据更占用存储空间,压缩后可大大节省空间; 3、不适合对大数据库做完全备份;

通常做单张表的备份 SELECT INTO OUTFILE '/path/to/somefile.txt' FORM tb_name [where clause] ; 只备份数据,不备份SQL命令 LOAD DATA INFILE '/path/to/somefile.txt' INTO ta_name;

几乎热备 :LVM snapshot 前提 : 1、数据文件要在逻辑卷上; 2、此逻辑卷所在卷组必须有足够空间使用快照卷; 3、数据文件和事务日志要在同一个逻辑卷上; 步骤 : 1、打开会话,施加读锁,锁定所有表; FLUSH TABLES WITH READ LOCK; 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、释放锁 UNLOCK TABLES; 5、挂载快照卷,备份 mount cp 6、删除快照卷 7、备份二进制日志

二进制日志相关的几个选项 : innodb_support_xa={TRUE|FLASE} sync_binlog=# 建议设定为1

percona : ibbackup :InnoDB online physical backup full incremental MyISAM : warm backup ,full LVM --> mylvmbackup (perl scripts)

xtrabackup xtradb : innodb的增强版 innodb :