当前位置: 首页 > news >正文

Mysql--运维篇--备份和恢复(逻辑备份,mysqldump,物理备份,热备份,温备份,冷备份,二进制文件备份和恢复等)

MySQL 提供了多种备份方式,每种方式适用于不同的场景和需求。根据备份的粒度、速度、恢复时间和对数据库的影响,可以选择合适的备份策略。主要备份方式有三大类:逻辑备份(mysqldump),物理备份和二进制文件备份。

一、逻辑备份(Logical Backup)

逻辑备份是通过导出SQL语句或表结构和数据来实现的。它不直接复制物理文件,而是生成可以重新执行的SQL文件。逻辑备份的优点是易于理解和恢复,但通常比物理备份慢。

1、mysqldump工具

mysqldump是MySQL自带的命令行工具,用于导出数据库的表结构和数据。它可以生成完整的SQL文件,支持单个表、多个表或整个数据库的备份。

备份方式:

  • 全量备份:备份整个数据库或多个数据库。
  • 部分备份:可以只备份特定的表或数据库。
  • 增量备份:可以通过–master-data和–single-transaction选项结合二进制日志进行增量备份。

mysqldump备份优点:

  • 支持跨版本恢复。(如:8.0版本导出备份文件,可以在5.7版本Mysql上进行还原)
  • 可以选择性地恢复部分数据。
  • 生成的SQL文件易于理解和修改。

mysqldump备份缺点:

  • 备份速度较慢,尤其是大数据库。
  • 备份期间可能会锁定表(除非使用–single-transaction)。
  • 恢复时间较长,因为需要重新执行SQL语句。

示例:(mysql命令,非sql语句)

(1)、备份所有数据库
mysqldump -u root -p --all-databases > all_databases.sql

运行结果:
会在当前目录下生成全量的sql文件。
在这里插入图片描述
查看如下:
包含所有的库,表和数据信息。
在这里插入图片描述

(2)、备份单个数据库

指定备份demo1数据库,输出到demo1.sql文件中。

mysqldump -u root -p demo1> demo1.sql

运行结果:
在这里插入图片描述
查看如下:
包含demo1库中的表和数据信息。
在这里插入图片描述

(3)、备份单个表

指定demo1数据库的employees表进行备份,输出到employees.sql文件中。

mysqldump -u root -p demo1 employees > employees.sql

运行结果:
在这里插入图片描述
查看如下:
在这里插入图片描述

(4)、使用压缩

使用压缩方式进行备份。

mysqldump -u root -p demo1 | gzip > demo1.sql.gz

如果备份文件非常大,且又需要频繁备份的场景。建议备份时启用压缩。

2、mysqlpump工具

mysqlpump是MySQL 5.7引入的一个新工具,类似于mysqldump,但性能更好,尤其是在处理大数据库时。它支持并行备份和更细粒度的控制。

mysqlpump优点:

  • 支持并行备份,备份速度更快。
  • 支持更多的并发操作。
  • 可以选择性地备份存储过程、触发器等。

mysqlpump缺点:

  • 不支持MySQL 5.6及之前版本。
  • 恢复时间仍然较长。

示例:

(1)、备份全部数据库
mysqlpump -u root -p --all-databases > all_databases1.sql

运行结果:
在这里插入图片描述

(2)、备份单个数据库

备份demo1数据库,输出到demo1_1.sql文件中。

mysqlpump -u root -p demo1 > demo1_1.sql

运行结果:
在这里插入图片描述

(3)、并行备份多个数据库

备份demo1数据库和sys数据库到multiple_databases.sql文件中。

mysqlpump -u root -p --parallel-schemas=demo1,sys> multiple_databases.sql

运行结果:
在这里插入图片描述

二、物理备份(Physical Backup)

物理备份是直接复制数据库的物理文件(如.frm、.ibd等)。物理备份的速度通常比逻辑备份快,因为它是直接复制文件而不是生成SQL语句。物理备份可以分为热备份、温备份和冷备份。

1、冷备份(Cold Backup)

冷备份是指在数据库完全停止的情况下进行的备份。这种方式最简单,但会对业务造成停机影响。

