GreatSQL 自动开启复制导致同步报错

MySQL 8.0 高可用之如何解决从库数据被修改引起的主从同步错误 作者公众号,欢迎一起交流。 在MySQL主从复制过程中,由于各种原因,不可避免在复制过程中出现错误,那么在复制过程中出现错误该如何解决呢?本篇将演示基于普通复制模式和基于GTID复制模式由于从库数据被修改导致的主从不一致时,如何在从库跳过相应的错误。 1 常见错误 1)ERROR:1062 从库插入数据,发生唯一性冲突 2)ERROR:1032 从库找不到要删除的数据 3)ERROR:1452 无法在外键的表插入或者更新参考主键没有的数据 2 普通复制模式从库出现错误 2.1 模拟错误 . 阅读详情

GreatSQL 自动开启复制导致同步报错

1.背景概述

目前需要将生产数据恢复到一个单实例,再将单实例和生产节点配置主从关系,由于单表数据量较大,时间比较有限,考虑到导入导出的时间,并且GreatSQL支持XtraBackup备份恢复,能够加速数据的恢复,因此决定使用XtraBackup备份工具进行数据的迁移;

在数据恢复完成后进行数据同步,从库发生报错 1062 主键冲突,通过解析relaylog,根据relaylog中的insert记录,以主键id字段为查询条件进行查询,发现从库中存在该条记录;回到恢复完成时,解析当前binlog发现该条记录写入binlog时间和数据库启动时间相近,且error日志中存在slave等关键字,进一步确认发现复制关系已自动建立,导致关闭期间主库新增数据依然正常同步到从库,从而导致从库报错.

2.问题复现

本次测试基于 GreatSQL 8.0.32

2.1 初始化3个单机实例

初始化过程略,其中前两个实例为主从关系,第三个实例是备份恢复完成后原从库的从库

2.2 主节点创建测试表

greatsql> CREATE DATABASE test;
greatsql> USE test;

greatsql> CREATE TABLE t1 (id INT,name VARCHAR(30),age INT,insert_time DATE not null,unique key (id)) ENGINE=INNODB;

greatsql> INSERT INTO t1 values
(1,'小红',10,'2015-09-28'),
(2,'小绿',11,'2016-09-29'),
(3,'小黄',12,'2024-07-09'),
(4,'小蓝',13,'2024-08-06'),
(5,'小黑',14,'2024-08-07');

2.3 从节点查询数据

greatsql> SELECT * FROM test.t1;
+------+--------+------+-------------+
| id   | name   | age  | insert_time |
+------+--------+------+-------------+
|    1 | 小红   |   10 | 2015-09-28  |
|    2 | 小绿   |   11 | 2016-09-29  |
|    3 | 小黄   |   12 | 2024-07-09  |
|    4 | 小蓝   |   13 | 2024-08-06  |
|    5 | 小黑   |   14 | 2024-08-07  |
+------+--------+------+-------------+
5 rows in set (0.01 sec)

2.4 执行全量备份

在从节点执行备份任务

$ /data/tool/percona-xtrabackup-8.0.32-26-34cf2908-linux-x86_64-glibc2.17/bin/xtrabackup --defaults-file=/data/my5506.cnf --user=root --password='!QAZ2wsx' --host=172.17.134.93 --port=5506 --backup --compress --target-dir=/data/backup/`date +%Y%m%d`/

2.5 备份恢复

在第三个实例上利用备份文件恢复数据

##解压备份文件
$ /data/tool/percona-xtrabackup-8.0.32-26-34cf2908-linux-x86_64-glibc2.17/bin/xtrabackup --decompress --remove-original --target-dir=/data/backup/20240813

##准备数据
$ /data/tool/percona-xtrabackup-8.0.32-26-34cf2908-linux-x86_64-glibc2.17/bin/xtrabackup --prepare --target-dir=/data/backup/20240813

##拷贝数据(需要将源目录进行备份,且恢复目录要为空)
$ /data/tool/percona-xtrabackup-8.0.32-26-34cf2908-linux-x86_64-glibc2.17/bin/xtrabackup --datadir=/data/GreatSQL --copy-back --target-dir=/data/backup/20240813

