[root@localhost ~]# tar Jcvf /opt/mysql-$(date +%F).tar.xz /usr/local/mysql/data
[root@localhost ~]# ls /opt
mysql-2020-01-08.tar.xz mysql-5.7.17 rh
[root@localhost ~]# systemctl start mysqld
1.2 开启二进制日志文件
[root@localhost mysql]# vim /etc/my.cnf #####编辑my.cnf配置文件
[client]
port =3306default-character-set=utf8
socket =/usr/local/mysql/mysql.sock
[mysql]
port =3306default-character-set=utf8
socket =/usr/local/mysql/mysql.sock
[mysqld] #####找到这个模块,在[mysqld]项中加入配置 log-bin=mysql-bin
user = mysql
basedir =/usr/local/mysql
datadir =/usr/local/mysql/data
port =3306
character_set_server=utf8
pid-file =/usr/local/mysql/mysqld.pid
socket =/usr/local/mysql/mysql.sock
server-id =1
log-bin=/usr/local/mysql/data/mysql-bin ####这个地方开启二进制日志功能
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES[root@localhost mysql]# systemctl restart mysqld ####重启数据库
[root@localhost ~]# ll /usr/local/mysql/data/
总用量 122924-rw-r-----1 mysql mysql 568月 916:16 auto.cnf
-rw-r-----1 mysql mysql 3088月 1505:50 ib_buffer_pool
-rw-r-----1 mysql mysql 125829128月 1505:50 ibdata1
-rw-r-----1 mysql mysql 503316488月 1505:50 ib_logfile0
-rw-r-----1 mysql mysql 503316488月 916:16 ib_logfile1
-rw-r-----1 mysql mysql 125829128月 1505:50 ibtmp1
drwxr-x---2 mysql mysql 40968月 916:16 mysql
-rw-r-----1 mysql mysql 1548月 1505:50 mysql-bin.000001 ####二进制日志文件
-rw-r-----1 mysql mysql 398月 1505:50 mysql-bin.index
drwxr-x---2 mysql mysql 81928月 916:16 performance_schema
drwxr-x---2 mysql mysql 81928月 916:16 sys
1.3 创建库和表,进行完全备份和增量备份
[root@localhost data]# mysql -uroot -p
Enter password: ###输入密码登陆
mysql> create database yiku; ###创建库
Query OK,1 row affected(0.00 sec)
mysql> use yiku; ###使用库
Database changed
mysql> create table yibiao(id int(4) primary key,name char(10)); ###创建表
Query OK,0 rows affected(0.00 sec)
mysql> insert into yibiao values(1,'zhangsan'),(2,'lisi'); ##插入记录
Query OK,2 rows affected(0.00 sec)
Records:2 Duplicates:0 Warnings:0
mysql> select *from yibiao;+----+----------+| id | name |+----+----------+|1| zhangsan ||2| lisi |+----+----------+2 rows inset(0.00 sec)
mysql>exit
[root@localhost data]# mysqldump -uroot -p yiku >/opt/yiku.sql ###进行完全备份
Enter password:[root@localhost data]# mysqladmin -uroot -p flush-logs ###进行增量备份
Enter password:[root@localhost data]# cd /usr/local/mysql/data/[root@localhost data]# ls
mysql-bin.000001 mysql-bin.000002...省略内容...
###发现已经有了增量备份文件,刚刚备份的操作记录都存放在 mysql-bin.000001中, mysql-bin.000002是准备存放后续操作的
1.4 进行正常操作和误操作,进行增量备份
mysql> insert into yibiao values(3,'wangwu'); ###正常操作
Query OK,1 row affected(0.00 sec)
mysql>deletefrom yibiao where name='wangwu'; ###误操作
Query OK,1 row affected(0.00 sec)
mysql> insert into yibiao values(4,'zhaoliu'); ###正常操作
Query OK,1 row affected(0.00 sec)
mysql> select *from yibiao;+----+----------+| id | name |+----+----------+|1| zhangsan ||2| lisi ||4| zhaoliu |+----+----------+3 rows inset(0.00 sec)
mysql> exit
Bye
[root@localhost data]# mysqladmin -uroot -p flush-logs; ###再次增量备份
Enter password:[root@localhost data]# ls ###发现再次生成新的增量备份文件ysql-bin.000003
mysql-bin.000001 mysql-bin.000002 mysql-bin.000003 ###刚刚的正常操作和无操作都存放到了mysql-bin.000002中
1.5 查看增量备份文件
[root@localhost data]# mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002>/opt/bak.txt
[root@localhost data]# vim /opt/bak.txt ###发现能够查看到刚刚的操作语句
...省略内容...
# at 343 ###正常操作语句段
#2001080:29:18 server id 1 end_log_pos 390CRC320x9ada4ac9 Write_rows: table id 219 flags:STMT_END_F
### INSERTINTO`yiku`.`yibiao`
### SET
### @1=3
### @2='wangwu'
# at 390...省略内容
# at 558 ###误操作语句段,558为误操作语句的开始位置id,2001080:29:56 为误操作语句的开始位置时间,也是上一语句的结束时间
#2001080:29:56 server id 1 end_log_pos 610CRC320xb990c664 Table_map:`yiku`.`yibiao` mapped to number 219
# at 610
#2001080:29:56 server id 1 end_log_pos 657CRC320x1738ac5d Delete_rows: table id 219 flags:STMT_END_F
### DELETEFROM`yiku`.`yibiao`
### WHERE
### @1=3
### @2='wangwu'
# at 657...省略内容
# at 825 ###正常操作语句段,825为正常操作语句的开始位置id,2001080:30:11 为正常操作语句的开始位置时间,也是上一语句的结束时间
#2001080:30:11 server id 1 end_log_pos 877CRC320x89f71cba Table_map:`yiku`.`yibiao` mapped to number 219
# at 877
#2001080:30:11 server id 1 end_log_pos 925CRC320xae064160 Write_rows: table id 219 flags:STMT_END_F
### INSERTINTO`yiku`.`yibiao`
### SET
### @1=4
### @2='zhaoliu'
# at 925
#2001080:30:11 server id 1 end_log_pos 956CRC320xe6213e68 Xid =57...省略内容...
1.6 模拟故障,删除表并进行恢复
[root@localhost data]# mysql -uroot -p
Enter password:
mysql> drop table yibiao; ###删除原有的表
Query OK,0 rows affected(0.01 sec)
mysql> show tables;
Empty set(0.00 sec)
mysql> source /opt/yiku.sql; ###恢复库
mysql> show tables; ###恢复成功
+----------------+| Tables_in_yiku |+----------------+| yibiao |+----------------+1 row inset(0.00 sec)
mysql> select *from yibiao; ###恢复成功
+----+----------+| id | name |+----+----------+|1| zhangsan ||2| lisi |+----+----------+2 rows inset(0.00 sec)
1.7 使用基于时间点的断点恢复
[root@localhost data]# mysqlbinlog --no-defaults --stop-datetime='2020-10-18 0:29:56'/usr/local/mysql/data/mysql-bin.000002| mysql -u root -p ###第一个正常操作的结尾时间是2020-10-1800:29:56,所以此处用此时间,表示恢复到此时间的操作
###时间在4.5查看增量备份文件中有写
Enter password:[root@localhost data]# mysql -u root -p
Enter password:
mysql> use yiku;
mysql> select *from yibiao; ###查看表,发现恢复成功了
+----+----------+| id | name |+----+----------+|1| zhangsan ||2| lisi ||3| wangwu |+----+----------+3 rows inset(0.00 sec)[root@localhost data]# mysqlbinlog --no-defaults --start-datetime='2020-10-18 00:30:11'/usr/local/mysql/data/mysql-bin.000002| mysql -u root -p ###第二个十误操作,我们要跳过。第三个正常操作的结尾时间是2020-10-1800:30:11,所以此处用此时间,表示从此时间恢复到结尾的操作
###时间在4.5查看增量备份文件中有写
Enter password:[root@localhost data]# mysql -u root -p
Enter password:
mysql> use yiku;
mysql> select *from yibiao; ###查看表,发现恢复成功了
+----+----------+| id | name |+----+----------+|1| zhangsan ||2| lisi ||3| wangwu ||4| zhaoliu |+----+----------+4 rows inset(0.00 sec)
1.8 使用基于位置的断点恢复
'//先删除刚刚恢复的两个表记录'
mysql>deletefrom yibiao where id=3;
Query OK,1 row affected(0.01 sec)
mysql>deletefrom yibiao where id=4;
Query OK,1 row affected(0.00 sec)
mysql> select *from yibiao;+----+----------+| id | name |+----+----------+|1| zhangsan ||2| lisi |+----+----------+2 rows inset(0.00 sec)
mysql> exit
[root@localhost data]# mysqlbinlog --no-defaults --stop-position='558'/usr/local/mysql/data/mysql-bin.000002| mysql -u root -p ###错误操作真正开始的位置是558,而不是610,所以要恢复到558位置结束
###位置在4.5查看增量备份文件中有写
Enter password:[root@localhost data]# mysql -u root -p
Enter password:
mysql> use yiku;
mysql> select *from yibiao; ###查看表,发现恢复成功了
+----+----------+| id | name |+----+----------+|1| zhangsan ||2| lisi ||3| wangwu |+----+----------+3 rows inset(0.00 sec)[root@localhost data]# mysqlbinlog --no-defaults --start-position='825'/usr/local/mysql/data/mysql-bin.000002| mysql -u root -p ###正常操作真正开始的位置是825,而不是877,所以要恢复到825位置结束
###位置在4.5查看增量备份文件中有写
Enter password:[root@localhost data]# mysql -u root -p
Enter password:
mysql> use yiku;
mysql> select *from yibiao; ###查看表,发现恢复成功了
+----+----------+| id | name |+----+----------+|1| zhangsan ||2| lisi ||3| wangwu ||4| zhaoliu |+----+----------+4 rows inset(0.00 sec)