全量备份
保证数据安全,最简单而且有效的手段就是定期备份数据,这样出现任何问题导致的数据损失,都可以通过备份来恢复数据。
mysql全量备份,使用mysqldump来执行:
$mysqldump -uroot -p 数据库名 > xxx.sql
恢复数据:
$mysql -uroot 数据库名 < xxx.sql
优点:简单 缺点:占用磁盘大,备份、恢复时间长,数据库性能下降
增量备份
相比于全量备份,增量备份每次只备份相对于上一次备份变化的那部分数据,所以每次增量备份速度更快。
MySQL 自带了 Binlog,就是一种实时的增量备份。Binlog 里面记录的就是 MySQL 数据的变更的操作日志,开启 Binlog 之后,我们对 MySQL 中的每次更新数据操作,都会被记录到 Binlog 中。
Binlog 是可以回放的,回放 Binlog,就相当于把之前对数据库所有数据更新操作按照顺序重新执行了一遍,回放完成之后数据自然就恢复了。这就是 Binlog 增量备份的基本原理。
操作步骤:
- 首先使用
show variables like ‘%log_bin%’命令确认一下是否开启了 Binlog 功能 - 然后用
“show master status”命令可查看当前 Binlog 的状态,显示正在写入的 Binlog 文件,及当前的位置。 - 回放binlog:
mysqlbinlog --start-datetime "2020-02-20 00:00:00" --stop-datetime "2020-02-20 15:09:00" /usr/local/var/mysql/binlog.000001 | mysql -uroot
在回放 Binlog 的时候,指定的起始时间可以比全量备份的时间稍微提前一点儿,确保全量备份之后的所有操作都在恢复的 Binlog 范围内,这样可以保证恢复的数据的完整性。为了确保回放幂等,需要设置 Binlog 的格式为 ROW 格式
通过定期的全量备份,配合 Binlog,我们就可以把数据恢复到任意一个时间点。
HA
我们准备一台备用的数据库,把它的数据恢复成主库一样,然后实时地在主备数据库之间来同步 Binlog,主库做了一次数据变更,生成一条 Binlog,我们就把这一条 Binlog 复制到备用库并立即回放,这样就可以让备用库里面的数据和主库中的数据一直保持是一样的。一旦主库宕机,就可以立即切换到备用库上继续提供服务。这就是 MySQL 的高可用方案,也叫 MySQL HA。
3种典型HA方案:
此文章为3月Day7学习笔记,内容来源于极客时间《后端存储实战课》