步骤:
(1)、停止MySQL服务。
(2)、复制数据目录中的所有文件。
(3)、重启MySQL服务。

示例:

停止MySQL服务
sudo systemctl stop mysql
复制数据目录
cp -R /var/lib/mysql /backup/mysql_cold_backup
重启MySQL服务
sudo systemctl start mysql

优点:

  • 简单易用。
  • 备份速度快。
  • 恢复速度快。

缺点:

  • 需要停机,不适合生产环境。
  • 无法进行增量备份。

2、温备份(Warm Backup)

温备份是指在数据库处于只读模式的情况下进行的备份。这种方式不会完全停止数据库,但会阻止写操作,因此对业务的影响较小。

步骤:
(1)、将数据库设置为只读模式。
(2)、复制数据目录中的所有文件。
(3)、恢复数据库的读写模式。

示例:

-- 设置只读模式
SET GLOBAL readonly = ON;
-- 复制数据目录
cp -R /var/lib/mysql /backup/mysql_warm_backup
-- 恢复读写模式
SET GLOBAL readonly = OFF;

优点:

  • 不需要完全停机。
  • 备份速度快。
  • 恢复速度快。

缺点:

  • 写操作会被阻止,可能影响业务。
  • 无法进行增量备份。

3、热备份(Hot Backup)

热备份是指在数据库正常运行的情况下进行的备份。这种方式不会影响数据库的正常读写操作,适合生产环境。常见的热备份工具有Percona XtraBackup和MySQL Enterprise Backup。

(1)、Percona XtraBackup

Percona XtraBackup是一个开源的热备份工具,专门用于InnoDB和XtraDB存储引擎。它可以进行在线备份,并且支持增量备份和压缩。

特点:

  • 支持热备份,不影响数据库的正常运行。
  • 支持增量备份和全量备份。
  • 支持压缩和流式备份。
  • 支持备份加密。
  • 支持并行备份和恢复。

示例:

安装Percona XtraBackup
sudo apt-get install percona-xtrabackup-80进行全量备份
xtrabackup --user=root --password=your_password --backup --target-dir=/backup/full进行增量备份
xtrabackup --user=root --password=your_password --backup --target-dir=/backup/incremental --incremental-basedir=/backup/full恢复备份
xtrabackup --prepare --target-dir=/backup/full
xtrabackup --copy-back --target-dir=/backup/full
(2)、MySQL Enterprise Backup

MySQL Enterprise Backup是Oracle提供的商业备份工具,专为MySQL企业版设计。它提供了类似Percona XtraBackup的功能,但还有一些额外的企业级特性,如自动备份调度、备份验证等。

特点:

  • 支持热备份,不影响数据库的正常运行。
  • 支持增量备份和全量备份。
  • 支持压缩和流式备份。
  • 支持备份加密。
  • 支持并行备份和恢复。
  • 提供自动备份调度和备份验证。

优点:

  • 支持热备份,不影响数据库的正常运行。
  • 支持增量备份,节省存储空间。
  • 备份速度快,恢复速度快。
  • 适合大规模生产环境。

缺点:

  • 需要购买 MySQL 企业版许可证。

三、二进制日志备份(Binary Log Backup)

二进制日志(binary log)记录了所有对数据库的更改操作(如INSERT、UPDATE、DELETE等)。通过备份二进制日志,可以在全量备份的基础上进行增量恢复,从而减少恢复时间。

步骤:
1、启用二进制日志。
2、定期备份二进制日志文件。
3、在恢复时,先恢复全量备份,再应用二进制日志中的更改恢复到指定时间点。

示例:

查看当前的二进制日志文件
mysql> SHOW MASTER LOGS;查看日志的路径
SHOW VARIABLES LIKE 'datadir';
SHOW VARIABLES LIKE 'log_bin%';备份二进制日志文件
cp /var/lib/mysql/mysql-bin. /backup/binlogs/应用二进制日志进行恢复
mysqlbinlog /backup/binlogs/mysql-bin.000001 | mysql -u root -p

优点:

  • 支持增量备份,节省存储空间。
  • 可以进行精确的时间点恢复。
  • 适合高可用性和灾难恢复场景。