##启动数据库实例
$ /data/app/GreatSQL-8.0.32-25-Linux-glibc2.17-x86_64/bin/mysqld_safe --defaults-file=/data/my5506.cnf --user=greatdb &

继续在主节点插入新数据

greatsql> INSERT INTO t1 values (6,'小紫',21,'2024-08-12');

从节点查询数据

greatsql> SELECT * FROM t1;
+------+--------+------+-------------+
| id   | name   | age  | insert_time |
+------+--------+------+-------------+
|    1 | 小红   |   10 | 2015-09-28  |
|    2 | 小绿   |   11 | 2016-09-29  |
|    3 | 小黄   |   12 | 2024-07-09  |
|    4 | 小蓝   |   13 | 2024-08-06  |
|    5 | 小黑   |   14 | 2024-08-07  |
|    6 | 小紫   |   21 | 2024-08-12  |
+------+--------+------+-------------+
6 rows in set (0.01 sec)

注意:这里的从节点是指原主从环境的从节点,而不是利用备份文件恢复后配置的从节点。原主从环境是正常同步的,不做其他的操作。

2.6 新实例建立复制关系

新实例恢复完成后,根据备份文件gtid信息,配置和原从节点的同步

greatsql> RESET MASTER;
Query OK, 0 rows affected (0.04 sec)

greatsql> RESET SLAVE ALL;
Query OK, 0 rows affected, 1 warning (0.03 sec)

greatsql> SET GLOBAL GTID_PURGED='28093c86-5631-11ef-87f4-00163eab83df:1-3';
Query OK, 0 rows affected (0.00 sec)

greatsql> SHOW MASTER STATUS;
+---------------+----------+--------------+------------------+------------------------------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                        |
+---------------+----------+--------------+------------------+------------------------------------------+
| binlog.000001 |      157 |              |                  | 28093c86-5631-11ef-87f4-00163eab83df:1-3 |
+---------------+----------+--------------+------------------+------------------------------------------+
1 row in set (0.00 sec)

greatsql> CHANGE MASTER to MASTER_HOST = '172.17.134.93',MASTER_USER = 'replabd',MASTER_PASSWORD = 'greatdb',MASTER_PORT = 5506,MASTER_LOG_FILE ='binlog.000002', MASTER_LOG_POS = 197 for CHANNEL 'slave_5506';
Query OK, 0 rows affected, 7 warnings (0.02 sec)

greatsql> START SLAVE FOR CHANNEL 'slave_5506';
Query OK, 0 rows affected, 1 warning (0.04 sec)

2.7 查看复制状态

greatsql> SHOW SLAVE STATUS \G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for source to send event
                  Master_Host: 172.17.134.93
                  Master_User: replabd
                  Master_Port: 5506
                Connect_Retry: 60
              Master_Log_File: binlog.000002
          Read_Master_Log_Pos: 963
               Relay_Log_File: gip-relay-bin-slave_5506.000002
                Relay_Log_Pos: 323
        Relay_Master_Log_File: binlog.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: No
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 1062
                   Last_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction '28093c86-5631-11ef-87f4-00163eab83df:4' at master log binlog.000002, end_log_pos 549. See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if any.
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 197
              Relay_Log_Space: 1308
...

greatsql> SELECT * FROM performance_schema.replication_applier_status_by_worker limit 1\G
*************************** 1. row ***************************
                                           CHANNEL_NAME: slave_5506
                                              WORKER_ID: 1
                                              THREAD_ID: NULL
                                          SERVICE_STATE: OFF
                                      LAST_ERROR_NUMBER: 1062
                                     LAST_ERROR_MESSAGE: Worker 1 failed executing transaction '28093c86-5631-11ef-87f4-00163eab83df:4' at master log binlog.000002, end_log_pos 549; Could not execute Write_rows event on table test.t1; Duplicate entry '6' for key 't1.PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log FIRST, end_log_pos 549
 ......

