mysql autoposition_启用auto_position=1一直报错

启用auto_position=1一直报错

发布时间:2020-06-07 15:39:09

来源:51CTO

阅读:2539

作者:dengwang123

启用auto_position=1一直报错 Got fatal error 1236 from master when reading data from binary log: 'The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.', Error_code: 1236

gtid中一些变量的理解

Retrieved_Gtid_Set: 接收到gtid集合

Executed_Gtid_Set: slave 已经执行过gtid集合,这个值使用从库的gtid_executed 这个变量初始化

gtid_executed:执行过的gtid集合

gtid_purged:已经被purge清除掉gtid集合

在执行start slave  的时候 ,如何计算起始的gtid值/集合

在从库已经执行的gtid集合

gtid_executed={0dd527e9-af3e-11e8-9ed6-00505683b926:1-62,0dd527e9-af3e-11e8-9ed6-00505683b927:1-3,87cf7b97-c393-11e8-845b-005056a95814:1,bb014309-e1a6-11e8-b284-00505683b926:1-12,c488995b-e256-11e8-abb7-00505683b926:1-9}

主库上执行的gtid集合

master_gtid_executed = { c488995b-e256-11e8-abb7-00505683b926:1-10 }

主库发送给从库的第一个gtid值(也可能是一个集合)

send_first_gtids={master_gtid_executed - gtid_executed}

send_first_gtids = { c488995b-e256-11e8-abb7-00505683b926:10 }

这个时候就计算出master需要发送给slave的第一个gtid值/集合,

如果这个值已经被master purge清理掉了(也就说在master的binlog文件中找不到了)

slave 就会报错  1236 错误

具体报错如下 :

Got fatal error 1236 from master when reading data from binary log: 'The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.', Error_code: 1236

对于这种错误 有两种解决方案

1.重做slave

2.找到历史的binlog文件,收到从binlog文件cp出需要的gtid集合日志在slave执行(这里需用到mysqlbinlog --include-gtids ),重新初始化从库的gtid_executed 的值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CREATE TABLE `advert` ( `id` int(20) NOT NULL AUTO_INCREMENT COMMENT '主键', `name` varchar(100) COLLATE utf8mb4_bin NOT NULL COMMENT '广告名称', `position_id` int(20) NOT NULL COMMENT '广告位置ID', `media_id` int(20) NOT NULL COMMENT '广告图片ID', `link` varchar(500) COLLATE utf8mb4_bin NOT NULL COMMENT '广告链接', `status` int(1) unsigned zerofill NOT NULL COMMENT '状态,0:未启用,1:已启用,2:已结束', PRIMARY KEY (`id`) USING BTREE, KEY `FK_ad_image` (`media_id`), KEY `FK_ad_position` (`position_id`), CONSTRAINT `FK_ad_image` FOREIGN KEY (`media_id`) REFERENCES `media_file` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `FK_ad_position` FOREIGN KEY (`position_id`) REFERENCES `ad_position` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='广告表'; CREATE TABLE `ad_position` ( `id` int(20) NOT NULL AUTO_INCREMENT COMMENT '主键', `name` varchar(50) COLLATE utf8mb4_bin NOT NULL COMMENT '位置名称', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='广告位置表'; CREATE TABLE `media_file` ( `id` int(20) NOT NULL AUTO_INCREMENT COMMENT '主键', `name` varchar(30) COLLATE utf8mb4_bin NOT NULL COMMENT '媒体文件名称', `type` tinyint(1) NOT NULL COMMENT '媒体文件类型:0-图片,1-视频', `url` varchar(500) COLLATE utf8mb4_bin NOT NULL COMMENT '媒体文件URL地址', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='广告媒体文件表'; springboot项目用java写出三张表的orm对象(使用jpa外键依赖),并在有实现类public interface MyBaseMapper<T> extends Mapper<T>, MySqlMapper<T>,MyInsertListMapper<T> {} public interface AdvertMapper extends MyBaseMapper<Advert> {},如何往advert表添加数据
最新发布
06-02
可以按照以下步骤来编写ORM对象并实现往advert表添加数据的操作: 1. 编写Advert、AdPosition和MediaFile的ORM对象: ```java @Entity @Table(name = "advert") public class Advert { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(nullable = false) private String name; @ManyToOne @JoinColumn(name = "position_id") private AdPosition position; @ManyToOne @JoinColumn(name = "media_id") private MediaFile media; @Column(nullable = false) private String link; @Column(nullable = false) private Integer status; // 省略getter和setter方法 } @Entity @Table(name = "ad_position") public class AdPosition { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(nullable = false) private String name; @OneToMany(mappedBy = "position") private List<Advert> adverts; // 省略getter和setter方法 } @Entity @Table(name = "media_file") public class MediaFile { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(nullable = false) private String name; @Column(nullable = false) private Integer type; @Column(nullable = false) private String url; @OneToMany(mappedBy = "media") private List<Advert> adverts; // 省略getter和setter方法 } ``` 2. 编写AdvertMapper接口,继承自MyBaseMapper,并添加添加广告数据的方法: ```java public interface AdvertMapper extends MyBaseMapper<Advert> { // 添加广告数据的方法 @Modifying @Query(value = "INSERT INTO advert(name, position_id, media_id, link, status) " + "VALUES(:name, :positionId, :mediaId, :link, :status)", nativeQuery = true) int addAdvert(@Param("name") String name, @Param("positionId") Integer positionId, @Param("mediaId") Integer mediaId, @Param("link") String link, @Param("status") Integer status); } ``` 3. 在添加数据的地方,注入AdvertMapper,并调用addAdvert方法来添加广告数据: ```java @Service public class AdvertService { @Autowired private AdvertMapper advertMapper; public void addAdvert(String name, Integer positionId, Integer mediaId, String link, Integer status) { advertMapper.addAdvert(name, positionId, mediaId, link, status); } } ``` 以上是使用JPA外键依赖的方式往advert表添加数据的一个示例。需要注意的是,由于使用了自定义的SQL语句,所以需要在addAdvert方法上添加@Modifying和@Query注解,并设置nativeQuery为true。同时,需要在SQL语句中使用表名和列名,而不是ORM对象的实体名和属性名。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值