缺点:

  • 需要启用二进制日志,可能会增加I/O开销。
  • 二进制日志文件较大,需要定期清理。

四、逻辑恢复

逻辑备份是通过mysqldump或mysqlpump等工具生成的SQL文件。恢复时,可以通过执行这些SQL文件来重新创建数据库和表结构,并插入数据。

1、使用mysqldump备份文件恢复

步骤:
(1)、导入SQL文件:将备份的SQL文件通过mysql命令行工具导入到目标数据库中。
(2)、指定数据库:如果备份的是单个数据库或多个数据库,确保在导入时指定正确的数据库名称。

示例:

(1)、恢复整个数据库
mysql -u root -p < all_databases.sql

运行结果:
所有的数据库都恢复到了备份文件生成的时间点。
在这里插入图片描述

(2)、恢复单个数据库:

恢复demo1数据库,执行demo1.sql文件

mysql -u root -p demo1 < demo1.sql

运行结果:
在这里插入图片描述

(3)、恢复单个表

恢复demo1数据库的employees表,执行employees.sql文件。

mysql -u root -p demo1 < employees.sql

运行结果:
在这里插入图片描述

优点:

  • 支持跨版本恢复。
  • 可以选择性地恢复部分数据(如单个表或存储过程)。
  • 生成的SQL文件易于理解和修改。

缺点:

  • 恢复速度较慢,尤其是大数据库。
  • 如果备份文件较大,可能会占用较多内存和磁盘I/O。
  • 需要重新执行SQL语句,可能导致锁表或阻塞其他操作。

2、使用mysqlpump备份文件恢复

mysqlpump是MySQL 5.7引入的一个新工具,支持并行备份和更细粒度的控制。恢复过程与mysqldump类似,几乎一样。

示例:

恢复整个数据库
mysql -u root -p < all_databases.sql恢复单个数据库
指定恢复demo1数据库,执行demo1.sql文件
mysql -u root -p demo1 < demo1.sql

优点:

  • 支持并行恢复,速度更快。
  • 支持更多的并发操作。
  • 可以选择性地恢复部分数据。

缺点:

  • 不支持MySQL 5.6及以下版本。

五、物理恢复

物理备份是直接复制数据库的物理文件(如.frm、.ibd等)。物理备份的恢复速度通常比逻辑备份快,因为它是直接恢复文件而不是重新执行SQL语句。

1、冷备份的恢复

冷备份是在数据库完全停止的情况下进行的备份。恢复时,只需将备份的文件复制回原始位置,并重启MySQL服务。

步骤:
(1)、停止MySQL服务。
(2)、复制备份文件:将备份的数据目录复制回原始位置。
(3)、重启MySQL服务。

示例:

停止MySQL服务
sudo systemctl stop mysql复制备份文件
cp -R /backup/mysql_cold_backup/ /var/lib/mysql/重启MySQL服务
sudo systemctl start mysql

优点:

  • 恢复速度快。
  • 不需要重新执行SQL语句。

缺点:

  • 需要停机,不适合生产环境。
  • 无法进行增量恢复。

2、温备份的恢复

温备份是在数据库处于只读模式的情况下进行的备份。恢复时,只需将备份的文件复制回原始位置,并恢复数据库的读写模式。

步骤:
1、设置只读模式。
2、复制备份文件:将备份的数据目录复制回原始位置。
3、恢复读写模式。

示例:

-- 设置只读模式
SET GLOBAL readonly = ON;-- 复制备份文件
cp -R /backup/mysql_warm_backup/ /var/lib/mysql/-- 恢复读写模式
SET GLOBAL readonly = OFF;

优点:

  • 不需要完全停机。
  • 恢复速度快。

缺点:

  • 写操作会被阻止,可能影响业务。
  • 无法进行增量恢复。

3、热备份的恢复

热备份是在数据库正常运行的情况下进行的备份。常见的热备份工具有Percona XtraBackup和MySQL Enterprise Backup。恢复时,需要先准备备份文件,然后将其复制回原始位置。

(1)、使用Percona XtraBackup恢复

步骤:
1、准备备份文件:使用XtraBackup --prepare命令准备备份文件,确保其处于一致状态。
2、停止MySQL服务。
3、复制备份文件:将准备好的备份文件复制回原始位置。
4、重启MySQL服务。

