慎用mysqldump与GTID自动定位:一次备份数据“丢失“的排查

MySQL5.7安装和配置教程(超详细) MySQL5.7版本的详细安装教程(环境变量) 阅读详情

慎用mysqldump与GTID自动定位:一次备份数据"丢失"的排查

本文摘要

导入mysqldump的备份数据,并通过MASTER_AUTO_POSITION=1配置从节点,启动复制后,出现1032错误(行不存在)。经排查发现,MySQL 5.7.38的mysqldump备份文件内部存在逻辑矛盾:其记录的起始复制位置与GTID集存在时间差,导致使用MASTER_AUTO_POSITION=1配置从节点时,会丢失备份期间的数据。而mysqldump5.7.36之前和mysqldump8.0.31之后的版本不存在此问题。

本文记录完整的复现、分析和解决方案。

背景

某业务系统使用的是MySQL 5.7.38,计划将数据库替换为国产数据库GreatSQL,使用mysqldump从MySQL 5.7.38备份了一份数据,导入到GreatSQL之后,将GreatSQL配置为MySQL 5.7.38的从库,系统运行一段时间后,SHOW SLAVE STATUS检查复制状态,发现复制链路报错, Last_Errno: 1032。

搭建了MySQL 5.7.38和GreatSQL对该场景进行了模拟。

安装MySQL 5.7.38

$ cd /gdb/mysqldb
$ tar -xvf  mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz
$ mv mysql-5.7.38-linux-glibc2.12-x86_64 mysql-5.7.38
$ mkdir -p /gdb/mysqldb/5738/{data,tmp,binlog}
$chown -R  greatsql:greatsql   /gdb/mysqldb
$ ./mysqld --initialize-insecure    --user=greatsql --basedir=/gdb/mysqldb/mysql-5.7.38 --datadir=/gdb/mysqldb/5738/data
...#输出省略
password ! Please consider switching off the --initialize-insecure option.

创建用户

在MySQL中创建用户:

mysql>CREATE USER admin@'%' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY 'admin' ;
mysql>GRANT ALL PRIVILEGES ON . TO admin@'%'  WITH GRANT OPTION;
mysql>FLUSH PRIVILEGES;

创建测试库及测试表

在MySQL中创建测试库及测试表:

