MySQL的备份与恢复( 二 )


Mysql的增量备份需要开启二进制功能 。

[root@localhost /]# vim /etc/my.cnf
log-bin=/usr/local/mysql/mysql-bin 添加
[root@localhost /]# systemctl restart mysqld
[root@localhost /]# ls -l /usr/local/mysql/mysql-bin.*
-rw-rw----. 1 mysql mysql 120 8月 10 09:43 /usr/local/mysql/mysql-bin.000001
-rw-rw----. 1 mysql mysql 34 8月 10 09:43 /usr/local/mysql/mysql-bin.index
MySQL企业备份案例
1、 一般恢复
1) 添加数据库、表、录入信息
mysql> create database local;
mysql> use local;
Database changed
mysql> create table test(id int);
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test values(1);
Query OK, 1 row affected (0.00 sec)
mysql> insert into test values(2);
Query OK, 1 row affected (0.01 sec)
2) 先进行一次完全备份
[root@localhost ~]# mkdir /mysql_back
[root@localhost ~]# mysqldump -uroot -p local test >/mysql_back/local_test-$(date +%F).sql
Enter password:
[root@localhost ~]# ls /mysql_back/
local_test-2020-08-10.sql
[root@localhost ~]# mysqladmin -uroot -p flush-logs 生产新的二进制文件
Enter password:
[root@localhost ~]# ls -l /usr/local/mysql/mysql-bin.*
-rw-rw----. 1 mysql mysql 894 8月 10 10:03 /usr/local/mysql/mysql-bin.000001
-rw-rw----. 1 mysql mysql 120 8月 10 10:03 /usr/local/mysql/mysql-bin.000002
-rw-rw----. 1 mysql mysql 68 8月 10 10:03 /usr/local/mysql/mysql-bin.index
3) 继续录入新的数据并进行增量备份
mysql> insert into test values(3);
Query OK, 1 row affected (0.01 sec)
mysql> insert into test values(4);
Query OK, 1 row affected (0.00 sec)
[root@localhost ~]# mysqladmin -uroot -p flush-logs
Enter password:
[root@localhost ~]# ls -l /usr/local/mysql/mysql-bin.*
-rw-rw----. 1 mysql mysql 894 8月 10 10:03 /usr/local/mysql/mysql-bin.000001
-rw-rw----. 1 mysql mysql 595 8月 10 10:06 /usr/local/mysql/mysql-bin.000002
-rw-rw----. 1 mysql mysql 120 8月 10 10:06 /usr/local/mysql/mysql-bin.000003
-rw-rw----. 1 mysql mysql 102 8月 10 10:06 /usr/local/mysql/mysql-bin.index
[root@localhost ~]# cp /usr/local/mysql/mysql-bin.000002 /mysql_back/
如此00003就保留插入2个数据的操作 。
4) 模拟误操作删除test表
[root@localhost ~]# mysql -uroot -p -e 'drop table local.test;' 删除
Enter password:
[root@localhost ~]# mysql -uroot -p -e 'select * from local.test;' 查询
Enter password:
ERROR 1146 (42S02) at line 1: Table 'local.test' doesn't exist
5) 恢复操作
在执行恢复操作时,需要先恢复完全备份,然后恢复增量备份 。
[root@localhost mysql_back]# mysql -uroot -p local </mysql_back/local_test-2020-08-10.sql
Enter password:
[root@localhost mysql_back]# mysql -uroot -p -e ' select * from local.test;'
Enter password:
+------+
| id |
+------+
| 1 |
| 2 |
+------+ 注意:缺少3.4数据使用增量备份恢复
MySQL的备份与恢复

文章插图
 
[root@localhost mysql_back]# mysqlbinlog --no-defaults /mysql_back/mysql-bin.000002 | mysql -u root -p
Enter password:
[root@localhost mysql_back]# mysql -uroot -p -e ' select * from local.test;'
Enter password:
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
+------+
MySQL的备份与恢复

文章插图
 
2、 给予位置恢复
由于前面做过备份操作,接下来直接进行模拟故障与数据恢复的操作 。
+------+
[root@localhost mysql_back]# mysql -uroot -p -e 'drop table local.test;'
Enter password: //模拟误操作删除test表
[root@localhost mysql_back]# mysql -uroot -p -e 'select * from local.test;'
Enter password: //查看test表是否存在
ERROR 1146 (42S02) at line 1: Table 'local.test' doesn't exist
[root@localhost mysql_back]# mysql -uroot -p local </mysql_back/local_test-2020-08-10.sql
Enter password: //恢复完全备份


推荐阅读