示例:

准备全量备份
xtrabackup --prepare --target-dir=/backup/full如果有增量备份,同时也要指定准备增量备份
xtrabackup --prepare --apply-log-only --target-dir=/backup/full --incremental-dir=/backup/incremental停止MySQL服务
sudo systemctl stop mysql删除现有数据目录
rm -rf /var/lib/mysql/复制备份文件
xtrabackup --copy-back --target-dir=/backup/full修改数据目录权限
chown -R mysql:mysql /var/lib/mysql重启MySQL服务
sudo systemctl start mysql

优点:

  • 支持热备份,不影响数据库的正常运行。
  • 支持增量备份,节省存储空间。
  • 恢复速度快。

缺点:

  • 需要准备备份文件,增加了一步操作。
  • 恢复过程中需要停止MySQL服务。
(2)、使用MySQL Enterprise Backup恢复

MySQL Enterprise Backup是Oracle提供的商业备份工具,恢复过程与Percona XtraBackup类似,但提供了更多企业级特性。

步骤:
1、准备备份文件:使用mysqlbackup --apply-log命令准备备份文件。
2、停止MySQL服务。
3、复制备份文件:将准备好的备份文件复制回原始位置。
4、重启MySQL服务。

示例

准备全量备份
mysqlbackup --user=root --password=your_password --backup-dir=/backup/full --apply-log prepare如果有增量备份,同时也要准备增量备份
mysqlbackup --user=root --password=your_password --backup-dir=/backup/full --incremental-backup-dir=/backup/incremental --apply-log prepare停止MySQL服务
sudo systemctl stop mysql删除现有数据目录
rm -rf /var/lib/mysql/复制备份文件
mysqlbackup --user=root --password=your_password --backup-dir=/backup/full --copy-back修改数据目录权限
chown -R mysql:mysql /var/lib/mysql重启MySQL服务
sudo systemctl start mysql

优点:

  • 支持热备份,不影响数据库的正常运行。
  • 支持增量备份,节省存储空间。
  • 恢复速度快。
  • 提供自动备份调度和备份验证。

缺点:

  • 需要购买MySQL企业版许可证。

六、二进制日志恢复

MySQL的二进制日志(Binary Log,简称binlog)记录了所有对数据库的更改操作(如INSERT、UPDATE、DELETE等)。通过二进制日志,可以实现增量备份、主从复制和时间点恢复。

1、什么是二进制日志?

二进制日志是MySQL中的一种日志文件,记录了所有对数据库的更改操作。它以二进制格式存储,因此不能直接阅读,但可以通过工具解析。

二进制日志的主要用途包括:

  • 主从复制:主库将二进制日志发送给从库,从库根据日志重放这些操作,保持与主库同步。
  • 增量备份:在全量备份的基础上,使用二进制日志进行增量备份,减少备份时间和存储空间。
  • 时间点恢复:通过二进制日志,可以在某个特定的时间点恢复数据,避免不必要的数据丢失。

2、启用二进制日志

要使用二进制日志,首先需要在MySQL配置文件中启用它。编辑/etc/my.cnf或/etc/mysql/my.cnf文件,添加或修改以下配置项。

示例:

[mysqld]启用二进制日志
log_bin=mysql-bin设置二进制日志的格式(STATEMENTROWMIXED)
binlog_format=ROW设置二进制日志的过期天数(可选)
expire_logs_days=7设置二进制日志的最大文件大小(可选)
max_binlog_size=100M设置唯一的服务器 ID(用于主从复制)
server_id=1

解释:

  • log_bin:指定二进制日志的文件名前缀。默认情况下,MySQL会将日志文件保存在数据目录中(通常是/var/lib/mysql/)。
  • binlog_format:设置二进制日志的格式。常见的格式有:
    • STATEMENT:记录SQL语句。
    • ROW:记录每一行的变化(推荐使用,尤其是对于InnoDB表)。
    • MIXED:混合模式,MySQL会根据情况自动选择STATEMENT或ROW。
  • expire_logs_days:设置二进制日志的保留天数。超过这个天数的日志将被自动删除。
  • max_binlog_size:设置单个二进制日志文件的最大大小。当达到这个大小时,MySQL会创建一个新的日志文件。
  • server_id:设置唯一的服务器ID,用于主从复制。