从 performance_schema.replication_applier_status_by_worker 表详细错误信息可以看到,从库在test.t1表,主键值为6上报1062主键冲突错误

2.8 解析从库relay log

SET @@SESSION.GTID_NEXT= '28093c86-5631-11ef-87f4-00163eab83df:4'/*!*/;
# at 409
#240814 14:14:35 server id 135506  end_log_pos 353 CRC32 0x8fe3125e     Query   thread_id=9     exec_time=0     error_code=0
SET TIMESTAMP=1723616075/*!*/;
SET @@session.pseudo_thread_id=9/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1168637984/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8mb4 *//*!*/;
SET @@session.character_set_client=255,@@session.collation_connection=255,@@session.collation_server=255/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
/*!80011 SET @@session.default_collation_for_utf8mb4=255*//*!*/;
BEGIN
/*!*/;
# at 479
#240814 14:14:35 server id 135506  end_log_pos 428 CRC32 0x0ac8f16a     Rows_query
# insert into t1 values
#  (6,'小紫',21,'2024-08-12')
# at 554
#240814 14:14:35 server id 135506  end_log_pos 487 CRC32 0x46a55e3a     Table_map: `test`.`t1` mapped to number 89
# has_generated_invisible_primary_key=1
# at 613
#240814 14:14:35 server id 135506  end_log_pos 549 CRC32 0x82672058     Write_rows: table id 89 flags: STMT_END_F
### INSERT INTO `test`.`t1`
### SET
###   @1=6 /* LONGINT meta=0 nullable=0 is_null=0 */
###   @2=6 /* INT meta=0 nullable=1 is_null=0 */
###   @3='小紫' /* VARSTRING(120) meta=120 nullable=1 is_null=0 */
###   @4=21 /* INT meta=0 nullable=1 is_null=0 */
###   @5='2024:08:12' /* DATE meta=0 nullable=0 is_null=0 */
# at 675
#240814 14:14:35 server id 135506  end_log_pos 580 CRC32 0xbf6d9a69     Xid = 11
COMMIT/*!*/;
# at 706
#240814 14:14:36 server id 135506  end_log_pos 666 CRC32 0x7a9e84ef     GTID    last_committed=1        sequence_number=2       rbr_only=yes    original_committed_timestamp=1723616076007388   immediate_commit_timestamp=1723616076225999     transaction_length=383
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;

可以看到,insert 插入的具体记录

2.9 根据relay log中的内容去从库查询数据

greatsql> SELECT * FROM test.t1 where id = 6;
+------+--------+------+-------------+
| id   | name   | age  | insert_time |
+------+--------+------+-------------+
|    6 | 小紫   |   21 | 2024-08-12  |
+------+--------+------+-------------+
1 row in set (0.00 sec)

从库确实存在这条记录,那为什么数据会重复呢?

2.10 回到备份恢复完成时

查看新实例当前gtid

greatsql> SHOW MASTER STATUS \G
*************************** 1. row ***************************
             File: binlog.000005
         Position: 963
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 28093c86-5631-11ef-87f4-00163eab83df:1-5
1 row in set (0.00 sec)

查询数据

greatsql> SELECT * FROM test.t1 where id = 6;
+------+--------+------+-------------+
| id   | name   | age  | insert_time |
+------+--------+------+-------------+
|    6 | 小紫   |   21 | 2024-08-12  |
+------+--------+------+-------------+
1 row in set (0.00 sec)

可以看到,当利用备份文件恢复完成后,查询该数据是存在的,且当前gtid信息和备份文件 xtrabackup_info 记录的gtid信息不一致,明显gtid值较大

2.11 解析当前 binlog

