MySQL备份和还原
备份:副本
Raid1,Raid10:保证硬件损坏而不会业务中止
备份类型:
热备份:读、写不受影响
温备份:仅可以执行读操作
冷备份:离线备份,读、写操作均中止
物理备份:复制数据文件
逻辑备份:将数据导出至文本文件中
完全备份:备份全部数据
增量备份:仅备份上次完全备份或增量备份以后变化的数据
差异备份:仅备份上次完全备份以来变化的数据
在线:物理完全备份
备份:数据、配置文件、日志、事务日志
MyISAM:温备份
InnoDB:xtrabackup,mysaldump
物理备份:速度快
逻辑备份:速度慢、丢失浮点精度,方便使用文本处理工具直接对其处理,可移植能力强
备份策略:完全+增量;完全+差异
每周完全+每日增量
完全备份:mysqldump
增量备份:备份二进制日志文件(flush logs)
MySQL备份工具:
mysqldump:逻辑备份工具、MyISAM(温)、InnoDB(热备份)
mysqlhotcopy:物理备份工具、温备份
文件系统工具:
cp:冷备份
lv:逻辑卷的快照功能,几乎热备
mysql>flush tables;
mysql>lock tables
创建快照:释放锁,而后复制数据
第三组工具:
ibbackup:商业工具
xtrabackup:开源工具
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
--single-transaction启动热备(指定的数据库中的表类型为InnoDB)
--all-databases:备份所有库
--databases DB_NAME,DB_NAME2,...:备份指定库
--events :备份事件
--routines:备份存储过程和存储函数
--triggers:备份触发器
mysqldump(完全备份)+二进制日志文件
完全+增量
mysqldump --master-data=2 --lock-all-tables --flush-logs --databases DB_NAME >/mysqlback/db_nam-date
备份
select * into outfile '/path/to/somefile.txt' from tb_name [where clause];
还原
load data infile '/path/to/somefile.txt' into table tb_name;
使用lvm快照进行数据库备份
前提:
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、增量备份二进制日志;
二进制日志相关的几个选项:
innodb_support_xa={TRUE|FLASE}
存储引擎事务在存储引擎内部被赋予了ACID属性,分布式(XA)事务是一种高层次的事务,它利用“准备”然后“提交”(prepare-then-commit)两段式的方式将ACID属性扩展到存储引擎外部,甚至是数据库外部。然而,“准备”阶段会导致额外的磁盘刷写操作。XA需要事务协调员,它会通知所有的参与者准备提交事务(阶段1)。当协调员从所有参与者那里收到“就绪”信息时,它会指示所有参与者进行真正的“提交”操作。
此变量正是用于定义InnoDB是否支持两段式提交的分布式事务,默认为启用。事实上,所有启用了二进制日志的并支持多个线程同时向二进制日志写入数据的MySQL服务器都需要启用分布式事务,否则,多个线程对二进制日志的写入操作可能会以与原始次序不同的方式完成,这将会在基于二进制日志的恢复操作中或者是从服务器上创建出不同原始数据的结果。因此,除了仅有一个线程可以改变数据以外的其它应用场景都不应该禁用此功能。而在仅有一个线程可以修改数据的应用中,禁用此功能是安全的并可以提升InnoDB表的性能。作用范围为全局和会话级别,可用于选项文件,属动态变量。
sync_binlog = 1