重启MySQL服务:
修改配置文件后,重启MySQL服务以使配置生效:

sudo systemctl restart mysql

3、查看二进制日志文件

启用二进制日志后,MySQL会在数据目录中生成一系列以mysql-bin.000001、mysql-bin.000002等命名的文件。

相关示例:

(1)、查看二进制日志文件列表
SHOW BINARY LOGS;

输出示例:
在这里插入图片描述

(2)、查看当前正在使用的二进制日志文件
SHOW MASTER STATUS;

输出示例:
在这里插入图片描述
解释:

  • File:当前正在使用的二进制日志文件。
  • Position:当前日志文件中的写入位置。

4、备份二进制日志

为了确保数据的安全性,建议定期备份二进制日志。

常见的备份方法:

(1)、手动备份

你可以直接复制二进制日志文件到备份目录中。由于二进制日志文件是追加写入的,因此可以安全地复制它们,而不会影响MySQL的正常运行。

示例:

创建备份目录
mkdir -p /backup/binlogs复制二进制日志文件
cp /var/lib/mysql/mysql-bin. /backup/binlogs/
(2)、mysqlbinlog工具备份

mysqlbinlog是MySQL提供的一个工具,用于解析和导出二进制日志文件。你可以使用它将二进制日志转换为SQL文件,便于备份和恢复。

示例:
1、将所有二进制日志导出为SQL文件

mysqlbinlog /var/lib/mysql/mysql-bin.000001 > /backup/binlogs/mysql-bin.000001.sql
mysqlbinlog /var/lib/mysql/mysql-bin.000002 > /backup/binlogs/mysql-bin.000002.sql

2、指定时间范围的备份

mysqlbinlog --start-datetime="2023-10-01 00:00:00" --stop-datetime="2023-10-02 00:00:00" /var/lib/mysql/mysql-bin.000001 > /backup/binlogs/mysql-bin.000001.sql

解释:

  • –start-datetime和–stop-datetime:指定导出的时间范围。

3、指定行数的备份

  mysqlbinlog --start-position=1234 --stop-position=5678 /var/lib/mysql/mysql-bin.000001 > /backup/binlogs/mysql-bin.000001.sql

解释:

  • –start-position和–stop-position:指定导出的位置范围。

4、从远程服务器进行复制备份

mysqlbinlog --read-from-remote-server --host=192.168.1.100 --user=root --password=your_password /var/lib/mysql/mysql-bin.000001 > /backup/binlogs/mysql-bin.000001.sql

解释:

  • –read-from-remote-server:从远程服务器读取二进制日志(适用于主从复制环境)。

5、自动化备份

为了实现自动化的二进制日志备份,可以编写一个脚本并结合cron定时任务来定期执行备份。

以下是一个简单的Shell脚本示例:
第一步:编写自动化脚本(backup_binlogs.sh),如下:

