Linux环境下数据库备份与恢复 (三)

2020-04-12 09:22发布

通常情况下,数据恢复成功有两个必要条件,首先是要有完整可用的数据库备份,其次要有连续完整没有缺失的二进制日志。如果两个条件都满足就可以恢复故障数据;如果仅仅满足第一个条件,只能做数据还原,对于上例来说,只能是数据库中的数据还原到备份时刻凌晨2:00时的状态,将会丢失凌晨2:00到上午9:37期间的数据;如果没有备份,仅仅有一段日志仍然会造成数据库数据的丢失,损失不可避免。因此,是否开启二进制日志是能否做数据库恢复的条件。

二进制日志(binlog)主要用途有两个,其一是做数据恢复,其二是进行数据库的复制。MySQL数据库默认没有开启二进制日志,如果要开启二进制日志需要在/etc/my.cnf中添加和配置server-id和log-bin选项,这个过程需要重启mysqld服务,此外还应注意的是,开启二进制日志会使数据库额外损失一定的性能,大约2%左右。如果是写操作频繁的生产库,应该开启,因为可以在出现数据损毁的极端情况时,通过二进制日志的恢复挽回丢数据的损失;但是如果不在乎部分数据的丢失或者数据库的数据以读操作(select)为主,考虑性能损耗的因素,可以不开启二进制日志。

开启二进制日志步骤:

1. 编辑/etc/my.cnf

2. 在[mysqld]下添加:

a) server-id=非零值

b) log-bin=mysql-bin

3. 重启mysqld服务

systemctl restart mysqld

其中,MySQL5.7版本要求server-id的值不能与其他存在复制关系的MySQL的server-id重复,其取值范围为1到2^32-1,不能为0否则二进制日志不能开启,通常该值设置为ip地址的末位段,这样确保网段内的server-id无重复值。

log-bin变量对应的mysql-bin为二进制日志的前缀名,默认二进制日志保存在datadir变量对应的数据文件路径中,为了降低二进制日志文件与数据文件同时损坏的几率,通常把二进制文件与数据文件分开存放,最好放在不同的磁盘中。例如:将二进制日志放在/binlogs中,这样需要提前创建该目录,并设置好相应的属主、属组和权限,否则mysqld重启会失败。相关配置如下:

1. root# mkdir /binlogs

2. root# chown mysql:mysql /binlogs

3. root# chmod 750 /binlogs

4. 在/etc/my.cnf中的[mysqld]后面添加:

a) server-id=非零值

b) log-bin=/binlogs/mysql-bin

5. 重启mysqld服务

systemctl restart mysqld

至此,二进制日志开启成功,可以登入mysql后用show binary logs; 命令查看所有的二进制日志。默认二进制日志的最大可为1G。其切换条件有三个:1. mysqld重启时会切换;2.日志到达了1G会自动切换;3.键入flush logs; 命令会自动切换。在开启了二进制日志的情况下,如果备份和日志齐全,当数据库数据出现损坏时,就可以对数据进行恢复了。