# at 126
#240814 15:11:53 server id 2295506  end_log_pos 197 CRC32 0xd635e779    Previous-GTIDs
# 28093c86-5631-11ef-87f4-00163eab83df:1-3
# at 197
#240814 14:14:35 server id 135506  end_log_pos 283 CRC32 0x29a5e5d0     GTID    last_committed=0        sequence_number=1       rbr_only=yes    original_committed_timestamp=1723616075269734   immediate_commit_timestamp=1723619515286089     transaction_length=383
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
# original_commit_timestamp=1723616075269734 (2024-08-14 14:14:35.269734 CST)
# immediate_commit_timestamp=1723619515286089 (2024-08-14 15:11:55.286089 CST)
/*!80001 SET @@session.original_commit_timestamp=1723616075269734*//*!*/;
/*!80014 SET @@session.original_server_version=80032*//*!*/;
/*!80014 SET @@session.immediate_server_version=80032*//*!*/;
SET @@SESSION.GTID_NEXT= '28093c86-5631-11ef-87f4-00163eab83df:4'/*!*/;
# at 283
#240814 14:14:35 server id 135506  end_log_pos 353 CRC32 0x7fd5bbc9     Query   thread_id=7     exec_time=3440  error_code=0
SET TIMESTAMP=1723616075/*!*/;
SET @@session.pseudo_thread_id=7/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1168637984/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8mb4 *//*!*/;
SET @@session.character_set_client=255,@@session.collation_connection=255,@@session.collation_server=255/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
/*!80011 SET @@session.default_collation_for_utf8mb4=255*//*!*/;
BEGIN
/*!*/;
# at 353
#240814 14:14:35 server id 135506  end_log_pos 428 CRC32 0x0ac8f16a     Rows_query
# insert into t1 values
#  (6,'小紫',21,'2024-08-12')
# at 428
#240814 14:14:35 server id 135506  end_log_pos 487 CRC32 0x6ab5cc7d     Table_map: `test`.`t1` mapped to number 86
# has_generated_invisible_primary_key=1
# at 487
#240814 14:14:35 server id 135506  end_log_pos 549 CRC32 0xa97243cd     Write_rows: table id 86 flags: STMT_END_F
### INSERT INTO `test`.`t1`
### SET
###   @1=6 /* LONGINT meta=0 nullable=0 is_null=0 */
###   @2=6 /* INT meta=0 nullable=1 is_null=0 */
###   @3='小紫' /* VARSTRING(120) meta=120 nullable=1 is_null=0 */
###   @4=21 /* INT meta=0 nullable=1 is_null=0 */
###   @5='2024:08:12' /* DATE meta=0 nullable=0 is_null=0 */
# at 549
#240814 14:14:35 server id 135506  end_log_pos 580 CRC32 0x6c8881dc     Xid = 3
COMMIT/*!*/;

可以看到id为6的记录写入binlog文件的时间和数据库实例启动时间基本一致,说明数据是在启动过程中写入的,且error.log中出现了关键字Slave I/O thread & Slave SQL thread不得不怀疑是否已经建立了复制关系?

file

2.12 新实例查询是否存在复制关系

greatsql> SHOW SLAVE STATUS \G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for source to send event
                  Master_Host: 172.17.140.13
                  Master_User: replabc
                  Master_Port: 5506
                Connect_Retry: 60
              Master_Log_File: binlog.000002
          Read_Master_Log_Pos: 959
               Relay_Log_File: gip-relay-bin-master_5506.000002
                Relay_Log_Pos: 1129
        Relay_Master_Log_File: binlog.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
...

可以看到新实例恢复完成后,复制关系已经建立,且同步正常,为什么会出现这种情况?

2.13 查看复制元数据信息和启动参数

greatsql> SELECT * FROM slave_master_info \G
*************************** 1. row ***************************
                Number_of_lines: 33
                Master_log_name: binlog.000002
                 Master_log_pos: 197
                           Host: 172.17.140.13
                      User_name: replabc
                  User_password: !QAZ2wsx
                           Port: 5506
                  Connect_retry: 60
                    Enabled_ssl: 0
                         Ssl_ca: 
                     Ssl_capath: 
                       Ssl_cert: 
                     Ssl_cipher: 
                        Ssl_key: 
         Ssl_verify_server_cert: 0
                      Heartbeat: 30
                           Bind: 
             Ignored_server_ids: 0
                           Uuid: 28093c86-5631-11ef-87f4-00163eab83df
                    Retry_count: 86400
                        Ssl_crl: 
                    Ssl_crlpath: 
          Enabled_auto_position: 1
                   Channel_name: master_5506
                    Tls_version: 
                Public_key_path: 
                 Get_public_key: 0
              Network_namespace: 
   Master_compression_algorithm: uncompressed
  Master_zstd_compression_level: 3
               Tls_ciphersuites: NULL