#!/bin/bash# 配置变量
BACKUP_DIR="/backup/binlogs"
DATE=$(date +%Y%m%d_%H%M%S)
MYSQL_USER="root"
MYSQL_PASSWORD="your_password"# 创建备份目录(如果不存在)
mkdir -p $BACKUP_DIR# 获取当前的二进制日志文件列表
BINARY_LOGS=$(mysql -u $MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW BINARY LOGS" | awk 'NR>1 {print $1}')# 备份每个二进制日志文件
for LOG in $BINARY_LOGS; doFILENAME="${BACKUP_DIR}/${LOG}_${DATE}.sql.gz"echo "Backing up binary log: $LOG to $FILENAME"# 使用 mysqlbinlog 导出并压缩日志文件mysqlbinlog -u $MYSQL_USER -p$MYSQL_PASSWORD /var/lib/mysql/$LOG | gzip > $FILENAMEif [ $? -eq 0 ]; thenecho "Backup of $LOG completed successfully."elseecho "Backup of $LOG failed."fi
done# 清理旧备份(保留最近7天的备份)
find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +7 -exec rm {} \;

第二步:设置定时任务
(1)、打开crontab编辑器:

crontab -e

(2)、添加以下行,每天凌晨2点执行备份脚本:

0 2 * * * /path/to/backup_binlogs.sh >> /var/log/binlog_backup.log 2>&1   

(3)、保存并退出。
解释:

  • 0 2 * * * :表示每天凌晨2点执行。
  • /path/to/backup.sh:替换为你的备份脚本的实际路径。
  • /var/log/mysql_backup.log 2>&1:将输出和错误日志重定向到指定的日志文件。

6、清理二进制日志

随着时间的推移,二进制日志文件会逐渐增多,占用大量磁盘空间。因此,定期清理不再需要的二进制日志是非常重要的。
你可以通过以下方式清理二进制日志:

(1)、自动清理

通过配置expire_logs_days参数,可以让MySQL自动清理超过指定天数的二进制日志。例如,设置expire_logs_days=7,表示保留最近7天的二进制日志,超过7天的日志将被自动删除。

(2)、手动清理

你可以使用PURGE BINARY LOGS命令手动清理二进制日志。

常见的清理方式:

  • 按文件名清理:删除指定文件名之前的二进制日志。
    sql示例:
PURGE BINARY LOGS TO 'mysql-bin.000010';
  • 按日期清理:删除指定日期之前的二进制日志。
    sql示例:
PURGE BINARY LOGS BEFORE '2023-10-01 00:00:00';
  • 清空所有二进制日志:删除所有二进制日志并重置日志编号。请注意,这会影响主从复制,谨慎使用。
    sql示例:
RESET MASTER;

7、使用二进制日志进行恢复

二进制日志可以用于增量恢复,尤其是在全量备份的基础上。通过应用二进制日志中的操作,可以将数据库恢复到某个特定的时间点。结合恢复全量备份和二进制日志恢复。

示例:
假设你已经有一个过去的全量备份,并且希望恢复到某个时间点。

1、恢复全量备份:首先恢复最近的全量备份。
mysql -u root -p < full_backup.sql2、应用二进制日志:使用mysqlbinlog解析并应用二进制日志文件。你可以根据需要指定时间范围或位置范围。
mysqlbinlog --start-datetime="2023-10-01 00:00:00" --stop-datetime="2023-10-02 10:00:00" /var/lib/mysql/mysql-bin.000001 | mysql -u root -p

解释:
为什么要先进行全量备份的恢复呢?
全量备份是数据库的一个完整副本,包含了所有表、索引、视图等对象的数据。它是数据库恢复的基础,提供了恢复过程中的“起点”。二进制日志记录了自全量备份之后的所有数据库更改操作。如果你有的只是二进制文件没有之前的备份文件,那么恢复是无法进行的。简单说就是二进制文件的起点行不知道是哪一句增删改的语句,甚至当前的数据库中表都不存在了。

过程推理说明:
假设2025年的1月4日15点30分,你不小心删除了某张重要表的数据。
第一步:(假设每天的0点都进行全量的数据库备份)
你要先找到1月4日0点的全量备份文件。执行恢复此文件,将数据库还原到1月4日0点的状态。
第二步:
找到正在执行的binlog日志文件(不确定可以指定最近的两个),指定开始时间为1月4日0点,结束时间会1月4日15点0分(误删表的前一小段时间点)。
这样就相当于在1月4日0点当时数据库的基础上,重新执行了0点到15点这段时间内的所有增删改的语句,从而实现了故障恢复的效果。

8、监控二进制日志

为了确保二进制日志的健康状态,建议定期监控其使用情况。你可以使用以下查询来获取二进制日志的相关信息:

查看二进制日志的状态:

 SHOW MASTER STATUS;

运行结果:
在这里插入图片描述

查看二进制日志的文件列表:

SHOW BINARY LOGS;

运行结果:
在这里插入图片描述

查看二进制日志的事件:

 SHOW BINLOG EVENTS IN 'mysql-bin.000001';

运行结果:
在这里插入图片描述

监控二进制日志的大小:

  SELECT *FROM performance_schema.file_summary_by_instanceWHERE file_name LIKE '%mysql-bin%';

运行结果:
在这里插入图片描述

乘风破浪会有时,直挂云帆济沧海!!!

相关文章:

Mysql--运维篇--备份和恢复(逻辑备份,mysqldump,物理备份,热备份,温备份,冷备份,二进制文件备份和恢复等)

MySQL 提供了多种备份方式&#xff0c;每种方式适用于不同的场景和需求。根据备份的粒度、速度、恢复时间和对数据库的影响&#xff0c;可以选择合适的备份策略。主要备份方式有三大类&#xff1a;逻辑备份&#xff08;mysqldump&#xff09;&#xff0c;物理备份和二进制文件备…...

机器学习-归一化

文章目录 一. 归一化二. 归一化的常见方法1. 最小-最大归一化 (Min-Max Normalization)2. Z-Score 归一化&#xff08;标准化&#xff09;3. MaxAbs 归一化 三. 归一化的选择四. 为什么要进行归一化1. 消除量纲差异2. 提高模型训练速度3. 增强模型的稳定性4. 保证正则化项的有效…...

Linux 串口检查状态的实用方法

在 Linux 系统中&#xff0c;串口通信是非常常见的操作&#xff0c;尤其在嵌入式系统、工业设备以及其他需要串行通信的场景中。为了确保串口设备的正常工作&#xff0c;检查串口的连接状态和配置信息是非常重要的。本篇文章将介绍如何在 Linux 上检查串口的连接状态&#xff0…...

Qt的核心机制概述

Qt的核心机制概述 1. 元对象系统&#xff08;The Meta-Object System&#xff09; 基本概念&#xff1a;元对象系统是Qt的核心机制之一&#xff0c;它通过moc&#xff08;Meta-Object Compiler&#xff09;工具为继承自QObject的类生成额外的代码&#xff0c;从而扩展了C语言…...

微调神经机器翻译模型全流程

MBART: Multilingual Denoising Pre-training for Neural Machine Translation 模型下载 mBART 是一个基于序列到序列的去噪自编码器&#xff0c;使用 BART 目标在多种语言的大规模单语语料库上进行预训练。mBART 是首批通过去噪完整文本在多种语言上预训练序列到序列模型的方…...

Cesium加载地形

Cesium的地形来源大致可以分为两种&#xff0c;一种是由Cesium官方提供的数据源&#xff0c;一种是第三方的数据源&#xff0c;官方源依赖于Cesium Assets&#xff0c;如果设置了AccessToken后&#xff0c;就可以直接使用Cesium的地形静态构造方法来获取数据源CesiumTerrainPro…...

gitlab runner正常连接 提示 作业挂起中,等待进入队列 解决办法

方案1 作业挂起中,等待进入队列 重启gitlab-runner gitlab-runner stop gitlab-runner start gitlab-runner run方案2 启动 gitlab-runner 服务 gitlab-runner start成功启动如下 [rootdocserver home]# gitlab-runner start Runtime platform …...

C#对动态加载的DLL进行依赖注入,并对DLL注入服务

文章目录 什么是依赖注入概念常用的依赖注入实现什么是动态加载定义示例对动态加载的DLL进行依赖注入什么是依赖注入 概念 依赖注入(Dependency Injection,简称 DI)是一种软件设计模式,用于解耦软件组件之间的依赖关系。在 C# 开发中,它主要解决的是类与类之间的强耦合问题…...

HDMI接口

HDMI接口 前言各版本区别概述&#xff08;Overview&#xff09;接口接口类型Type A/E 引脚定义Type B 引脚定义Type C 引脚定义Type D 引脚定义 传输流程概述Control Period前导码字符边界同步Control Period 编/解码 Data Island PeriodLeading/Trailing Guard BandTERC4 编/解…...

A/B 测试:玩转假设检验、t 检验与卡方检验

一、背景&#xff1a;当“审判”成为科学 1.1 虚拟场景——法庭审判 想象这样一个场景&#xff1a;有一天&#xff0c;你在王国里担任“首席审判官”。你面前站着一位嫌疑人&#xff0c;有人指控他说“偷了国王珍贵的金冠”。但究竟是他干的&#xff0c;还是他是被冤枉的&…...

第143场双周赛:最小可整除数位乘积 Ⅰ、执行操作后元素的最高频率 Ⅰ、执行操作后元素的最高频率 Ⅱ、最小可整除数位乘积 Ⅱ

Q1、最小可整除数位乘积 Ⅰ 1、题目描述 给你两个整数 n 和 t 。请你返回大于等于 n 的 最小 整数&#xff0c;且该整数的 各数位之积 能被 t 整除。 2、解题思路 问题拆解&#xff1a; 题目要求我们找到一个整数&#xff0c;其 数位的积 可以被 t 整除。 数位的积 是指将数…...

【STM32】LED状态翻转函数

1.利用状态标志位控制LED状态翻转 在平常编写LED状态翻转函数时&#xff0c;通常利用状态标志位实现LED状态的翻转。如下所示&#xff1a; unsigned char led_turn_flag; //LED状态标志位&#xff0c;1-点亮&#xff0c;0-熄灭/***************************************函…...

uniapp 小程序 textarea 层级穿透,聚焦光标位置错误怎么办?

前言 在开发微信小程序时&#xff0c;使用 textarea 组件可能会遇到一些棘手的问题。最近我在使用 uniapp 开发微信小程序时&#xff0c;就遇到了两个非常令人头疼的问题&#xff1a; 层级穿透&#xff1a;由于 textarea 是原生组件&#xff0c;任何元素都无法遮盖住它。当其…...

汽车 SOA 架构下的信息安全新问题及对策漫谈

摘要&#xff1a;随着汽车行业的快速发展&#xff0c;客户和制造商对车辆功能的新需求促使汽车架构从面向信号向面向服务的架构&#xff08;SOA&#xff09;转变。本文详细阐述了汽车 SOA 架构的协议、通信模式&#xff0c;并与传统架构进行对比&#xff0c;深入分析了 SOA 给信…...

Unity-Mirror网络框架-从入门到精通之RigidbodyPhysics示例

文章目录 前言示例一、球体的基础配置二、三个球体的设置差异三、示例意图LatencySimulation前言 在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。本系列文章将为读者提供对Mirror网络框架的深入了解,涵盖从基础到高级的多个主题。Mirror是一个用于Unity的开…...

小程序如何引入腾讯位置服务

小程序如何引入腾讯位置服务 1.添加服务 登录 微信公众平台 注意&#xff1a;小程序要企业版的 第三方服务 -> 服务 -> 开发者资源 -> 开通腾讯位置服务 在设置 -> 第三方设置 中可以看到开通的服务&#xff0c;如果没有就在插件管理中添加插件 2.腾讯位置服务…...

H3CNE-12-静态路由(一)

静态路由应用场景&#xff1a; 静态路由是指由管理员手动配置和维护的路由 路由表&#xff1a;路由器用来妆发数据包的一张“地图” 查看命令&#xff1a; dis ip routing-table 直连路由&#xff1a;接口配置好IP地址并UP后自动生成的路由 静态路由配置&#xff1a; ip…...

多线程锁

在并发编程中&#xff0c;锁&#xff08;Lock&#xff09;是一种用于控制多个线程对共享资源访问的机制。正确使用锁可以确保数据的一致性和完整性&#xff0c;避免出现竞态条件&#xff08;Race Condition&#xff09;、死锁&#xff08;Deadlock&#xff09;等问题。Java 提供…...

ZooKeeper 核心知识全解析:架构、角色、节点与应用

1.ZooKeeper 分布式锁怎么实现的 ZooKeeper 是一个高效的分布式协调服务&#xff0c;它提供了简单的原语集来构建更复杂的同步原语和协调数据结构。利用 ZooKeeper 实现分布式锁主要依赖于它的顺序节点&#xff08;Sequential Node&#xff09;特性以及临时节点&#xff08;Ep…...

笔记本电脑 选购 回收 特权模式使用 指南

笔记本电脑 factor 无线网卡&#xff1a;有些笔记本无法检测到特定频段的信息&#xff0c;会导致连不上校园网 sudo iwlist wlp2s0 scan | grep Frequency > net.txt cat net.txt>表示用终端输出覆盖后续文件&#xff0c;>>表示添加到后续文件的末尾 一种更简…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...