环境配置
yum install mariadb-server -y
vim /etc/my.cnf
log_bin=/data/logbin/mariadb-bin
mkdir /data/logbin
chown mysql.mysql /data/logbin
systemctl start mariadb
mysql
MariaDB [(none)]> source hellodb_innodb.sql
MariaDB [hellodb]> show tables;
+-------------------+
| Tables_in_hellodb |
+-------------------+
| classes |
| coc |
| courses |
| scores |
| students |
| teachers |
| toc |
+-------------------+
mysqldump 进行完全备份
mysqldump -A --master-data=2 > /data/all.sql
grep -i 'mariadb-bin' /data/all.sql //找出备份时二进制的位置为 245
-- CHANGE MASTER TO MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=245;
修改数据,模拟数据库故障
MariaDB [hellodb]> insert into students(name,age,classid,teacherid)values('zhangsan',26,2,9);
rm -rf /var/lib/mysql/*
二进制日志备份
systemctl restart mariadb
MariaDB [(none)]> show binary logs;
+--------------------+-----------+
| Log_name | File_size |
+--------------------+-----------+
| mariadb-bin.000001 | 529 |
| mariadb-bin.000002 | 30358 |
| mariadb-bin.000003 | 1038814 |
| mariadb-bin.000004 | 245 |
+--------------------+-----------+
MariaDB [(none)]> set sql_log_bin=0;
mysqlbinlog --start-position 245 /data/logbin/mariadb-bin.000001 > /data/inc.sql
mysqlbinlog /data/logbin/mariadb-bin.000002 >> /data/inc.sql
mysqlbinlog /data/logbin/mariadb-bin.000003 >> /data/inc.sql
恢复完全备份和二进制日志备份
MariaDB [(none)]> source /data/all.sql
MariaDB [test]> source /data/inc.sql
-- 数据已经恢复
MariaDB [hellodb]> select * from students where name='zhangsan';
+-------+----------+-----+--------+---------+-----------+
| StuID | Name | Age | Gender | ClassID | TeacherID |
+-------+----------+-----+--------+---------+-----------+
| 26 | zhangsan | 26 | F | 2 | 9 |
+-------+----------+-----+--------+---------+-----------+
-- 开启二进制日志
MariaDB [hellodb]> set sql_log_bin=1;
思考
- 在开启了二进制日志情况下,进行了完全备份,记录了当时备份时二进制日志的位置。
- 之后,在某个时间点删除了数据库中的某个表,之后又添加了数据
- 怎样将删除的表找回来并且添加的数据还存在?
解答
- 备份 从完全备份二进制日志的位置到这个点的二进制日志的位置,假设这个备份文件为 binlog.sql
- 删除 从 binlog.sql这个文件中删除 (删表的语句)
- 恢复 利用完全备份文件和 binlog.sql这个文件恢复数据