Mysql数据备份与恢复
前言
看完本文,删库跑路!? 再也不可能发生了!一定要养成风险操作备份数据的习惯,避免恢复数据浪费时间。
本文内容:
- binlog 的作用
- mysqldump 和 mysqlbinlog 做数据备份和数据恢复。
- XtraBackup 全量备份和增量备份
binlog
binlog 作用及配置
Mysql 的 binlog
(二进制日志) 是 Server
层的,不管你的存储引擎是什么都可以使用 binlog
。
binlog
记录的是数据库 DML
和 DDL
修改的数据内容,也可以用于数据的备份与恢复。一般我们会用
binlog
也用于主从复制,从库请求主库的 binlog
写入到自己的中继日志,然后将中继日志转换为 sql
,然后将 sql 执行在从库执行。
-- 查看是否开启 binlog
SHOW VARIABLES LIKE '%log_bin%'mysql> SHOW VARIABLES LIKE '%log_bin%';
+---------------------------------+-----------------------------+
| Variable_name | Value |
+---------------------------------+-----------------------------+
| log_bin | ON |
| log_bin_basename | /var/lib/mysql/binlog |
| log_bin_index | /var/lib/mysql/binlog.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+-----------------------------+
开启二进制日志配置
log_bin
配置是否启用 binlog
。Mysql 8.0
默认开启 binlog
。
log_bin_index
配置的是 binlog
日志文件的索引信息。这个配置最好配置了之后不要修改。
log_bin_basename
配置的是 binlog
日志的基础路径名称。
server_id
这个也需要配置,在一个集群中这个数字不能重复。
sql_log_bin
配置当前会话 DML 和 DDL 语句是否记录。
[root@centos-7 mysql]# pwd
/var/lib/mysql
[root@centos-7 mysql]# ll | grep binlog
-rw-r-----. 1 mysql mysql 16162 11月 21 15:58 binlog.000013
-rw-r-----. 1 mysql mysql 179 11月 21 15:58 binlog.000014
-rw-r-----. 1 mysql mysql 3765 11月 22 14:42 binlog.000015
-rw-r-----. 1 mysql mysql 1700 11月 23 23:40 binlog.000016
-rw-r-----. 1 mysql mysql 64 11月 22 14:42 binlog.index
[root@centos-7 mysql]#
binlog 日志格式
-- 查看当前 binlog 文件存储什么数据
SHOW VARIABLES LIKE '%binlog_format%';
binlog
日志格式有以下三种
STATEMENT
记录的是 sql 语句。
ROW
Mysql 8.0
默认采用这个格式。记录每行的修改。相较于 STATEMENT
它可能记录的内容会更多,但是主从复制时更安全。
比如全表更新 update test set a=1;
STATEMENT
只会记录这个 sql
,而 ROW
会记录所有数据的修改。
MIXED
当需要时,Mysql 将日志格式从 STATEMENT
切换为 ROW
。
比如说更新语句可能记录为逻辑 sql (STATEMENT
),而插入语句记录为(ROW
) 格式。
binlog 日志格式验证
创建一张表,插入 10 w 数据
DROP TABLE IF EXISTS `account`;
CREATE TABLE `account` (`id` int NOT NULL AUTO_INCREMENT,`username` varchar(255) DEFAULT NULL,`age` int DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=100000 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
DROP PROCEDURE if EXISTS insertData;
CREATE PROCEDURE insertData ( )
BEGINDECLARE i INT DEFAULT 1;WHILE i < 10000 DOSET i = i + 1;INSERT INTO account ( username, age )VALUES( '测试', 12 ); END WHILE;
END;
CALL insertData ( );
binlog_format
在ROW
模式下记录的是每行数据的修改
mysql> SHOW BINLOG EVENTS IN 'binlog.000018' limit 10;
+---------------+-------+----------------+-----------+-------------+--------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+---------------+-------+----------------+-----------+-------------+--------------------------------------+
| binlog.000018 | 4 | Format_desc | 1 | 125 | Server ver: 8.0.21, Binlog ver: 4 |
| binlog.000018 | 125 | Previous_gtids | 1 | 156 | |
| binlog.000018 | 156 | Anonymous_Gtid | 1 | 236 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| binlog.000018 | 236 | Query | 1 | 322 | BEGIN |
| binlog.000018 | 322 | Table_map | 1 | 386 | table_id: 99 (ceshi2.account) |
| binlog.000018 | 386 | Update_rows | 1 | 8600 | table_id: 99 |
| binlog.000018 | 8600 | Update_rows | 1 | 16814 | table_id: 99 |
| binlog.000018 | 16814 | Update_rows | 1 | 25028 | table_id: 99 |
| binlog.000018 | 25028 | Update_rows | 1 | 33242 | table_id: 99 |
| binlog.000018 | 33242 | Update_rows | 1 | 41456 | table_id: 99 |
+---------------+-------+----------------+-----------+-------------+--------------------------------------+
binlog_format
在STATEMENT
模式下记录的是 sql
flush logs;update ceshi2.account set username='2';mysql> SHOW BINLOG EVENTS IN 'binlog.000019' limit 10;
+---------------+-----+----------------+-----------+-------------+----------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+---------------+-----+----------------+-----------+-------------+----------------------------------------+
| binlog.000019 | 4 | Format_desc | 1 | 125 | Server ver: 8.0.21, Binlog ver: 4 |
| binlog.000019 | 125 | Previous_gtids | 1 | 156 | |
| binlog.000019 | 156 | Anonymous_Gtid | 1 | 235 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| binlog.000019 | 235 | Query | 1 | 324 | BEGIN |
| binlog.000019 | 324 | Query | 1 | 446 | update ceshi2.account set username='2' |
| binlog.000019 | 446 | Xid | 1 | 477 | COMMIT /* xid=300671 */ |
+---------------+-----+----------------+-----------+-------------+----------------------------------------+
binlog 操作
查看所有的 binlog
-- 查看链接的数据库 binlog 文件信息
SHOW BINARY LOGS;
SHOW MASTER LOGS;mysql> SHOW BINARY LOGS;
+---------------+-----------+-----------+
| Log_name | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000013 | 16162 | No |
| binlog.000014 | 179 | No |
| binlog.000015 | 3765 | No |
| binlog.000016 | 1700 | No |
+---------------+-----------+-----------+
查看当前正在写入的 binlog
-- 查看当前正在写入的 binlog 文件信息
SHOW MASTER STATUS;mysql> SHOW MASTER STATUS;
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000016 | 1700 | | | |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
生成新的 binlog
-- 刷新产生新的日志文件
FLUSH LOGS;-- 原来的日志文件是 binlog.000016
mysql> SHOW MASTER STATUS;
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000017 | 156 | | | |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
查看 binlog 中的操作
SHOW BINLOG EVENTS[IN 'log_name'][FROM pos][LIMIT [offset,] row_count]mysql> show binlog events limit 100,3;
+---------------+------+----------------+-----------+-------------+-------------------------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+---------------+------+----------------+-----------+-------------+-------------------------------------------------------------------------------------+
| binlog.000013 | 9382 | Query | 1 | 9539 | use `ceshi`; GRANT SELECT ON `ceshi`.`test2` TO 'db_dev'@'localhost' /* xid=1023 */ |
| binlog.000013 | 9539 | Anonymous_Gtid | 1 | 9616 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| binlog.000013 | 9616 | Query | 1 | 9711 | use `ceshi`; FLUSH PRIVILEGES |
+---------------+------+----------------+-----------+-------------+-------------------------------------------------------------------------------------+
binlog 落盘时机
Mysql 中有很多 Buffer Pool
(可以简单理解为内存),为了提高数据库性能,一般提交事务之后,二进制日志先写入 Buffer Poll
,在写入到二进制文件中。
如果二进制日志没有落盘,那么二进制日志有可能丢失,从库进行复制时会丢失数据。
参数 sync_binlog
配置写入 Buffer Poll
多少次的时候调用系统调用 fsync
将内存中的二进制日志数据落盘。
sync_binlog=1
表示提交事务的时候同步将二进制日志数据落盘。配合innodb_flush_log_at_trx_commit=1
(控制 redo log 落盘) 数据安全。sync_binlog=N
表示提交了 N 个二进制数据时才将日志数据落盘。也有人将其设置为 2,提高并发性,系统崩溃时可能丢失二进制日志数据。sync_binlog=0
表示由操作系统 IO 调度来决定日志什么时候落盘。一般没人采用这个。
Mysql 备份和恢复
为了避免意外情况发生导致数据丢失,数据库需要定时全备和增量备份。以便于可以将数据库恢复到任意时间点的数据。
根据备份方法的不同可以划分为:
- 热备(Hot Backup)
- 冷备 (Clod Backup)
热备是在数据库正在运行时直接备份,对业务的影响不大。
冷备需要停止 Mysql 进行备份,速度较快。可以在从库进行冷备。
根据备份后的文件内容可以划分为:
- 逻辑备份,数据库执行的 sql 内容
- 文件备份,备份数据库的物理文件
一般我们会定时对数据执行备份脚本,然后将备份的内容压缩发送到存储文件的服务器,比如 OSS
。
备份与恢复使用到程序
- mysqldump,对数据库进行不停机执行逻辑备份及恢复
- mysqlbinlog,操作 binlog 日志,使数据恢复到某个时间点的数据
- xtrabackup,percona 开源工具,对数据库不停机进行文件备份
mysqldump 使用
备份某些数据库
mysqldump --master-data --single-transaction --databases ceshi2 ceshi -h10.211.55.8 -uroot -pMysql@12345678 > backup.sql
备份所有数据库
mysqldump --master-data --single-transaction --all-databases -h10.211.55.8 -uroot -pMysql@12345678 > backup.sql
参数说明
--single-transaction
用于全是InnoDB
表的备份。备份开始执行前START TRANSACTION
会开启事务,由于MVCC
的特性这种备份不会影响数据库读写,而且还保证了备份期间数据的一致性--master-data
为 1 时记录CHANGE MASTER
语句,可以在从库中使用备份的文件,比如新增加一个从库,就可以在从库上执行这个备份的数据。为 2 时 会注释CHANGE MASTER
。--lock-tables
锁住单个数据库中所有表,只允许读取数据。为了保证备份时数据的一致性。因为只能锁住单个数据库,如果有多个数据库就不能保证数据的一致性了。当数据库采用的存储引擎既有InnoDB
和MyISAM
时需要使用这个属性--lock-all-tables
锁住备份所有数据库的表,能保证多个数据库数据的一致性。--databases
可以指定备份哪些数据库实例--all-databases
备份连接中所有的数据库实例。--evnets
备份事件调度器--routines
备份存储过程和存储函数--triggers
备份触发器--flush-logs
导出之前刷新日志,因为有的数据在内存中,可能还没有写入到二进制日志中
mysqlbinlog 使用
mysqlbinlog 可以解析 binlog
生成 sql语句。
# 在本地生成 sql
mysqlbinlog --disable-log-bin /Users/zhangpanqin/Desktop/binlog.000019 > test.sql
mysqlbinlog --disable-log-bin /Users/zhangpanqin/Desktop/binlog.000019 > test.sql# 根据日志的位置
mysqlbinlog binlog.000019 --disable-log-bin --start-position 775 > 775.sql
mysqlbinlog binlog.000019 --disable-log-bin --start-position 477 --stop-position 556 > 477-556.sql# 根据时间
mysqlbinlog binlog.000019 --start-date='2017-12-19 10:10:00' --stop-date='2017-12-19 18:52:00' > aa.sql# 链接远程使用
mysqlbinlog --disable-log-bin --read-from-remote-server --host=10.211.55.8 --user=root --password=Mysql@12345678 binlog.000019 binlog.000020> remote_test.sql
--start-position
指定从哪个位置开始--stop-position
指定从哪个位置开始--start-datetime
指定开始时间--stop-datetime
指定结束时间--disable-log-bin
生成的 sql 语句中,添加SET SQL_LOG_BIN=0
,执行转换的 sql 时,不会生成二进制日志--read-from-remote-server
从远程服务器读取
数据恢复
一般我们会使用 mysqldump
进行一个全量备份,在这个全量备份的基础上,从 binlog
提取后续 sql 进行数据恢复。
模拟一个场景
1、比如我们在某个 2020-11-28 16:30:00
进行了全量备份。
2、2020-11-28 16:35:00
删除了 account
表中全部数据
3、删除之后不知道,又插入了两条数据
INSERT INTO `ceshi2`.`account`(`id`, `username`, `age`) VALUES (11111111, '删除全库之后插入', 11);
INSERT INTO `ceshi2`.`account`(`id`, `username`, `age`) VALUES (11111112, 'asdfasd', 12);
恢复数据的时候,为避免恢复操作写入到二进制日志中去,需要暂时关闭二进制日志,恢复会话期间不写入二进制日志
SET SQL_LOG_BIN=0;
SHOW VARIABLES LIKE '%sql_log_bin%';
现在开始对数据库进行数据恢复
- 开始恢复之前先
flush logs
刷新新的二进制日志
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000020 | 156 | | | |
+---------------+----------+--------------+------------------+-------------------+
- 设置当前会话不记录二进制日志,并恢复全备数据
(echo "SET SQL_LOG_BIN=0;";cat /Users/zhangpanqin/Desktop/backup.sql) | mysql -u root -h 10.211.55.8 -pMysql@12345678 -f
- 查看 backup.sql 记录的是什么时候备份的数据
/*CHANGE MASTER TO MASTER_LOG_FILE='binlog.000019', MASTER_LOG_POS=477;*/
- 使用 mysqlbinlog 导出
binlog
从位置477
开始的 sql
-- 笨的方法就是,查看删除的 sql 语句
SHOW BINLOG EVENTS IN 'binlog.000019' FROM 477 LIMIT 0,10;mysql> SHOW BINLOG EVENTS IN 'binlog.000019' FROM 477 LIMIT 0,10;
+---------------+------+----------------+-----------+-------------+-------------------------------------------------------------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+---------------+------+----------------+-----------+-------------+-------------------------------------------------------------------------------------------------------------------------+
| binlog.000019 | 477 | Anonymous_Gtid | 1 | 556 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| binlog.000019 | 556 | Query | 1 | 642 | BEGIN |
| binlog.000019 | 642 | Query | 1 | 744 | use `ceshi2`; DELETE FROM `account` |
| binlog.000019 | 744 | Xid | 1 | 775 | COMMIT /* xid=300922 */ |
| binlog.000019 | 775 | Anonymous_Gtid | 1 | 854 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| binlog.000019 | 854 | Query | 1 | 940 | BEGIN |
| binlog.000019 | 940 | Query | 1 | 1126 | use `ceshi2`; INSERT INTO `ceshi2`.`account`(`id`, `username`, `age`) VALUES (11111111, '删除全库之后插入', 11) |
| binlog.000019 | 1126 | Xid | 1 | 1157 | COMMIT /* xid=301033 */ |
| binlog.000019 | 1157 | Anonymous_Gtid | 1 | 1236 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| binlog.000019 | 1236 | Query | 1 | 1322 | BEGIN |
+---------------+------+----------------+-----------+-------------+-------------------------------------------------------------------------------------------------------------------------+
-- 导出 477-556 之间的 sql mysqlbinlog binlog.000019 --start-position 477 --stop-position 556 > 477-556.sql-- 导出 从 775 开始的 sql mysqlbinlog binlog.000019 --start-position 775> 775.sql
这里比较好的做法就是直接使用工具直接解析 sql
binlog2sql
https://github.com/danfengcao/binlog2sql
- 执行剩下的 sql
(echo "SET SQL_LOG_BIN=0;";cat /Users/zhangpanqin/Desktop/477-556.sql) | mysql -u root -h 10.211.55.8 -pMysql@12345678 -f
(echo "SET SQL_LOG_BIN=0;";cat /Users/zhangpanqin/Desktop/775.sql) | mysql -u root -h 10.211.55.8 -pMysql@12345678 -f
- 查看 binlog 日志,没有添加二进制日志到数据库中,不影响从库
mysql> SHOW MASTER STATUS;
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000020 | 156 | | | |
+---------------+----------+--------------+------------------+-------------------+
XtraBackup 使用
XtraBackup 只能备份InnoDB和XtraDB 两种数据表。
安装
系统环境:Centos 7 x86_64
数据库:Mysql 8.0.21
由以上环境决定了 xtrabackup
需要安装 8.0.14 版本。
https://www.percona.com/doc/percona-xtrabackup/8.0/installation/yum_repo.html
wget https://downloads.percona.com/downloads/Percona-XtraBackup-LATEST/Percona-XtraBackup-8.0.14/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.14-1.el7.x86_64.rpmyum localinstall percona-xtrabackup-80-8.0.14-1.el7.x86_64.rpm# 验证版本
xtrabackup --version
命令讲解
--backup
备份操作,备份数据到--target-dir
指定的目录。--prepare
恢复数据执行的阶段。--use-memory
指定备份时占用的内存,--use-memory=4G。--copy-back
将准备好的数据文件复制到 mysql datadir 目录。- ``--apply-log-only` 阻止回滚未完成的事务
全量备份
创建备份使用的用户
CREATE USER 'xtrabackup'@'localhost' IDENTIFIED BY 'Mysql@12345678';
GRANT BACKUP_ADMIN, PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'xtrabackup'@'localhost';
GRANT SELECT ON performance_schema.log_status TO 'xtrabackup'@'localhost';
FLUSH PRIVILEGES;
xtrabackup 全量备份
xtrabackup --host=localhost --user=xtrabackup --password=Mysql@12345678 --backup --target-dir=/opt/test22/backup
全量数据恢复
# 先停止数据库
systemctl stop mysqld# 恢复数据执行的准备
xtrabackup --host=localhost --user=xtrabackup --password=Mysql@12345678 --prepare --target-dir=/opt/test22/backup# 备份数据库文件,并删除数据库数据目录下的文件
cp -r /var/lib/mysql{,"$(date '+%Y-%m-%d %H:%M:%S')"_bak} && rm -fr /var/lib/mysql/*
# 恢复数据
xtrabackup --host=localhost --user=xtrabackup --password=Mysql@12345678 --copy-back --target-dir=/opt/test22/backup
# 查看 /var/lib/mysql 目录下所有文件的所属人,需要改成 mysqld 运行的用户
chown -R mysql:mysql /var/lib/mysql
# 启动 mysql 数据库
systemctl start mysqld
增量备份
在全量备份的基础上,增量备份。
增量备份
# 创建全量备份在那个目录下
mkdir -p /opt/xtrabackup_mysql/full_data_dir
# 全量基础之后的增量数据一次
mkdir -p /opt/xtrabackup_mysql/increment_data_dir
# 在上一次增量备份的基础上在增量备份一次
mkdir -p /opt/xtrabackup_mysql/increment_data_dir_2# 全量备份
xtrabackup --defaults-file=/etc/my.cnf --host=localhost --user=xtrabackup --password=Mysql@12345678 --backup --parallel=3 --target-dir=/opt/xtrabackup_mysql/full_data_dir# 全量备份之后,操作数据。# 做增量备份
xtrabackup --defaults-file=/etc/my.cnf --host=localhost --user=xtrabackup --password=Mysql@12345678 --backup --parallel=3 --target-dir=/opt/xtrabackup_mysql/increment_data_dir --incremental-basedir=/opt/xtrabackup_mysql/full_data_dir# 操作了数据之后,在上一次增量备份基础上做第二次增量备份
xtrabackup --defaults-file=/etc/my.cnf --host=localhost --user=xtrabackup --password=Mysql@12345678 --backup --parallel=3 --target-dir=/opt/xtrabackup_mysql/increment_data_dir_2 --incremental-basedir=/opt/xtrabackup_mysql/increment_data_dir
增量备份数据恢复
# 停止数据库
systemctl stop mysqld# 准备全备份日志数据
xtrabackup --defaults-file=/etc/my.cnf --prepare --apply-log-only --target-dir=/opt/xtrabackup_mysql/full_data_dir# 合并第一次增量备份数据到全量中,注意路径别写错了
xtrabackup --defaults-file=/etc/my.cnf --prepare --apply-log-only --target-dir=/opt/xtrabackup_mysql/full_data_dir --incremental-dir=/opt/xtrabackup_mysql/increment_data_dir# 合并第二次增量备份数据到全量中,注意路径。最后一次不需要添加 --apply-log-only
xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/opt/xtrabackup_mysql/full_data_dir --incremental-dir=/opt/xtrabackup_mysql/increment_data_dir_2# 将原来数据库备份
cp -r /var/lib/mysql{,"$(date '+%Y-%m-%d %H:%M:%S')"_bak} && rm -fr /var/lib/mysql/*-- 拷回数据
xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/opt/xtrabackup_mysql/full_data_dir
# 修改mysql 数据文件的权限为 mysql
chown -R mysql:mysql /var/lib/mysql
# 启动数据库
systemctl start mysqld
本文由 张攀钦的博客 http://www.mflyyou.cn/ 创作。 可自由转载、引用,但需署名作者且注明文章出处。
如转载至微信公众号,请在文末添加作者公众号二维码。微信公众号名称:Mflyyou
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- AutoMapper的使用----基本篇
今天来写一下关于.net中AutoMapper的使用中的常用的地方。首先我个人是非常非常喜欢AutoMapper的,因为它真正做到了又轻量又好用,它只干了一件事,就是帮你做对象类型转换。下面就记录一下它的使用,我的代码是基于.net core的 第一…...
2024/4/28 0:20:22 - 打造属于你自己的私人大数据顾问(科技|财经|生活购物方面)
打造属于你自己的私人大数据顾问--科技|财经|生活购物Motivation 起因那么怎么做,从哪几方面入手呢数据从哪里来数据处理观察数据数据策略给出行动指导突然想做些这个方便面的事情,是由几个动因造成的。这应该是一个长期系列记录文章。想起什么会慢慢的补…...
2024/3/23 15:50:10 - jQuery 内容文本值|| 案例:购物车案例模块-增减商品数量 || 案例:购物车案例模块-修改商品小计
jQuery 内容文本值 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compatible&quo…...
2024/4/24 20:15:11 - Cesium界面学习以及隐藏界面控件
这一跑起来界面很多元素;都是控件;先来学习一下; 这5个是: 查找位置控件,找到之后镜头会对准找到的地址; 视角返回初始位置; 选择视角的模式:3D,2D,哥伦布视…...
2024/4/28 5:08:22 - Python IDLE可以使用ctrl +[ 批量减少缩进,ctrl + ]批量增加缩进
即选中多行代码,进行整体左移或右移。...
2024/4/28 2:20:09 - 这是一场自己跟自己的比赛
keep发布一个(运动图片,自己的写真,健身任务)记账本记账剪映剪辑视频上传小红书同步微信步数微博打卡(想说的话,计划和反思,赚钱金额,步数,睡眠质量,自己的照…...
2024/3/23 15:50:05 - 草稿 9206需抄写 1129
9206-1127 成绩汇总 冯上 0 缺考 缺考 李德伟 40 40 缺考 马正财 0 缺考 缺考 秦佳豪 0 缺考 缺考 吴刘波 0 缺考 缺考 赵奥雄 0 缺考 0...
2024/3/29 19:45:47 - C语言基础(打印集合图形)
写一篇循环语句的训练吧 打印三角形 #include <stdio.h>int main() {int i, j; for (i 0; i < 10; i){for (j 0; j < 9 - i; j)printf (" ");printf ("*");for (j 0; j < 2 * i; j)printf (" ");printf ("*");prin…...
2024/3/23 15:50:02 - React开发简书总结
React 简书网开发 github地址 技术栈 whatwayReact创建组件Redux管理数据react-redux方便使用 reduxredux-thunk让store有能力接收函数,用来做异步数据获取与复杂逻辑immutable.js保证 redux 的 state 不被修改react-router路由管理react-loadable实现异步组件&a…...
2024/4/17 15:10:14 - 用GraphPad Prism9做分组柱状图与散点图共存图
仅仅用柱状图不能反应数据分布的情况,而柱状图带散点图能够体现原始数据的分布规律,下面我们就详细讲一下如何使用GraphPad Prism软件绘制分组带散点的柱形图。 数 据 我们使用的数据是,利用载体示踪来研究4种类型神经元对小鼠某一脑区的输…...
2024/3/23 15:50:00 - 荣耀MagicBook2019+Manjaro20.1KDE初始设置一文流
荣耀魔法书2019Manjaro20.1KDE初始设置一文流 文章目录荣耀魔法书2019Manjaro20.1KDE初始设置一文流写在前面为什么要在博客记录本文配置源和系统更新修改源排名添加archlinux仓库安装yay和修改aururl同步仓库和系统更新安装常用软件fcitx和讯飞输入法chrome(可选&a…...
2024/3/23 15:50:00 - macOS 彻底卸载 Adobe XD 及清理相关文件
今天在 macOS 上安装了 Adobe XD CC, 然后想要卸载, 下面是本人的惨痛经历. 注: 因为我在新机器上之前从来没有装过 Adobe 产品, 所以下面的东西凡是看到和 Adobe 有关的都被我删了个遍, 请谨慎作为参考! 在 macOS 上如何 彻底卸载 Adobe XD CC 及其相关文件? 卸载主程序 在…...
2024/4/1 17:12:32 - 归并排序记录
1.我的目的 很久没有写过基本的排序算法了,想实现一下,这里是归并排序;最近应该会把基本排序算法都回忆一遍。 2.代码 我的代码: let s [1,2,5,3,5,1,4]; let funcA function (arr) {let l parseInt(arr.length/2);if (l &g…...
2024/3/23 14:36:33 - Java 方法重载概念
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。 每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。 最常用的地方就是构造器的重载。 重载规则: 被重载的方法必须…...
2024/4/24 20:28:56 - 【Leetcode】1670. Design Front Middle Back Queue
题目地址: https://leetcode.com/problems/design-front-middle-back-queue/ 要求设计一个双端队列,除了要实现队首队尾添加删除元素之外,还需要实现从中间添加删除的操作。中间的定义是,如果整个队列有偶数个元素,则…...
2024/4/24 20:28:55 - 实体类中Date属性格式化 @JsonFormat @DateTimeFormat
mysql 数据库中是datetime类型,java对象中用Date接收,传给前台时,想要格式化一下 在实体类的属性上使用注解: JsonFormat(shape JsonFormat.Shape.STRING, pattern “yyyy-MM-dd HH:mm:ss”, timezone “GMT8”) DateTimeFor…...
2024/4/24 20:28:54 - LeetCode 493. 翻转对(归并排序 || 离散化+树状数组)
493. 翻转对 方法一 class Solution { public:int reversePairs(vector<int>& nums) {return div(nums,0,nums.size()-1);}int div(vector<int> &nums,int l,int r){if(l>r) return 0;int mid l(r-l)/2;int res div(nums,l,mid)div(nums,mid1,r);//…...
2024/4/24 20:28:56 - pytz.exceptions.UnknownTimeZoneError解决办法
raise UnknownTimeZoneError(zone) pytz.exceptions.UnknownTimeZoneError: Asia/Beijing 源码中是这样的: def _tz_from_env(tzenv):if tzenv[0] ::tzenv tzenv[1:]# TZ specifies a fileif os.path.isabs(tzenv) and os.path.exists(tzenv):with open(tzenv, …...
2024/4/27 8:54:13 - Navicat for MySQL 15 注册激活 (只需要2分钟,亲测有效)
1.安装Mavicat,按步骤安装即可,安装完毕后先不要打开软件,断开网络连接,将激活工具复制到Navicat安装路径下,以管理员身份运行。 2.打开链接的破解软件,在弹出界面选择Navicat 15 Products选择MySQL&#…...
2024/4/24 20:28:54 - Brainfuck语言入门
Brainfuck语言(简称BF)是一种非常接近图灵机的编程语言。 本文既是BF的详细介绍和工具,也是我学习BF的全过程记录。 一,指令 BF只有8种有效字符,其实就是8种指令: 字符 含义 > 指针加一 < 指针…...
2024/4/24 20:28:53
最新文章
- PyCharm 无法运行的解决方案
问题: PyCharm 无法运行,该怎么办? 解决方案: 1. 检查 Python 解释器 确保已为 PyCharm 配置正确的 Python 解释器。打开 PyCharm,转到“文件”>“设置”>“项目”>“Python 解释器”。选择所需的 Python …...
2024/4/28 16:16:49 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - FreeRTOS学习 -- 再识
工作中一直使用FreeRTOS进行着开发,但是没有进行过系统的总结过。现在将快速使用几天时间将FreeRTOS相关知识点加以总结。 官网: https://www.freertos.org/zh-cn-cmn-s/ 参看资料: 正点原子 STM32F1 FreeRTOS开发手册_V1.2.pdf The FreeRTOS…...
2024/4/23 6:24:52 - 人工智能产业应用--具身智能
五、下一个浪潮 (一) 跳出缸中脑——虚实结合 在探索人工智能的边界时,“跳出缸中脑——虚实结合”这一概念提出了一个引人深思的视角,尤其是在具身智能的领域。具身智能是一种思想,强调智能体通过与其环境的直接物理互动来实现智能行为。然…...
2024/4/22 16:29:21 - 416. 分割等和子集问题(动态规划)
题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义:dp[i][j]表示当背包容量为j,用前i个物品是否正好可以将背包填满ÿ…...
2024/4/28 4:04:40 - 【Java】ExcelWriter自适应宽度工具类(支持中文)
工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...
2024/4/28 12:01:04 - Spring cloud负载均衡@LoadBalanced LoadBalancerClient
LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon,直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件,我们讨论Spring负载均衡以Spring Cloud2020之后版本为主,学习Spring Cloud LoadBalance,暂不讨论Ribbon…...
2024/4/27 12:24:35 - TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案
一、背景需求分析 在工业产业园、化工园或生产制造园区中,周界防范意义重大,对园区的安全起到重要的作用。常规的安防方式是采用人员巡查,人力投入成本大而且效率低。周界一旦被破坏或入侵,会影响园区人员和资产安全,…...
2024/4/27 12:24:46 - VB.net WebBrowser网页元素抓取分析方法
在用WebBrowser编程实现网页操作自动化时,常要分析网页Html,例如网页在加载数据时,常会显示“系统处理中,请稍候..”,我们需要在数据加载完成后才能继续下一步操作,如何抓取这个信息的网页html元素变化&…...
2024/4/28 12:01:03 - 【Objective-C】Objective-C汇总
方法定义 参考:https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...
2024/4/28 12:01:03 - 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】
👨💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】🌏题目描述🌏输入格…...
2024/4/28 12:01:03 - 【ES6.0】- 扩展运算符(...)
【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数࿰…...
2024/4/28 16:07:14 - 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?
文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕,各大品牌纷纷晒出优异的成绩单,摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称,在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁,多个平台数据都表现出极度异常…...
2024/4/27 21:08:20 - Go语言常用命令详解(二)
文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令,这些命令可以帮助您在Go开发中进行编译、测试、运行和…...
2024/4/28 9:00:42 - 用欧拉路径判断图同构推出reverse合法性:1116T4
http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b,我们在 a i a_i ai 和 a i 1 a_{i1} ai1 之间连边, b b b 同理,则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然࿰…...
2024/4/27 18:40:35 - 【NGINX--1】基础知识
1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息,并安装一些有助于配置官方 NGINX 软件包仓库的软件包: apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...
2024/4/28 4:14:21 - Hive默认分割符、存储格式与数据压缩
目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限(ROW FORMAT)配置标准HQL为: ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...
2024/4/27 13:52:15 - 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法
文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中,传感器和控制器产生大量周…...
2024/4/27 13:38:13 - --max-old-space-size=8192报错
vue项目运行时,如果经常运行慢,崩溃停止服务,报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中,通过JavaScript使用内存时只能使用部分内存(64位系统&…...
2024/4/28 12:00:58 - 基于深度学习的恶意软件检测
恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞,例如可以被劫持的合法软件(例如浏览器或 Web 应用程序插件)中的错误。 恶意软件渗透可能会造成灾难性的后果,包括数据被盗、勒索或网…...
2024/4/28 12:00:58 - JS原型对象prototype
让我简单的为大家介绍一下原型对象prototype吧! 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定,每一个构造函数都有一个 prototype 属性,指向另一个对象,所以我们也称为原型对象…...
2024/4/27 22:51:49 - C++中只能有一个实例的单例类
C中只能有一个实例的单例类 前面讨论的 President 类很不错,但存在一个缺陷:无法禁止通过实例化多个对象来创建多名总统: President One, Two, Three; 由于复制构造函数是私有的,其中每个对象都是不可复制的,但您的目…...
2024/4/28 7:31:46 - python django 小程序图书借阅源码
开发工具: PyCharm,mysql5.7,微信开发者工具 技术说明: python django html 小程序 功能介绍: 用户端: 登录注册(含授权登录) 首页显示搜索图书,轮播图࿰…...
2024/4/28 8:32:05 - 电子学会C/C++编程等级考试2022年03月(一级)真题解析
C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...
2024/4/27 20:28:35 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57