Source_connection_auto_failover: 0
                      Gtid_only: 0
1 row in set (0.00 sec)

greatsql> SELECT * FROM slave_relay_log_info \G
*************************** 1. row ***************************
                             Number_of_lines: 14
                              Relay_log_name: ./gip-relay-bin-master_5506.000002
                               Relay_log_pos: 1129
                             Master_log_name: binlog.000002
                              Master_log_pos: 959
                                   Sql_delay: 0
                           Number_of_workers: 64
                                          Id: 1
                                Channel_name: master_5506
                   Privilege_checks_username: NULL
                   Privilege_checks_hostname: NULL
                          Require_row_format: 0
             Require_table_primary_key_check: STREAM
 Assign_gtids_to_anonymous_transactions_type: OFF
Assign_gtids_to_anonymous_transactions_value: 
1 row in set (0.01 sec)

greatsql> SHOW VARIABLES LIKE '%skip%start%';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| skip_replica_start | OFF   |
| skip_slave_start   | OFF   |
+--------------------+-------+
2 rows in set (0.00 sec)

MySQL 手册介绍

file

副本服务器会创建多个信息存储库以用于复制过程,其中包括:

  • 副本连接元数据存储库,包含复制接收器线程连接到复制源服务器并从源的二进制日志检索事务所需的信息。连接元数据存储库被写入mysql.slave_master_info 表中。
  • 副本的应用程序元数据存储库,包含复制应用程序线程需要从副本的中继日志读取和应用事务的信息。应用程序元数据存储库被写入 mysql.slave_relay_log_info表中。

file

  • 从MySQL 8.0.26 开始使用--skip-replica-start代替,之前的版本可以使用 --skip-slave-start,默认值为OFF。
  • 告诉副本服务器在服务器启动时不要启动复制 I/O(接收器)和 SQL(应用程序)线程。若要稍后启动线程,请使用 START REPLICA 语句。

官方文档的这两段描述可以解释为什么在数据库服务启动之后,同步关系会自动建立,若主库状态正常,且binlog文件保存完整,则I/O和SQL线程状态都为YES。

2.14 解决方法

  1. 新实例恢复完成后,启动前在配置文件中添加参数skip_replica_start=1或启动时加上--skip-replica-start=1
  2. 配置同步,再次查看同步正常
greatsql> SHOW SLAVE STATUS \G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for source to send event
                  Master_Host: 172.17.134.93
                  Master_User: replabd
                  Master_Port: 5506
                Connect_Retry: 60
              Master_Log_File: binlog.000004
          Read_Master_Log_Pos: 197
               Relay_Log_File: gip-relay-bin-slave_5506.000009
                Relay_Log_Pos: 363
        Relay_Master_Log_File: binlog.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
...
1 row in set, 1 warning (0.00 sec)

3.总结

  1. 在进行维护或修改从库配置时,可能需要从库停止复制。这时设置skip-replica-starts可以确保从库在重启时不会自动启动复制进程,从而避免在未完成配置调整前意外启动复制。
  2. 当需要在从库上进行数据恢复或其他涉及数据修改的操作时,停止复制是必要的。设置skip-replica-starts=1可以确保在操作完成并手动启动复制前,复制进程不会自动启动。

Enjoy GreatSQL :)

关于 GreatSQL

GreatSQL是适用于金融级应用的国内自主开源数据库,具备高性能、高可靠、高易用性、高安全等多个核心特性,可以作为MySQL或Percona Server的可选替换,用于线上生产环境,且完全免费并兼容MySQL或Percona Server。

相关链接: GreatSQL社区 Gitee GitHub Bilibili

GreatSQL社区:

image

社区有奖建议反馈: https://greatsql.cn/thread-54-1-1.html

社区博客有奖征稿详情: https://greatsql.cn/thread-100-1-1.html

