用mysqlbinlog恢复数据,要么提示重复主键,要么没有提示,但是没有恢复数据

在练习mysql的一些操作,遇到了这样一个问题:一直提示我
ERROR 1062 (23000) at line 38: Duplicate entry '1003' for key 'PRIMARY'
要么就是什么提示也没有,但是数据没有恢复。
是在centos7下的
日志如下

/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#200613 16:50:44 server id 1  end_log_pos 123 CRC32 0xdfe52871  Start: binlog v 4, server v 5.7.30-log created 200613 16:50:44 at startup
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
# at 123
#200613 16:50:44 server id 1  end_log_pos 154 CRC32 0x63a556c4  Previous-GTIDs
# [empty]
# at 154
#200613 17:10:11 server id 1  end_log_pos 219 CRC32 0x0351855f  Anonymous_GTID  last_committed=0        sequence_number=1       rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 219
#200613 17:10:11 server id 1  end_log_pos 292 CRC32 0xe7ca3b52  Query   thread_id=2     exec_time=0     error_code=0
SET TIMESTAMP=1592039411/*!*/;
SET @@session.pseudo_thread_id=2/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1436549152/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8 *//*!*/;
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
BEGIN
/*!*/;
# at 292
#200613 17:10:11 server id 1  end_log_pos 347 CRC32 0x834fb63f  Table_map: `test1`.`student` mapped to number 109
# at 347
#200613 17:10:11 server id 1  end_log_pos 398 CRC32 0x96b8773b  Write_rows: table id 109 flags: STMT_END_F
### INSERT INTO `test1`.`student`
### SET
###   @1=1003
###   @2='王五'
###   @3=103
# at 398
#200613 17:10:11 server id 1  end_log_pos 429 CRC32 0xa6609c17  Xid = 36```
COMMIT/*!*/;
# at 429
#200613 17:10:52 server id 1  end_log_pos 494 CRC32 0xa4f6ba2a  Anonymous_GTID  last_committed=1        sequence_number=2       rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 494
#200613 17:10:52 server id 1  end_log_pos 567 CRC32 0x3e9bbaa8  Query   thread_id=2     exec_time=0     error_code=0
SET TIMESTAMP=1592039452/*!*/;
BEGIN
/*!*/;
# at 567
#200613 17:10:52 server id 1  end_log_pos 622 CRC32 0xf59a597e  Table_map: `test1`.`student` mapped to number 109
# at 622
#200613 17:10:52 server id 1  end_log_pos 673 CRC32 0x6e894d2c  Delete_rows: table id 109 flags: STMT_END_F
### DELETE FROM `test1`.`student`
### WHERE
###   @1=1004
###   @2='赵六'
###   @3=102
# at 673
#200613 17:10:52 server id 1  end_log_pos 704 CRC32 0x7f696394  Xid = 38
COMMIT/*!*/;
# at 704
#200613 21:08:10 server id 1  end_log_pos 769 CRC32 0xf3a835d2  Anonymous_GTID  last_committed=2        sequence_number=3       rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 769
#200613 21:08:10 server id 1  end_log_pos 842 CRC32 0x68857d8e  Query   thread_id=2     exec_time=0     error_code=0
SET TIMESTAMP=1592053690/*!*/;
BEGIN
/*!*/;
# at 842
#200613 21:08:10 server id 1  end_log_pos 897 CRC32 0x9b69f363  Table_map: `test1`.`student` mapped to number 109
# at 897
#200613 21:08:10 server id 1  end_log_pos 948 CRC32 0xacb76edb  Delete_rows: table id 109 flags: STMT_END_F
### DELETE FROM `test1`.`student`
### WHERE
###   @1=1005
###   @2='钱七'
###   @3=101
# at 948
#200613 21:08:10 server id 1  end_log_pos 979 CRC32 0x58df2fd6  Xid = 171
COMMIT/*!*/;
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

然后是操作:

[root@localhost mysql]# mysqlbinlog --no-defaults  --stop-position=842 mysql-bin.000004 | mysql -u root -p
Enter password: 
ERROR 1062 (23000) at line 38: Duplicate entry '1003' for key 'PRIMARY'

我搜过有看到说什么要把主键设为自增,但我觉得应该不是这个问题,然而也试了试,还是一样的问题。
另外,是这么个简单的表:
+------+--------+---------+
| id | name | classid |
+------+--------+---------+
| 1001 | 张三 | 101 |
| 1002 | 李四 | 102 |
| 1003 | 王五 | 103 |
+------+--------+---------+

你有没有动过表结构,比如说约束、添加新的不可空字段等这些,这些会导致恢复失败
存在重复是正常的,你可以直接忽略过去就可以
参考 https://blog.csdn.net/cnbird2008/article/details/4602335

你先创建一张表 不要主键约束和其他约束 先把数据怼进去