基础概念
为什么要备份?
- 灾难恢复: 硬件故障,软件故障,自然灾害,黑客攻击,误操作;
- 测试:
要点:
- 能容忍最多丢失多少数据;
- 恢复数据需要在多长时间内完成;
- 需要恢复哪些数据;
- 做还原测试,用于测试备份的可用性;
- 还原演练;
备份类型:
- 完全备份,部分备份;
- 完全备份,增量备份,差异备份;
- 热备份,温备份,冷备份;
- MyISAM: 温备,不能热备;
- InnoDB: 热备;
- 物理备份(文件),逻辑备份(sql导出导入,会丢失精度);
备份需要考虑的因素:
- 持锁多久
- 备份过程的时长
- 备份负载
- 恢复过程的时长
备份什么?
- 数据
- 二进制日志,InnoDB的事务日志
- 代码(存储过程,存储函数,触发器,事件调度器)
- 服务器的配置文件
设计备份方案:
- 完全 + 增量;
- 备份手段: 物理,逻辑;
备份工具:
- mysqldump: 逻辑备份工具,适用于所有存储引擎,温备:完全备份,部分备份;对InnoDB存储引擎支持热备份;
- cp,tar等复制归档工具: 物理备份工具,适用于所有存储引擎:冷备;完全备份,部分备份;
- mysqlhotcopy: 几乎冷备; 仅适用于MyISAM存储引擎;
备份工具的选择:
- mysqldump + 复制binlog:
- mysqldump: 完全备份;
- 复制binlog中指定事件范围event:增量备份;
- lvm2快照 + 复制binlog:
- lvm2快照: 使用cp或tar等做物理备份: 完全备份;
- 复制binlog中指定时间范围的event: 增量备份;
- xtrabackup:
- 由percona提供的支持对InnoDB做热备(物理备份)的工具;
- 完全备份,增量备份;
mysqldump命令行工具使用
客户端命令,通过mysql协议连击至mysqld服务器:
mysqldump [option] [db_name [tbl_name ...]]
shell> mysqldump [option] db_name [tbl_name ...] # 这种方式不会导出创建数据库语句,导入须手动创建数据库
shell> mysqldump [option] --database db_name ...
shell> mysqldump [option] --all-databases
MyISAM: 支持温备;锁定备份库,而后启动备份操作;
锁定方法:
--lock-all-tables: 锁定所有库的所有表;
--lock-tables: 对于每个单独的数据库, 在启动备份之前锁定其所有表;
InnoDB: 支持热备;
--single_transaction
其他选项:
-E, --events: 备份指定数据库相关的所有event scheduler;
-R, --routines: 备份指定数据库相关的所有存储过程和存储函数;
--triggers: 备份表相关的触发器;
--master-data[=#]
1: 记录为CHANG MASTER TO语句, 此语句不被注释;
2: 记录为注释的CHANGE MASTER TO语句;
--flush-logs:锁定表完成后,执行flush logs命令;
注意: 二进制文件不应该与数据文件放在同一磁盘
练习: 有一100MB级别的数据库
- 备份脚本;
- 制作备份策略;
基于LVM2备份
- 请求锁定所有表;
- 记录二进制文件爱及事件位置;
- 创建快照;
- 释放锁;
- 挂载快照卷,执行数据备份;
- 备份完成后,删除快照卷;
- 制定好策略,通过原卷备份二进制日志;
systemctl stop mariadb.service
mkdir -pv /data/mysql
chown -R mysql.mysql /data/mysql
# fdisk 创建一个新分区
partx -a /dev/sda
pvcreate /dev/sda7
vgcreate myvg /dev/sda7
lvcreate -L +5G -n mydata myvg
lvs
mkfs.xfs /dev/myvg/mydata
mount /dev/myvg/mydata /data/mysql
# my.cnf 修改datadir
systemctl start mariadb.service
mysql> show master status;
mysql> FLUSH TABLES WTIH READ LOCK;
mysql> FLUSH LOGS;
mysql> show master status;
# shell> mysql -e 'show master status' > /path/to/smmefile
lvcreate -L 500M -s -n mydata-snap -p -r /dev/myvg/mydata
mysql> unlock tables;
mount -r /dev/myvg/mydata-snap /mnt
cp -a /mnt/* /data/mysql/
xtrabackup
percona, www.percona.com
percona-server