(对文章有疑问或者有独到见解都可以去社区官网提出或分享哦~)

技术交流群:

微信&QQ群:

QQ群:533341697

微信群:添加GreatSQL社区助手(微信号:wanlidbc )好友,待社区助手拉您进群。

MySQL 异步复制源自动故障转移 1 异步复制源架构 1.1基于主从复制的异步复制源 从MySQL 8.0.22开始支持异步连接故障转移机制,我们可以在一套主从复制架构的基础上,创建一个异步复制连接的Replica副本,当主从复制Source发生意外宕机,业务提升Replica为新的Source对外进行服务,异步连接Replica可自动检测主从架构源端连接异常,并重新指向新的Source进行数据复制。 架构图与流程展示: Source 、Replica为正常的主从复制架构,Async Replica为通过异步连接的复制副本 当主从复制架 阅读详情

相关推荐

SE-0526激光避障雷达扫描传感器输入输出连线方法及PLC联机实例说明

SE-0526激光避障雷达扫描传感器广泛应用于原材料运输与处理、移动装配、托盘或货架运输、产成品自动运输、生产线自动对接,餐厅自助送餐等AGV小车、服务机器人、仓储机器人、无人叉车导航、避障、定位等。 本文重点介绍SE-0526激光避障雷达扫描传感器输入输出连线方法及PLC联机实例说明。

华翔天诚科技 2695

Mysql主从复制

mysql主库复制配置,server-id配置,解决Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.问题,配置的uuid一样问题,主mysql库同步配置

wei的博客 1056

卫星测试科普(三):卫星载荷的核心测试设备探秘

总的说来,卫星芯片与元器件,部组件与单机,整机与子系统,系统与整星的设计、定型、制造、验证、总装、发射、在轨等环节都离不开各种测试场景,对于这些卫星测试场景而言,“射频三大件”与高速数字示波器是构成强大测试系统的基础。卫星通信信号生成:覆盖Ka、Q等波段,具备扫频、脉冲、数字调制、噪声信号、雷达信号、数据链信号、OFDM 等多种信号库,用于测试和验证卫星电子设备的电气性能、频率响应、抗干扰能力等。卫星的通信需要高效、快速地传输大量数据,高速信号的质量至关重要,如果卫星信号不佳,卫星就会出现故障或者隐患。

spwbjss的博客 2319

MySQL8 主从同步 SHOW SLAVE STATUS Slave_IO_State 显示为 Waiting for source to send event

是 MySQL 复制的一种正常状态,通常表明从库在等待主库的事件。主库没有生成新的事件。从库的配置不正确。网络或连接问题。从库的复制线程遇到问题。通过检查主库的 binlog 配置、从库的复制状态、网络连接以及错误日志,通常可以解决该问题。

空 1115

Verilog仿真时读取bin文件模拟输入数据流,将输出数据流写入bin文件

需要关注的是,一般会省略文件起始地址和读取长度,那么mem为多大,就会从文件中读取多大的数据出来填充mem。如果只需要读取一次文件,那么代码到此就结束了,但是如果还需要每一帧都读取该文件转换为数据流,则在循环里判断新的一帧信号是否到来,在新的一帧再次打开一次文件,从头开始读取数据。

qq_41137205的博客 2772

手把手教你学Simulink——基于Simulink的滑模控制器车辆稳定性仿真建模示例