mysql>CREATE DATABASE sbtest;
Query OK, 1 row affected (0.01 sec)
mysql>USE sbtest;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql>CREATE TABLE t_keep_alive( name varchar(20),  create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
Query OK, 0 rows affected (0.08 sec)

使用 Sysbench 构造数据

$ sysbench /usr/local/share/sysbench/oltp_read_write.lua  --mysql-db=sbtest --mysql-host=192.168.18.2 --mysql-port=5738 --mysql-user=admin  --mysql-password=admin --tables=3 --table_size=3000000 --report-interval=2 --threads=4 --db-driver=mysql --skip-trx=off --db-ps-mode=disable --create-secondary=off --time=0 --simple-ranges=0 --sum-ranges=0 --order-ranges=0 --distinct-ranges=0 --mysql-ignore-errors=9001,9002,9000,1062 prepare
WARNING: Both event and time limits are disabled, running an endless test
sysbench 1.1.0-df89d34 (using bundled LuaJIT 2.1.0-beta3)

Initializing worker threads...

Creating table 'sbtest2'...
Creating table 'sbtest1'...
Creating table 'sbtest3'...
Inserting 3000000 records into 'sbtest2'
Inserting 3000000 records into 'sbtest3'
Inserting 3000000 records into 'sbtest1'

插入数据脚本

计划在备份期间,每秒插入一条测试数据

$ more t_keep.sh 
#!/bin/bash
USER="admin"
PASSWORD="admin"
HOST="192.168.18.2"
PORT=5738
DBNAME="sbtest"
while true 
do
  /gdb/mysqldb/mysql-5.7.38/bin/mysql -u"$USER" -p"$PASSWORD" -h"$HOST" -P"$PORT" "$DBNAME"  -e "INSERT INTO t_keep_alive(name) SELECT SUBSTRING(UUID(), 1, 8) ;SELECT sleep(1);"
done

GTID信息

sysbench 插入数据后:

mysql>SHOW MASTER STATUS;
+---------------+----+---------------------------------------------+
| File          | Position  | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+--+---------------------------------------------+
| binlog.000004 | 643592650 |    |  | e9ceeaef-ed3d-11f0-893c-00163ed468c9:1-3366 |
+---------------+---+---------------------------------------------+
1 row in set (0.00 sec)

备份完成:

mysql>SHOW MASTER STATUS;
+---------------+-----------+----+---------------------------------------------+
| File          | Position  | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set|
+---------------+------+---------------------------------------------+
| binlog.000004 | 643622680 |   | | e9ceeaef-ed3d-11f0-893c-00163ed468c9:1-3471 |
+---------------+-----------+---+---------------------------------------------+
1 row in set (0.00 sec)

开始插入数据

$ bash t_keep.sh 
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------+
| sleep(1) |
+----------+
|        0 |
+----------+
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------+
| sleep(1) |
+----------+
|        0 |
+----------+

备份数据

/gdb/mysqldb/mysql-5.7.38/bin/mysqldump -uadmin -h192.168.18.2 -P5738 -padmin --single-transaction --set-gtid-purged=ON --master-data=2 --routines --events --triggers --databases sbtest    --force > /tmp/sbtest.sql

停止数据写入

备份完成后,kill 掉写入数据的t_keep.sh 进程

GreatSQL导入备份文件

$ du -sh sbtest.sql 
1.7G    sbtest.sql

登录GreatSQL数据库,将备份文件导入到GreatSQL数据库
GreatSQL>SOURCE /tmp/sbtest.sql;

基于GTID模式配置从库

将GreatSQL配置为基于GTID模式的MySQL从库

GreatSQL>CHANGE MASTER TO MASTER_HOST='192.168.18.2',MASTER_USER="ADMIN",MASTER_PASSWORD='ADMIN',MASTER_PORT=5738,MASTER_AUTO_POSITION=1;
Query OK, 0 rows affected, 2 warnings (0.02 sec)

GreatSQL>SHOW MASTER STATUS;
+---------------+--+---------------------------------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                           |
+---------------+--+---------------------------------------------+
| binlog.000001 |      154 |   |   | e9ceeaef-ed3d-11f0-893c-00163ed468c9:1-3466 |
+---------------+--+---------------------------------------------+
1 row in set (0.00 sec)

GreatSQL>START SLAVE;
Query OK, 0 rows affected (0.00 sec)

主从数据对比

gtid信息对比:对比主库和从库的gtid信息,两个库是一致的,都是1-3537

主库:
mysql>SHOW MASTER STATUS;
+---------------+------------------+---------------------------------------------+
| File          | Position  | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+------------+---------------------------------------------+
| binlog.000004 | 643641556 |   |   | e9ceeaef-ed3d-11f0-893c-00163ed468c9:1-3537 |
+---------------+-----+---------------------------------------------+
1 row in set (0.00 sec)
从库:
GreatSQL>SHOW MASTER STATUS;
+---------------+---+------------------+---------------------------------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                           |
+---------------+--+------------------+---------------------------------------------+
| binlog.000001 |   154 |      |    | e9ceeaef-ed3d-11f0-893c-00163ed468c9:1-3537 |
+---------------+---+------------------+---------------------------------------------+
1 row in set (0.00 sec)

表数据对比:t_keep_alive表数据不一致,主库比从库多

主库:
mysql>SELECT count(*) FROM t_keep_alive;
+----------+
| count(*) |
+----------+
|      171 |
+----------+
1 row in set (0.01 sec)

从库:
GreatSQL>SELECT count(*) FROM t_keep_alive;
+----------+
| count(*) |
+----------+
|      120 |
+----------+
1 row in set (0.01 sec)

差异数据分析:从库11:10:36到11:11:37之间,没有数据写入从库。在主库更新备份期间产生的数据,
从库就会出现1032错误,SQL线程状态变为NO
| 41f01fcf | 2026-01-12 11:10:33 | 2026-01-12 11:10:33 |
| 428b22d3 | 2026-01-12 11:10:34 | 2026-01-12 11:10:34 |
| 43266c4c | 2026-01-12 11:10:35 | 2026-01-12 11:10:35 |
| 43c105c5 | 2026-01-12 11:10:36 | 2026-01-12 11:10:36 |

| 68155846 | 2026-01-12 11:11:37 | 2026-01-12 11:11:37 |
| 68b0b70c | 2026-01-12 11:11:38 | 2026-01-12 11:11:38 |
| 694b88d8 | 2026-01-12 11:11:39 | 2026-01-12 11:11:39 |

基于LOG_FILE+LOG_POS搭建主从

GreatSQL> STOP SLAVE;
Query OK, 0 rows affected (0.01 sec)

GreatSQL> RESET SLAVE all;
Query OK, 0 rows affected (0.01 sec)

GreatSQL> DROP DATABASE sbtest;
Query OK, 4 rows affected (0.92 sec)

GreatSQL> RESET MASTER;
Query OK, 0 rows affected (0.01 sec)

GreatSQL> SOURCE /tmp/sbtest.sql;


GreatSQL> SHOW MASTER STATUS;
+---------------+------+---------------------------------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set|
+---------------+------+---------------------------------------------+
| binlog.000001 |      154 |   |  | e9ceeaef-ed3d-11f0-893c-00163ed468c9:1-3466 |
+---------------+------+---------------------------------------------+
1 row in set (0.00 sec)

GreatSQL> SELECT *  FROM  t_keep_alive;
...........
| 43c105c5 | 2026-01-12 11:10:36 | 2026-01-12 11:10:36 |
+----------+---------------------+---------------------+
49 rows in set (0.00 sec)

GreatSQL> RESET MASTER;
Query OK, 0 rows affected (0.02 sec)

GreatSQL> SHOW MASTER STATUS;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000001 |      154 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

GreatSQL> CHANGE MASTER   TO MASTER_HOST='192.168.18.2',MASTER_USER="ADMIN",MASTER_PASSWORD='ADMIN',MASTER_PORT=5738,MASTER_LOG_FILE='BINLOG.000004', MASTER_LOG_POS=643606664;

Query OK, 0 rows affected, 2 warnings (0.02 sec)

GreatSQL> START SLAVE;
Query OK, 0 rows affected (0.00 sec)

GreatSQL> SELECT * FROM t_keep_alive;
........
| 92abaf1c | 2026-01-12 11:12:48 | 2026-01-12 11:12:48 |
+----------+---------------------+---------------------+
171 rows in set (0.00 sec)


GreatSQL> SHOW MASTER STATUS;
+---------------+--+------------------------------------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set    |
+---------------+--+------------------------------------------------+
| binlog.000001 |      154 |    |  | e9ceeaef-ed3d-11f0-893c-00163ed468c9:3416-3537 |
+---------------+--+------------------------------------------------+
1 row in set (0.00 sec)
  • 通过LOG_FILE、LOG_POS配置主从同步,gtid同步范围为:3416-3537,
  • 通过master_auto_position配置主从同步,gtid同步范围为:3467-3537。

问题分析

查看备份文件

--
-- Position to start replication or point-in-time recovery from
--
文件的开头部分
-- CHANGE MASTER TO MASTER_LOG_FILE='binlog.000004', MASTER_LOG_POS=643606664;
--
-- Current Database: `sbtest`
--
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `sbtest` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `sbtest`;

--
-- Table structure for table `sbtest1`

....... 略

UNLOCK TABLES;
--
-- Dumping events for database 'sbtest'
--

--
-- Dumping routines for database 'sbtest'
--

--
-- GTID state at the end of the backup 
--
-- 文件结尾部分
SET @@GLOBAL.GTID_PURGED='e9ceeaef-ed3d-11f0-893c-00163ed468c9:1-3466';
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2026-01-12 11:11:36
SET @@GLOBAL.GTID_PURGED='e9ceeaef-ed3d-11f0-893c-00163ed468c9:1-3466';

备份文件认为1-3466这些事务的数据已经写入到数据库。

实际情况情况呢?

解析备份文件LOG_FILE、LOG_POS相邻的数据。

解析binlog.000004 ,MASTER_LOG_POS=643606664后的下一个事务是'e9ceeaef-ed3d-11f0-893c-00163ed468c9:3416'

SET @@SESSION.GTID_NEXT= 'e9ceeaef-ed3d-11f0-893c-00163ed468c9:3416'/*!*/;
# at 643606729
#260112 11:10:37 server id 425738  end_log_pos 643606803 CRC32 0x7f5398a1

LOG_FILE、LOG_POS 对应的下一个事务是’e9ceeaef-ed3d-11f0-893c-00163ed468c9:3416’,这种同步方式是从3416开始同步数据。

而通过MASTER_AUTO_POSITION=1的方式同步数据,由于备份文件最后是

SET @@GLOBAL.GTID_PURGED='e9ceeaef-ed3d-11f0-893c-00163ed468c9:1-3466'; (MySQL 5.7.38的mysqldump在备份完成时才获取gtid信息) ,这条语句写入数据库后,数据库认为1-3466的数据已经写入到数据库了,这些数据不需要进行同步。

配置MASTER_AUTO_POSITION=1后,从3467开始同步新的数据。两种同步方式差异就是备份期间产生的51条数据(3467-3416=51 ),在主库UPDATE备份期间产生的数据,从库就会出现1032错误,导致主从复制链路失败。

问题总结

1、使用MySQL 5.7.38的mysqldump进行数据备份,备份数据导入从库,通过MASTER_AUTO_POSITION=1配置主从后,主从数据库数据不一致,从库开始从备份完成时生成GTID信息开始同步,主库备份期间产生的数据没有同步到从库。备份参数--single-transaction在备份开始前,先执行START TRANSACTION命令,以此来获得备份的一致性,备份程序应该获取此时的GTID信息。

2、通过LOG_FILE、LOG_POS方式搭建从库可以正常进行主从数据同步。

3、使用MySQL 5.7.30、MySQL 8.0.32、GreatSQL8.0.32 的mysqldump程序进行备份,程序获取的LOG_FILE、LOG_POS和GTID信息都在备份文件头记录,这两者对应的日志文件位置是一样的,使用GTID搭建主从后,数据是一致的。MySQL 5.7.38的mysqldump程序MASTER_LOG_FILE和MASTER_LOG_POS在备份文件头,GTID_PURGED在文件尾。

用 MySQL 5.7.30、 MySQL 8.0.32、GreatSQL8.0.32 进行备份测试, 备份的时候GTID和文件点位都在备份文件头
SET @@GLOBAL.GTID_PURGED='e9ceeaef-ed3d-11f0-893c-00163ed468c9:1-3537';
-- Position to start replication or point-in-time recovery from
--
-- CHANGE MASTER TO MASTER_LOG_FILE='binlog.000004', MASTER_LOG_POS=643641556;

4、经过测试验证,mysqldump5.7.36之前和mysqldump8.0.31之后的版本不存在此问题。

参考文章

https://cloud.tencent.com/developer/article/1915277?shareByChannel=link

https://bugs.mysql.com/bug.php?id=105761

MySQL备份方案详解:mysqldump+binlog全量增量恢复实战 数据库备份是保障数据安全的核心防线,任何一次误操作或硬件故障都可能造成不可挽回的损失。在MySQL生态中,binlog作为记录所有写操作的二进制日志,天然扮演着增量备份载体的角色,而mysqldump则是生成一致性全量快照的常用工具。理解全量备份与增量备份的组合原理,掌握RPO与RTO指标的设定逻辑,是构建高可用数据恢复体系的基础。无论是日常运维的定期归档,还是面对误删数据后的时间点恢复,将mysqldump导出的基线数据与binlog重放结合,都能在最小数据丢失的前提下快速还原业务状态。本文从备份策略设计 阅读详情

相关推荐

mysqldump全量备份+binlog增量恢复:MySQL误删数据找回实战方案

数据库备份是保障数据安全的重要防线,但仅靠全量备份无法应对“误操作后恢复”的精细场景。全量备份如同数据快照,只能还原某一时刻的状态;而二进制日志(binlog)作为MySQL的增量变更记录,能够捕获每一条数据变化,是恢复“误删前一秒”状态的关键数据源。通过mysqldump定期制作全量备份,同时开启binlog并归档日志文件,即可构建“全量+增量”的完整备份链。当发生误删除或数据损坏时,先回放全量备份,再利用mysqlbinlog工具按时间点或日志偏移量回放增量事务,就能精准定位并恢复丢失数据。这套方案无需

weixin_33404102的博客 311

windows下安装MySQL 5.7.x msi安装版&免安装版教程

MySQL安装简介解压安装 简介 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。 解压安装 环境:windows10 版本:mysql-5.7.28-winx

输入技术、输出想法 2949

Docker MySQL备份恢复实战:逻辑备份与物理备份方案详解

数据库备份是保障数据安全与业务连续性的基石。在逻辑上,备份分为以mysqldump为代表的逻辑备份和以XtraBackup为代表的物理备份,前者以SQL语句导出数据,灵活支持表级恢复;后者直接复制底层文件,恢复速度快。容器化部署(Docker)MySQL时,数据一致性、目录挂载和权限管理成为新的难点,需结合事务快照与redo log机制实现一致备份。针对生产环境中的误删、实例崩溃等风险,合理组合逻辑备份与物理备份,并配合binlog进行时间点恢复,能够形成完整的容灾方案。本文围绕Docker环境下的MySQ

weixin_34112181的博客 618

【MySQL】MySQL5.7版本安装与配置

MySQL5.7的安装与配置

低调做人,低调编码,神码都是浮云 2409

MySQL备份表四种方式:CTAS、LIKE+INSERT、mysqldump与OUTFILE实战

数据库备份是保障数据安全的核心操作,MySQL作为主流关系型数据库,其表级备份场景贯穿开发与运维全流程。从底层原理看,备份方式可归为库内复制与库外导出两类:前者如CTAS、CREATE TABLE LIKE,后者如mysqldump、OUTFILE。理解事务一致性、索引保留、文件权限等机制,有助于提升备份效率。在实际工程中,如何应对大表、跨环境迁移、归档分析等不同场景,直接影响选型决策。围绕四种常用备份手段,系统解析其适用条件、操作要点与典型坑点,帮助开发者按需选择最合适的备份方案。

weixin_29227585的博客 111

懒人精灵手游内存技术分析

教学声明:全套教程教学用到的游戏采用手游私服网游进行测试,不针对任何游戏。教学只做计算机技术研究,不做其他用途。

yizhihaoren123的博客 1656

MySQL5.7安装教程(非常详细)从零基础入门到精通,看完这一篇就够了(附安装包)

网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品经理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、灾难恢复专业人员、实战攻防专业人员…网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

Javachichi的博客 3万+

基于STM32环境温湿度监测系统设计

基于STM32环境温湿度监测系统设计1. 实验目的2. 任务和要求3. proteus仿真图4. 实验代码 1. 实验目的 (1) 掌握使用 KEIL MDK5 进行软件开发的具体流程; (2) 掌握硬件电路的设计方法; (3) 掌握 STM32 微控制器的程序设计及代码编写方法。 2. 任务和要求 (1)在 STM32F103 平台下,通过温度传感器 DS18B20 和湿度传感器 DHT11 实现环境温湿度信息的采集; (2)将温度传感器和湿度传感器所采集的数据在 LCD 液晶屏幕上显示出来,超

唯一的博客 2万+

MySQL5.7 最详细下载安装配置教程

在安装MySQL的时候会遇到很多问题,博客上有很多解决问题的办法,在这里我附上一些链接,遇到问题的朋友们可以阅读参考哈~本文主要针对于刚接触数据库的小白,来安装MySQL数据库。目前官网上的MySQL版本有5.5,5.6,5.7和8,在开发的时候我们一般要选择比最新版低1到2个版本的,因此我选择了5.7作为要安装的数据库算上我写博客的时间,安装这个数据库差不多花掉我4个小时的时间,原因是在安装途中我遇到很多问题,在此总结一下,并附上解决链接:1.找不到my.ini文件2.3.4.5.

csdn_life18的博客 2835

实战演练,如何用Easyexcel合并单元格,设置字体、边框样式,并在尾行加入备注

,实现效果如下:1、多级表头合并2、表头底纹+表格边框3、合并相同数据单元格4、尾行加入备注。

Su7148的博客 1万+

PX4|Gazebo模型加载失败排查指南:从环境变量到资源路径的全面解析

本文针对PX4与Gazebo联合仿真中常见的'Unable to get model name'错误,提供了从环境变量配置、资源路径排查到网络访问问题的全面解决方案。详细解析了GZ_SIM_RESOURCE_PATH等关键变量的作用与设置方法,并给出了离线模型库部署等一劳永逸的修复指南,帮助开发者彻底解决无人机模型加载失败问题。

weixin_29243063的博客 1230

MySQL GTID备份问题解析与解决方案

GTID(Global Transaction Identifier)是MySQL中用于全局事务标识的重要机制,通过source_id和transaction_id的组合实现事务的精确定位。在数据库备份与恢复过程中,GTID的自动定位功能可能导致数据丢失问题,特别是在使用mysqldump进行备份时。理解GTID的工作原理及其与备份工具的交互方式,对于确保数据完整性至关重要。本文通过实际案例,分析了GTID自动定位引发的数据丢失现象,并提供了多种备份方案,包括保留GTID信息的主从复制场景和单机恢复场景的正

weixin_42116058的博客 99

22、用户界面流程(UI Flow)全解析

本文全面解析了用户界面流程(UI Flow)的概念、创建步骤及其在系统设计中的应用。通过示例和操作步骤,详细介绍了如何确定屏幕范围、识别屏幕、创建过渡和标记触发器,并阐述了UI Flow在导航识别、验证、可用性优化、测试用例开发和需求推导中的重要作用。文章还结合问答系统案例,展示了UI Flow的实际应用价值,帮助读者深入理解并有效运用这一工具提升系统用户体验。

rice5的博客 154

MySQL GTID备份恢复问题解析与解决方案

GTID(Global Transaction Identifier)是MySQL数据库实现主从复制的核心机制,通过全局唯一事务标识确保数据一致性。在备份恢复场景中,mysqldump工具与GTID机制的配合使用存在典型陷阱——当使用`--master-data`参数时,备份文件会记录GTID范围,可能导致恢复后新写入数据因GTID冲突而丢失。本文通过真实案例剖析GTID工作原理,解释mysqldump备份时`GTID_PURGED`参数的潜在风险,并提供xtrabackup物理备份与安全逻辑备份的组合方案

weixin_30444111的博客 214

Windows 下 Codex 安装全记录:从零到一的保姆级图文教程

本文主要介绍了Windows 下 Codex 安装全记录:从零到一的保姆级图文教程,希望能对学习使用 Codex 的同学们有所帮助。 文章目录 1. 背景 2. 实战教程 2.1 方案一 2.2 方案二 3. 报错解决方案

weixin_43178406的博客 14万+

【HEC】HECRAS中的降雨边界

网格降雨可能是城市地区建模的一个好选择。这是因为传统的一维(1D)建模并不能完全捕捉城市地区通常出现的复杂流动模式。使用网格降雨建模方法在构建包含多个未定义流动路径的模型时也非常有用。对于流量分支非常复杂的水道,设定边界条件可能会很困难。 HECRAS提供两种降雨边界添加的方法 - 在指定SA/2D FLOW AREA添加降雨边界 - 在hec-ras 6.0以上版本中 “气象数据” 的选项卡,可以添加具有空间变化的降水量、蒸散量和风。 两种方法只能选择一种,以下分别介绍

```On Earth, Be Water, By Coding``` 1398

MySQL基础运维:mysqldump全量备份与恢复实操 | 新手可直接落地的备份指南

本文针对MySQL数据库备份与恢复,重点介绍mysqldump工具的使用方法。作为MySQL官方自带的逻辑备份工具,mysqldump操作简单、兼容性强,适合中小型数据库备份。文章详细讲解了备份前的环境准备、专用账户创建等前置操作,并提供了单库备份、多库备份、全实例备份等不同场景的标准代码示例。特别强调备份时需注意字符集设置、无锁备份等关键参数,避免常见错误。通过本文,新手可快速掌握mysqldump全量备份与恢复的完整流程,有效防止数据丢失风险。

m0_67000457的博客 825

大模型在电力交易功率预测中的应用:短期,超短期,中长期的完整解决方案代码详解

本文介绍了基于大模型的电力交易功率预测系统,该系统覆盖超短期(15分钟-1小时)、短期(1-6小时)和中长期(1天-1月)三个时间尺度。文章详细阐述了数据准备与特征工程,包括多源数据集成和特征重要性分析。在模型构建方面,采用了Temporal Fusion Transformer (TFT)模型进行超短期预测,Informer模型进行短期预测,以及N-HiTS模型进行中长期预测。此外,文章还探讨了概率预测与风险分析,并介绍了模型部署与交易策略集成的实现。最后,文章总结了系统的贡献,并展望了未来发展方向,如市

专注AI大模型,软件混淆,授权 1264

MySQL备份实战:从mysqldump到binlog增量恢复全解析

数据库备份是保障数据安全的核心手段,逻辑备份因其灵活性和可编辑性在中小规模场景中不可替代。作为MySQL自带的逻辑备份工具,mysqldump通过将表结构和数据转换为SQL语句实现全量导出,配合binlog增量日志可构建完整的数据恢复体系。在实际应用中,理解--single-transaction、--master-data等关键参数的作用,合理设计备份策略,能有效避免锁表、数据丢失等问题。本文从备份原理出发,梳理了从基础导出到并行备份、从故障恢复到从库搭建的完整实践路径,帮助运维与开发人员建立可靠的MyS

weixin_27134495的博客 223

Devexpress16.2.6破解工具

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

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

MySQL数据备份与恢复:mysqldump+binlog实战指南

数据库备份与恢复是保障数据安全的核心技术。在MySQL生态中,逻辑备份工具mysqldump通过生成SQL语句实现全量备份,而binlog二进制日志则记录了所有数据变更操作,两者结合可构建完整的备份恢复体系。这种组合方案的技术价值在于:既保留了全量备份的完整性,又通过binlog实现增量恢复,支持精确到秒级的PITR(时间点恢复)。对于电商、金融等对RPO(恢复点目标)要求严格的场景尤为适用。通过合理配置binlog_format为ROW模式,配合--master-data参数记录位置点,开发者可以构建自动

weixin_32247165的博客 262

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

MySQL 逻辑备份工具 mysqldump 工作原理深度剖析:从快照到恢复的完整链路

MySQL 生态中备份工具众多,有物理层的 Percona XtraBackup、MySQL Enterprise Backup,也有逻辑层的 mysqldump、mysqlpump、mydumper。在这些工具中,mysqldump 是使用历史最悠久、覆盖场景最广、最容易上手的一个。它随 MySQL 官方发行版一同发布,几乎所有 DBA 的职业生涯都是从一条 mysqldump -u root -p dbname > backup.sql 开始的。

油墨香^-^的博客 215

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

MySQL-MGR集群主节点意外重启后GTID不一致问题分析与修复

本文深入分析了MySQL MGR集群主节点意外重启后GTID不一致的问题,提供了三种修复方案:GTID手动调整法、克隆重建法和备份恢复法。通过详细的技术解析和实战步骤,帮助DBA快速解决[MY-011526]错误,确保集群数据一致性,并给出预防措施与最佳实践。

weixin_27330481的博客 405

MySQL mysqldump备份之--set-gtid-purged=OFF参数影响

mysql开启GTID的时候通过mysqldump备份恢复的注意事项

flynetcn的专栏 4777

MySQL双活与备份:高可用实战指南

MySQL 双活(也叫 “主主 / 双主架构”)的核心目标是让两个 MySQL 节点互为备份、均可对外提供读写服务,彻底解决单节点故障导致的业务中断问题。MySQL 备份的核心目标是 “能恢复、快恢复、恢复准”,主流方案分 “逻辑备份” 和 “物理备份”,需结合 “全量 + 增量” 满足不同场景需求。逻辑备份是将数据导出为 SQL 语句,优点是易理解、易恢复,缺点是大数据量下效率低,核心工具是。

m0_75050314的博客 451

PHP 8.3 数据库备份失败怎么排查

用 PHP 定时脚本调mysqldump它不报错。日志里没有异常,脚本也「跑完了」,直到某天真的要恢复数据,才发现备份文件是 0 字节,或者从三个月前就再没更新过。这类静默失败通常来自三个层面。调用层面,exec()的返回值被丢掉、把函数禁掉、FPM 进程的PATH里根本没有mysqldump。执行层面,管道把mysqldump的退出码吞掉了、PHP 内存被 SQL 文本撑爆、磁盘写满。权限层面,备份账号缺少必要的权限,或者大表上的锁把备份拖到超时。

kimnoic的专栏 28

mysql 1356_mysql.proc表字段缺失导致的mysqldump报错(Got error:1356)

写在最前1356的错误,在前几天写的mysqldump问题集合里面已经写过了,然而本次按照常规的套路无法处理这次的1356错误,所以单独写出来1356以及相关mysqldump错误参阅这个问题集合:mysqldump问题处理集合IP架构问题数据库:172.17.100.106参考库:172.17.100.107、172.17.100.100106库是一个多次实验之后,做过主库也做过从库的数据库;1...

weixin_33260057的博客 1080
上一篇: 申威架构编译安装GreatSQL指南
下一篇: MySQL/GreatSQL 游标重解析后条件下推core缺陷深度排查
GreatSQL社区
博客等级 码龄5年 1210粉丝 390原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值