数据的重要性不言而喻,能影响到数据的事件很少,比如数据库宕机,磁盘损坏等,但是一旦出现,就是损失严重的事件
如何做到数据的备份从而将损失降到最低
简单且安全的做数据备份和恢复
就是利用数据库的全量备份,全量备份的命令如下
$mysqldump -uroot -p test > test.sql
备份出一个SQL文件,内置了创建库 表 数据等操作
但是全量备份的代价很高,因为会占用大量的资源
所以外加上增量备份,相比较于全量备份,增量备份每次只备份相较于上一次备份变化的部分数据,备份速度更快
MySQL还有着Binlog,实时的增量备份,BinLog中记录的就是MySQL数据库的操作日志,我们就用Binlog进行备份和恢复
首先是使用binlog进行备份的恢复
我们先试用show variables like ‘%log_bin%’ 来确认是否开启了binlog功能
然后可以看到是否开启了Binlog以及Binlog的文件位置
接下来我们可以执行binlog的恢复
我们首先执行一次全量的恢复
$mysql -uroot test < dump.sql
然后利用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时候,指定的范围可以尽量的大一些
后来就是多机房的MySQL HA,实现高可用
全量备份加上BInlog,可以保证数据的恢复,但是数据库宕机时间长了,会导致系统崩溃
所以我们完全可以搭建一个高可用的系统,做一个一主一备,在主备数据库之间进行同步的Binlog,主库做了一次数据变更,生成一条BinLog,然后同步到从库,一旦主库宕机,立刻切换到备用库上继续提供服务
MySQL自身提供了主从复制的能力,可以让一主一备两台MYSQL的数据库保持同步
但是主从复制是具有延迟,虽然可能是毫秒级的,但是一旦繁忙了,就会很明显
万一切换的时候,主从延迟很大,可能导致数据丢失,这种切换带来的数据丢失是不可逆的
所以如果不想丢数据,需要从库先同步完成数据,再进行读写,但是会有不可用时间,如果想要无延迟,就需要我们直接切换到从库,可能丢数据
或者更高一主多从,将主库设置为主要成功复制到一个从库就可以,那么肯定有一个从库的数据是一致的,可以即将这个库作为新主库,继续提供服务,但我们需要三台数据服务器来组成集群