本文详细介绍了基于Simulink的滑模控制器在车辆稳定性控制中的应用。通过建立二自由度车辆动力学模型(含魔术公式轮胎),设计横摆角速度与质心侧偏角滑模控制器,在Simulink中实现直接横摆力矩控制。文章包含完整的建模流程:从参考模型设计、滑模控制器推导(含等效控制和边界层法),到MATLAB参数设定和Simulink模块搭建。通过双移线测试和路面突变场景验证,证明该控制器能在低附着路面(μ=0.3)将横摆角速度误差控制在±5%以内,显著提升车辆稳定性。同时提供了工程实践要点和扩展方向(如高阶滑模、自适应

MHD0815的博客 106

Week 12 Homework

1、主从复制及主主复制的实现 2、xtrabackup实现全量+增量+binlog恢复库 3、MyCAT实现MySQL读写分离 4、ansible常用模块介绍

weixin_42999527的博客 417

LPDDR6与LPDDR5 ZQ Calibration技术探讨

LPDDR6与LPDDR5 ZQ Calibration技术探讨

zilan23的博客 1101

从MySQL平滑迁移到GreatSQL:5步完成无缝替换的完整指南

对于正在使用 MySQL 的团队来说,数据库迁移最怕的就是"伤筋动骨":语法不兼容、存储过程报错、应用大面积返工。GreatSQL 作为一款开源免费数据库,以 **100% 兼容 MySQL 语法** 著称,可在普通硬件上满足金融级应用场景,具备高可用、高性能、高兼容、高安全四大特性,是 MySQL 或 Percona Server for MySQL 的理想可选替换。本指南用 5 个步骤带你完成

gitblog_00146的博客 411

QGis二次开发 —— 1、win10/win11搭建Vs2017-QGis3.40.12环境(附Vs2017环境效果,附全部问题解决方法)(附:Qt助手加入QGis接口说明文档)

QGis二次开发 —— 1、Windows10搭建Vs2017-QGis环境(附Vs2017环境效果)(附:Qt助手加入QGisA接口说明文档)

1362

【CAD二次开发】炸开所有的嵌套块

代码】【CAD二次开发】炸开所有的嵌套块。

1513

GreatSQL复制中断问题分析与slave_skip_errors参数风险

数据库复制技术是确保数据高可用的核心机制,其基本原理是通过主库的二进制日志(binlog)将数据变更同步到从库。在MySQL及GreatSQL等分支版本中,复制过程涉及IO线程和SQL线程的协同工作,任何环节出错都可能导致数据不一致。slave_skip_errors参数作为控制复制错误处理的关键配置,当其设置为ALL时会跳过所有错误继续复制,虽然能维持复制线程运行,但会带来严重的数据一致性问题。实际运维中,主从复制架构常遇到的binlog过期、GTID空洞等现象,往往与不合理的参数配置有关。通过分析Gre

weixin_29587015的博客 329

单片机应用案例:ESP32 搭配 BH1750 光强传感器和 Web 服务器

在该应用案例中,我们将使用 ESP32 开发板作为主控制器,BH1750 光强传感器用于采集环境光强度数据,并通过 Web 服务器展示采集到的数据。步骤一:购买材料步骤二:连接硬件步骤三:编写代码我们将使用 Arduino IDE 编写代码,以下是主要代码:// WiFi 设置const char* ssid = “你的 WiFi 名称”;const char* password = “密码”;// Web 服务器实例// BH1750 实例// 获取当前光强度数据。

RlDart的博客 813

GreatSQL高可用架构揭秘:MGR集群从0到1搭建实战教程

GreatSQL作为一款开源免费数据库,凭借高可用、高性能、高兼容、高安全四大特性,已成为金融级应用场景的理想选择,也是MySQL与Percona Server for MySQL的完美替代方案。本文将带你从0到1亲手搭建一套基于MGR(MySQL Group Replication,组复制)的GreatSQL高可用集群,让你彻底掌握生产级数据库高可用架构的核心玩法。 ## 为什么选择Great

gitblog_00264的博客 138

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

故障解析丨Clone节点导致主从故障

*GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。故障解析丨Clone节点导致主从故障1.背景概述在一次主从复制架构中,由于主节点binlog损坏,导致从节点无法正常同步数据,只能重做从节点;因此使用MySQL 8.0.17开始提供的clone技术进行恢复,恢复后的2天都发生了主从报错数据冲突。通过解析binlog发现,同一时刻主从节点都在执行同一条语句,因此询问业务...

老叶茶馆 189

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

RPM方式安装GreatSQL 8.0.25-16

*GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。一、系统信息1.确认OS信息2.OS优化调整3.临时关闭 firewall 和 selinux二、rpm安装1.下载安装包2.安装依赖包3.依次安装下列软件包4.替换配置文件5.创建数据目录6.启动服务7.查看开启状态8.启动后查看初始化的密码9.设置下root密码10.查看下版本11.总结一、系统信息部署前提:准备一...

老叶茶馆 568

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

参数引发的复制中断:max_binlog_cache_size 导致 SQL 线程异常的复现与分析

从库也会受 binlog cache 限制。只要从库开启本地 binlog 并记录复制更新,SQL 线程回放事务时就要写本地 binlog,因此会受从库限制。1534** 不是数据冲突。** 当日志中出现和时,应优先检查 row-based binlog 写入链路,包括、磁盘空间、临时目录、本地 binlog 配置等。主库和从库关键参数应保持基线一致。尤其是等会影响复制兼容性或回放行为的参数,建议在变更前后做自动化比对。大事务是根因风险。调大。

iJ5g4quwE的博客 175

GreatSQL社区2024年全年总结(免费领红包封面)

* GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。社区2024年总结GreatSQL 社区在2024年度上持续迈进,成果斐然。一方面,开放了 GreatSQL 单机版以及三节点 MGR 集群的在线测试体验环境,让用户能够在线体验各种 GreatSQL 创新特性。另一方面,社区手册也持续更新,方便用户查阅。同时,社区积极拓展教育合作领域,成功走进郑州大学,联合开设 “G...

老叶茶馆 195

max_binlog_cache_size 导致 SQL 线程异常的复现与分析

随后使用 mysqlbinlog 解析故障 GTID 对应的 binlog,并与业务侧确认,该 GTID 确实是一个大事务,事务产生的 binlog 体量远超从库 10M 的 max_binlog_cache_size 限制。本文整理复现过程如下。主库执行如下INSERT语句,插入10319条数据,这时产生的 binlog 未超过从库max_binlog_cache_size=10M的限制,查看主从复制状态没有异常,且主从数据一致。从库 max_binlog_cache_size = 10M。

gjzNKt9z7的博客 189

故障案例:MySQL唯一索引有重复值,官方却说This is not a bug

GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。 GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。 作者:飞鱼过天 文章来源:GreatSQL社区原创 问题 原因 故障解决方案 复现步骤 参考文献 一、问题: MySQL5.7.38主从架构,主节点唯一索引上(唯一索引不是主键)有重复值,全部从节点报1062,SQL线程状态异常,根据SQL线程报的binlog位置点,insert 数据时有重复值,插入失败 二、原因: unique_checks=0时

GreatSQL2021的博客 678

openEuler学习——部署MGR集群

MGR高可用的完整部署以及运维操作的简单讲解

2201_75878485的博客 1692

多云部署多主模式的MGR集群,每个云一个MGR 节点,满足业务单元化改造的需求

欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。 本文来自投稿:by 作业帮DBA团队 一、架构需求: 正常情况下每个云的业务程序(下图中的APP) 通过本地的cetus 写入本地的MGR 节点(默认启动时通过cetus 配置本地MGR 节点为rw); 读请求会根据 cetus 读写分离策略路由到不同的云的MGR 节点 当本地MGR 节点故障,则.

GreatSQL2021的博客 561

GTID 模式 优缺点以及使用注意

Mysql主从复制 1.)普通主从复制:   普通主从复制主要是基于二进制日志文件位置的复制,因此主必须启动二进制日志记录并建立唯一的服务器ID,复制组中的每个服务器都必须配置唯一的服务器ID。如果您省略server-id(或者明确地将其设置为其默认值0),则主设备将拒绝来自从设备的任何连接。 2.)GTID 主从:  (1.)基本概念   MySQL 5.6 的新特性之一,全局事务标识符(GTID)是创建的唯一标识符,并与在源(主)服务器上提交的每个事务相关联。此标识符不但是唯一的,而且在给...

wangxuelei036的博客 3537
上一篇: 【GreatSQL优化器-04】贪婪搜索算法浅析
下一篇: GreatSQL内存消耗异常排查攻略:从系统到应用层面的深入分析
GreatSQL社区
博客等级 码龄5年 1210粉丝 390原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值