DM 的斷點續傳測試

作者: 大魚海棠 原文來源: https://tidb.net/blog/4540ae34

一、概述

DM有all、full、incremental三種數據遷移同步方式(task-mode),在all同步模式下,因一些特殊情況,需要變更上游MySQL的數據源IP,一般有如下幾種處理方式:

  1. 放棄已同步的數據,重新用all模式同步(適合數據量比較小的場景,操作簡單)
  2. 記錄同步到的位點信息,停掉task和數據源,將同步模式改為incremental并在task配置中指定MySQL示例的位點信息重新拉起任務

task中meta配置下游數據庫的 checkpoint 不存在時 binlog 遷移開始的位置; 如果 checkpoint 存在,則以 checkpoint 為準。如果 meta 項和下游數據庫的 checkpoint 都不存在,則從上游當前最新的 binlog 位置開始遷移

  1. 不修改task-mode的情況下,基于檢查點斷點續傳, 本文主要基于該場景測試

二、MySQL環境準備

mysql

set global validate_password_mixed_case_count=0;
set global validate_password_policy='LOW'; 
set global validate_password_number_count=0; 
set global validate_password_special_char_count=0;
set global validate_password_length=4;
alter user root@'localhost' identified by 'dm_test'; 

配置文件

[mysqld]                                                                                                                                                                        
datadir=/mysql57/data                                                                                                                                                           
socket=/var/lib/mysql/mysql.sock                                                                                                                                                
symbolic-links=0                                                                                                                                                                
binlog_format=ROW                                                                                                                                                               
log_bin=/mysql57/logbin/logbin                                                                                                                                                  
log-error=/mysql57/log/mysqld.log                                                                                                                                               
pid-file=/var/run/mysqld/mysqld.pid                                                                                                                                             
gtid_mode=ON                                                                                                                                                                    
enforce_gtid_consistency=ON  
# 主從使用不同的server_id                                                                                                                                                   
server_id=2 
# 從庫開啟binlog記錄                                                                                                                                                                 
log-slave-updates = 1

主從搭建

reset master;
change master to master_host='172.1.1.4', master_user='root', master_password='dm_test', master_port=3306, master_auto_position=1;
start slave;
show slave status\G

三、DM任務創建

1. 創建數據源

創建數據源配置文件

[tidb@vm10-2-103-112 ~]$ cat source-01.yaml                                                                                                                                     
source-id: "mysql-01"
enable-gtid: true                                                                                                                                                           from:                                                                                                                                                                           host: "172.1.1.2"                                                                                                                                                          port: 3306                                                                                                                                                                    user: "root"                                                                                                                                                                  password: "dm_test" 

上游數據源賬戶所需權限

上游數據源用戶所需權限:

  1. information_schem和需要同步的表的select權限
  2. reload權限
  3. REPLICATION CLIENT、REPLICATION SLAVE

創建數據源

tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 operate-source create ./source-01.yaml

查看創建的數據源

tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 config source mysql-01

2. 創建同步任務

task配置文件準備

vim task01.yamlname: test1                      
task-mode: all                  
shard-mode: "pessimistic"       meta-schema: "dm_meta1"          
# timezone: "Asia/Shanghai"     case-sensitive: false           
online-ddl: true               
clean-dump-file: true           # 是否清理 dump 階段產生的文件,包括 metadata 文件、建庫建表 SQL 文件以及數據導入 SQL 文件
collation_compatible: "loose"   # 同步 CREATE 語句中缺省 Collation 的方式,可選 "loose" 和 "strict",默認為 "loose"。"loose" 模式不會顯式補充上游缺省的 Collation,"strict" 會顯式補充上游缺省的 Collation。當使用 "strict" 模式,但下游不支持上游缺省的 Collation 時,下游可能會報錯。
ignore-checking-items: []       target-database:host: "172.1.1.4"port: 4000user: "dm_test"password: "dm_test"  block-allow-list:                    bw-rule-1:                         do-dbs: ["dm_test.*"]mydumpers:                           global:                            threads: 4                       chunk-filesize: 64               extra-args: "--consistency auto" loaders:                             global:                            pool-size: 16dir: "./dumped_data"import-mode: "logical"on-duplicate-logical: "replace"syncers:                             global:                            worker-count: 16                 batch: 100                       safe-mode: falsesafe-mode-duration: "60s"compact: falsemultiple-rows: false
# ----------- 實例配置 -----------
mysql-instances:-source-id: "mysql-01"block-allow-list:  "bw-rule-1"mydumper-config-name: "global"loader-config-name: "global"syncer-config-name: "global"

下游tidb同步用戶所需權限:

  1. 待同步庫表的SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、ALTER、INDEX權限
  2. dm元數據庫表的 ALL 權限

前置檢查

tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 check-task ./task01.yaml

創建task

tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 start-task ./task01.yaml

查看同步狀態

tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 query-status test1

四、單實例更換數據源IP

驗證不修改task配置,直接更換數據源IP

1. 不修改source-id

Stop 任務和數據源

tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 stop-task test1 
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 operate-source stop mysql-01

僅修改數據源IP

source-id: "mysql-01"                                                                                                                                                           
enable-gtid: true                                                                                                                                                               from:                                                                                                                                                                           host: "120.1.1.115"                                                                                                                                                         port: 3306                                                                                                                                                                    user: "root"                                                                                                                                                                  password: "dm_test"

創建數據源和task

tiup dmctl:v7.1.3 --master-addr 172.16.201.4:8261 operate-source create  ./source-01.yaml
tiup dmctl:v7.1.3 --master-addr 172.16.201.4:8261 start-task ./task01.yaml 
tiup dmctl:v7.1.3 --master-addr 172.16.201.4:8261 query-status test1

驗證同步無異常

不改變source-id的情況下,dm會去元數據表中找到斷點,進行斷點續傳,不會重新dump數據

2. 修改source-id

tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 stop-task test1 
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 operate-source stop mysql-01

修改數據源IP和source-id

source-id: "mysql-02"                                                                                                                                                           
enable-gtid: true                                                                                                                                                               from:                                                                                                                                                                           host: "172.1.1.2"                                                                                                                                                          port: 3306                                                                                                                                                                    user: "root"                                                                                                                                                                  password: "dm_test"

創建數據源和task

需要修改task01.yaml的數據源

tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 operate-source create  ./source-01.yaml
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 start-task ./task01.yaml 
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 query-status test1

驗證同步無異常

修改了source-id的情況下,會觸發重新dump全量數據

3. 更換IP期間新增了表

在停掉task和數據源后,模擬MySQL增加表和數據(只修改數據源IP)

mysql> create table t3(id int primary key,b int);                                                                                                                               
Query OK, 0 rows affected (0.04 sec)                                                                                                                                            mysql> insert into t3 values (1,1);                                                                                                                                             
Query OK, 1 row affected (0.01 sec)                                                                                                                                             mysql> insert into t3 values (2,1);                                                                                                                                             
Query OK, 1 row affected (0.01 sec) 

修改數據源IP后,創建task

tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 operate-source create  ./source-01.yaml
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 start-task ./task01.yaml
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 query-status test1 

同步無異常,未dump全量數據

檢查點分為針對單表的同步位點和數據源的同步位點,如果存在當前表的位點,則基于位點繼續同步,如不存在,基于數據源位點往后同步

五、分片集群修改數據源IP

環境準備

基于單實例的環境,新增MySQL節點來測試

數據源配置

source-id: "mysql-04"                                                                                                                                                           
enable-gtid: true                                                                                                                                                               from:                                                                                                                                                                           host: "172.1.1.4"                                                                                                                                                          port: 3306                                                                                                                                                                    user: "root"                                                                                                                                                                  password: "dm_test" 

task配置

name: test2                                                                                                                                                                     
task-mode: all                                                                                                                                                                  
shard-mode: "pessimistic"                                                                                                                                                       meta-schema: "dm_meta2"                                                                                                                                                         
# timezone: "Asia/Shanghai"                                                                                                                                                     case-sensitive: false                                                                                                                                                           
online-ddl: true                                                                                                                                                                
clean-dump-file: false           # 是否清理 dump 階段產生的文件,包括 metadata 文件、建庫建表 SQL 文件以及數據導入 SQL 文件                                                     
collation_compatible: "loose"   # 同步 CREATE 語句中缺省 Collation 的方式,可選 "loose" 和 "strict",默認為 "loose"。"loose" 模式不會顯式補充上游缺省的 Collation,"strict" 會顯
式補充上游缺省的 Collation。當使用 "strict" 模式,但下游不支持上游缺省的 Collation 時,下游可能會報錯。                                                                         
ignore-checking-items: []                                                                                                                                                       target-database:                                                                                                                                                                host: "172.1.1.4"                                                                                                                                                          port: 4000                                                                                                                                                                    user: "dm_test"                                                                                                                                                               password: "dm_test"                                                                                                                                                           block-allow-list:                                                                                                                                                               bw-rule-1:                                                                                                                                                                    do-dbs: ["dm_test"]                                                                                                                                                      mydumpers:                                                                                                                                                                      global:                                                                                                                                                                       threads: 4                                                                                                                                                                  chunk-filesize: 64                                                                                                                                                          extra-args: "--consistency auto"                                                                                                                                            loaders:                                                                                                                                                                        global:                                                                                                                                                                       pool-size: 16                                                                                                                                                               dir: "./dumped_data"                                                                                                                                                        import-mode: "logical"                                                                                                                                                      on-duplicate-logical: "replace"                                                                                                                                             syncers:                                                                                                                                                                        global:                                                                                                                                                                       worker-count: 16                                                                                                                                                            batch: 100                                                                                                                                                                  safe-mode: false                                                                                                                                                            safe-mode-duration: "60s"                                                                                                                                                   compact: false                                                                                                                                                              multiple-rows: false                                                                                                                                                        
# ----------- 實例配置 -----------                                                                                                                                              
mysql-instances:                                                                                                                                                                -                                                                                                                                                                             source-id: "mysql-04"                                                                                                                                                       block-allow-list:  "bw-rule-1"                                                                                                                                              mydumper-config-name: "global"                                                                                                                                              loader-config-name: "global"                                                                                                                                                syncer-config-name: "global"  

創建數據源和任務

tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 operate-source create  ./source-02.yaml                                                                                
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 start-task ./task01.yaml                                                                                               
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 query-status test2 

重復單實例數據源IP修改過程,驗證結果與單實例一致

六、總結

斷點續傳來源于dm元數據信息(dm_meta庫的表記錄信息),主要包含以下幾點

  1. task.yaml的name的值
  2. task.yaml的meta-schema是否改變
  3. 數據源配置中source-id是否改變

如有其他變更項,可結合檢查點進行分析,通過檢查點信息是否改變來判斷是否可以斷點續傳

前提:

  1. 使用 query-status 命令獲取當前 binlog replication 處理單元已復制到下游的 binlog 對應的 GTID sets ( syncerBinlogGtid ),記為 gtid-S

  2. 在將要切換到的 MySQL 實例上使用 SELECT @@GLOBAL.gtid_purged; 獲取已經被 purged 的 binlog 對應的 GTID sets,記為 gtid-P

  3. 在將要切換到的 MySQL 實例上使用 SELECT @@GLOBAL.gtid_executed; 獲取所有已經執行成功的事務對應的 GTID sets,記為 gtid-E

  4. 確保滿足以下關系,否則不支持將 DM-worker 連接切換到相應的 MySQL 實例:

    1. gtid-S 包含 gtid-P gtid-P 可以為空)
    2. gtid-E 包含 gtid-S

七、附加測試

1. 測試一

數據源的配置文件默認 enable-gtid: false ,現驗證同步過程中,是否可修改該參數

驗證修改后同步正常,在 enable-gtid: false 情況下,檢查點會同時攜帶position信息和gitd信息,修改后可基于位點斷點續傳

2. 測試二

DM配置文件 extra-args: "--consistency none" 默認值為none,none的官網解釋是不做一致性保障

none模式下

2024-06-21T08:23:44.159963Z     18511 Query     SELECT @@max_allowed_packet                                                                                                     
2024-06-21T08:23:44.160052Z     18511 Query     SET time_zone = '+08:00'                                                                                                        
2024-06-21T08:23:44.160149Z     18511 Query     SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ                                                                         
2024-06-21T08:23:44.160242Z     18511 Query     START TRANSACTION /*!40108 WITH CONSISTENT SNAPSHOT */                                                                          
2024-06-21T08:23:44.160343Z     18511 Query     SHOW MASTER STATUS                                                                                                              
2024-06-21T08:23:44.160534Z     18511 Query     SHOW SLAVE STATUS                                                                                                               
2024-06-21T08:23:44.160731Z     18511 Query     SHOW DATABASES                                                                                                                  2024-06-21T08:23:44.161956Z     18511 Query     SELECT COUNT(1) as c FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='SEQUENCE'                                                 
2024-06-21T08:23:44.171027Z     18511 Query     SHOW TABLE STATUS FROM `dm_test`                                                                                             
2024-06-21T08:23:44.174675Z     18511 Query     SHOW MASTER STATUS                                                                                                              
2024-06-21T08:23:44.174826Z     18511 Query     SHOW CREATE DATABASE `dm_test`                                                                                               
2024-06-21T08:23:44.174981Z     18511 Query     SHOW COLUMNS FROM `dm_test`.`customer`                                                                                       
2024-06-21T08:23:44.175584Z     18511 Query     SELECT `c_id`,`c_d_id`,`c_w_id`,`c_first`,`c_middle`,`c_last`,`c_street_1`,`c_street_2`,`c_city`,`c_state`,`c_zip`,`c_phone`,`c_
since`,`c_credit`,`c_credit_lim`,`c_discount`,`c_balance`,`c_ytd_payment`,`c_payment_cnt`,`c_delivery_cnt`,`c_data` FROM `dm_test`.`customer` LIMIT 1                        
2024-06-21T08:23:44.178285Z     18511 Query     SHOW CREATE TABLE `dm_test`.`customer`                                                                                       
2024-06-21T08:23:44.178529Z     18511 Query     SHOW INDEX FROM `dm_test`.`customer`                                                                                         
2024-06-21T08:23:44.178805Z     18511 Query     EXPLAIN SELECT `c_w_id` FROM `dm_test`.`customer`                                                                            
2024-06-21T08:23:44.179002Z     18511 Query     SHOW INDEX FROM `dm_test`.`customer`                                                                                         
2024-06-21T08:23:44.179269Z     18511 Query     SHOW INDEX FROM `dm_test`.`customer`                                                                                         
2024-06-21T08:23:44.179510Z     18511 Query     EXPLAIN SELECT `c_w_id` FROM `dm_test`.`customer`                                                                            
2024-06-21T08:23:44.179748Z     18511 Query     SELECT MIN(`c_w_id`),MAX(`c_w_id`) FROM `dm_test`.`customer` 2024-06-21T08:23:44.173952Z     18512 Query     SELECT @@max_allowed_packet                                                                                                     
2024-06-21T08:23:44.174104Z     18512 Query     SET time_zone = '+08:00'                                                                                                        
2024-06-21T08:23:44.174281Z     18512 Query     SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ                                                                         
2024-06-21T08:23:44.174546Z     18512 Query     START TRANSACTION /*!40108 WITH CONSISTENT SNAPSHOT */                                                                          
2024-06-21T08:23:44.182494Z     18512 Query     SELECT `c_id`,`c_d_id`,`c_w_id`,`c_first`,`c_middle`,`c_last`,`c_street_1`,`c_street_2`,`c_city`,`c_state`,`c_zip`,`c_phone`,`c_
2024-06-21T08:23:45.888538Z     18512 Query     SELECT `d_id`,`d_w_id`,`d_name`,`d_street_1`,`d_street_2`,`d_city`,`d_state`,`d_zip`,`d_tax`,`d_ytd`,`d_next_o_id` FROM `dm_test`.`district` ORDER BY `d_w_id`,`d_id`                                                                                                                                        
2024-06-21T08:23:45.889394Z     18512 Query     SELECT `h_c_id`,`h_c_d_id`,`h_c_w_id`,`h_d_id`,`h_w_id`,`h_date`,`h_amount`,`h_data` FROM `dm_test`.`history` WHERE `h_w_id` IS NULL OR (`h_w_id` >= 1 AND `h_w_id` < 11)                                                                                                                                    
2024-06-21T08:23:46.281664Z     18512 Query     SELECT `i_id`,`i_im_id`,`i_name`,`i_price`,`i_data` FROM `dm_test`.`item` ORDER BY `i_id`                                    
2024-06-21T08:23:46.352202Z     18512 Query     SELECT `no_o_id`,`no_d_id`,`no_w_id` FROM `dm_test`.`new_order` ORDER BY `no_w_id`,`no_d_id`,`no_o_id`                         

image.png

image.png

none模式使用 SESSION RR 隔離級別 和 START TRANSACTION /*!40108 WITH CONSISTENT SNAPSHOT */ 來構建一致性視圖,不存在非事務引擎表的時候,操作比FTWRL輕量

注意:

  1. 備份期間有DDL的話,有幾率觸發鎖等待,原因為DM開啟了兩個 START TRANSACTION /*!40108 WITH CONSISTENT SNAPSHOT */ SESSION ,一個用來看表結構、構造導出執行計劃、查看索引等;另外一個用來dump數據,如果期間有DDL,有幾率出現等MDL鎖的情況(圖一)
  2. 不開啟FTWRL的話,那么backupmeta的gtid信息有可能是不準的(show master status獲取的是當前值,不受 START TRANSACTION /*!40108 WITH CONSISTENT SNAPSHOT */ 限制)。備份文件 metadata 記錄的位點可能比 dumped data 要早,可以開啟safe-mode來規避(不能完全避免),DM會自行記錄兩次 show master status 位點信息來判斷是否進入safe-mode,以及何時退出safe-mode。

auto模式下

2024-06-21T09:31:56.773773Z     18684 Connect   root@vm10-2-103-3 on  using SSL/TLS                                                                                             
2024-06-21T09:31:56.776319Z     18684 Query     SELECT version()                                                                                                                
2024-06-21T09:31:56.776529Z     18684 Query     FLUSH TABLES WITH READ LOCK                                                                                                     
2024-06-21T09:31:56.778052Z     18684 Query     UNLOCK TABLES                                                                                                                   
2024-06-21T09:31:56.778166Z     18684 Query     SET SESSION time_zone = '+08:00'                                                                                                
2024-06-21T09:31:56.778236Z     18684 Quit                                                                                                                                      
2024-06-21T09:31:56.780010Z     18685 Connect   root@vm10-2-103-3 on  using SSL/TLS                                                                                             
2024-06-21T09:31:56.780202Z     18685 Query     SET time_zone = '+08:00'                                                                                                        
2024-06-21T09:31:56.780405Z     18685 Query     FLUSH TABLES WITH READ LOCK                                                                                                     
2024-06-21T09:31:56.783146Z     18686 Connect   root@vm10-2-103-3 on  using SSL/TLS                                                                                             
2024-06-21T09:31:56.783335Z     18686 Query     SET time_zone = '+08:00'                                                                                                        
2024-06-21T09:31:56.783421Z     18686 Query     SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ                                                                         
2024-06-21T09:31:56.783518Z     18686 Query     START TRANSACTION /*!40108 WITH CONSISTENT SNAPSHOT */                                                                          
2024-06-21T09:31:56.783611Z     18686 Query     SHOW MASTER STATUS                                                                                                              
2024-06-21T09:31:56.783755Z     18686 Query     SHOW SLAVE STATUS                                                                                                               
2024-06-21T09:31:56.786107Z     18686 Query     SHOW DATABASES                                                                                                                  
2024-06-21T09:31:56.786563Z     18686 Query     SELECT COUNT(1) as c FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='SEQUENCE'                                                 
2024-06-21T09:31:56.916141Z     18686 Query     SHOW TABLE STATUS FROM `dm_test`                                                                                             
2024-06-21T09:31:56.919220Z     18687 Connect   root@vm10-2-103-3 on  using SSL/TLS                                                                                             
2024-06-21T09:31:56.919398Z     18687 Query     SET time_zone = '+08:00'                                                                                                        
2024-06-21T09:31:56.919483Z     18687 Query     SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ                                                                         
2024-06-21T09:31:56.919570Z     18687 Query     START TRANSACTION /*!40108 WITH CONSISTENT SNAPSHOT */                                                                          
2024-06-21T09:31:56.919726Z     18685 Query     UNLOCK TABLES                   

相對于mysqldump少了flush table的步驟(mysqldump在執行FTWRL前會執行flush tables),直接執行了FTWRL,第一次做權限探測,第二次執行備份

結論

結合業務應用情況綜合考慮,選擇auto/none模式

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/37109.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/37109.shtml
英文地址,請注明出處:http://en.pswp.cn/web/37109.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LDO產品的基礎知識解析

低壓降穩壓器 (LDO)是一種用于調節較高電壓輸入產生的輸出電壓的簡單方法。在大多數情況下&#xff0c;低壓降穩壓器都易于設計和使用。然而&#xff0c;如今的現代應用都包括各種各樣的模擬和數字系統&#xff0c;而有些系統和工作條件將決定哪種LDO最適合相關電路&#xff0c…

鄧普頓的五大投資原則

在《逆向投資 鄧普頓的長贏投資法》的推薦序《“逆向投資大神”鄧普頓五大投資原則》中&#xff0c;劉建位總結了鄧普頓的五大投資原則&#xff0c;分別是“以逆向投資為中心”“以價值投資為選股根本”“以分散投資為組合穩定器”“以全球投資來擴大機會池”“以極度悲觀點投資…

rust單元測試順序執行

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到網站。 存在的問題 有時候&#xff0c;不同單元測試之間可能會競爭相同的資源&#xff0c;比如讀寫相同的文件。在這種情況下&#xff0c;如果…

springboot的特點是什么?

Spring Boot是一個基于Spring框架的開源項目&#xff0c;它旨在簡化Spring應用的初始搭建和開發過程。以下是Spring Boot的一些主要特點&#xff1a; 快速開發&#xff1a; Spring Boot提供了許多默認配置&#xff0c;使得開發者可以更快地開始開發應用程序&#xff0c;而無需…

秋招突擊——6/28、6.29——復習{數位DP——度的數量}——新作{}

文章目錄 引言復習數位DP——度的數量個人實現參考實現 總結 引言 頭一次產生了那么強烈的動搖&#xff0c;對于未來沒有任何的感覺的&#xff0c;不知道將會往哪里走&#xff0c;不知道怎么辦。可能還是因為實習吧&#xff0c;再加上最近復習也沒有什么進展&#xff0c;并不知…

Vmware Windows虛擬機卡死了

每次遇到這個問題我都想罵娘&#xff01;&#xff01;&#xff01;&#xff01; 這一次是怎么解決的呢&#xff1f; 解決&#xff1a;我給虛擬機連上網就好了&#xff01; 重啟&#xff0c;開關機&#xff0c;一點用都沒有。

前端 JS 經典:箭頭函數的意義

箭頭函數是為了消除函數的二義性。 1. 二義性 函數的二義性指函數有不同的兩種用法&#xff0c;就造成了二義性&#xff0c;函數的兩種用法&#xff1a;1. 指令序列。2. 構造器 1.1 指令序列 就是調用函數&#xff0c;相當于將函數內部的代碼再從頭執行一次。 1.2 構造器 …

【Linux 工具 】 tcpdump詳細使用說明

目錄 1. 安裝 tcpdump 2. 使用 tcpdump 命令 3. 監聽所有網絡接口 4. 監聽指定網絡接口 5. 保存數據包到文件 6. 讀取保存的數據包文件 7. 過濾數據包 過濾源 IP 地址: 過濾目標 IP 地址: 過濾源和目標 IP 地址: 過濾指定端口: 過濾指定協議: 8. 顯示數據包詳…

爬蟲實戰:使用PHP爬取攜程旅游信息

隨著旅游業的不斷發展&#xff0c;旅游信息變得非常豐富。為了方便大家獲取更全面、準確的旅游信息&#xff0c;我們可以使用爬蟲來抓取旅游網站上的數據&#xff0c;并進行分析和處理。本文將介紹如何使用php爬取攜程旅游信息。 爬蟲基礎知識 爬蟲是一種自動化程序&#xff…

Android SurfaceFlinger——OpenGL ES基礎介紹(十二)

前面的文章我們介紹了 HWC,知道他在 Android 系統中用于硬件加速屏幕合成的一個組件。負責將多個 Surface(包括那些可能通過 OpenGL ES 渲染的內容)合成到一起,并輸出到屏幕。HWC 利用底層硬件(如 GPU)來執行合成操作,減少 CPU 的負擔,提高效率和電池壽命。 一、概述 …

如何借助 LLM 設計和實現任務型對話 Agent

1 引言 在人工智能的快速發展中&#xff0c;任務型對話 Agent 正成為提升用戶體驗和工作效率的關鍵技術。這類系統通過自然語言交互&#xff0c;專注于高效執行特定任務&#xff0c;如預訂酒店或查詢天氣。盡管市場上的開源框架如 Rasa 和 Microsoft Bot Framework 在對話理解…

【筆記】一些PDN建立成功后返回的IP地址情況及日志分析

背景 Protocol滿足運營商需求,即便是PDN的通的,也可能因為網絡問題導致MMS、熱點等業務無法正常工作。(丟包?網絡無響應?服務器異常) 或者Protocol跟運營商需求不一致,直接SETUP_DATA_CALL失敗了。 一般而言,如果APN Protocol 參數配置不符合運營商要求,在 PDN 建立…

正則表達式結合自定義function使用replace

replace使用正則表達式和function替換 js代碼 html代碼 場景描述 輸入不同數量的人名&#xff0c;根據不同的人數打印不同的描述 代碼分析 首先在js代碼中使用templates定義了5個模板&#xff0c;通過 var idx Math.min(names.length, 4)根據人數獲取對應的模板的索引&…

tqdm庫教程 - 進度條可視化利器

tqdm庫教程 - 進度條可視化利器 1. 什么是tqdm?2. tqdm的基本用法3. tqdm的高級用法3.1 自定義描述3.2 手動更新進度條3.3 在文件處理中使用tqdm 4. tqdm的其他特性4.1 嵌套進度條4.2 在Jupyter Notebook中使用 5. 總結 1. 什么是tqdm? tqdm是一個Python庫,用于在循環或長時…

揭秘多年免費聽音樂、直播、影視的自用方案:手機、電視、電腦多平臺0成本實現媒體自由(內含相關資源)

文章目錄 ?? 介紹 ???? 演示環境 ???? 多媒體自由 ???? 音樂資源??安卓平臺?? 蘋果平臺?? PC平臺?? 影視資源?? 安卓平臺?? 蘋果平臺?? 電視盒子?? PC平臺?? 電影下載?? 直播資源?? 手機平臺?? PC平臺?? 電視盒子?? 相關鏈接 ???…

秋招力扣刷題——數據流的中位數

一、題目要求 中位數是有序整數列表中的中間值。如果列表的大小是偶數&#xff0c;則沒有中間值&#xff0c;中位數是兩個中間值的平均值。 例如 arr [2,3,4] 的中位數是 3 。 例如 arr [2,3] 的中位數是 (2 3) / 2 2.5 。 實現 MedianFinder 類: MedianFinder() 初始化 …

ISS檢測原理

ISS(Intrinsic Shape Signatures)是由Yu Zhong于2009年提出的一種三維形狀描述子,用于描述局部或半局部區域的點云,局部區域可以理解為以一個點云中某點為球心,以一定半徑構成的可以包含多個內點的球形區域,半局部則是半個球形區域。ISS可用于不同視角點云的配準、快速姿…

大數據面試題之Spark(4)

目錄 RDD的容錯 Executor內存分配? Spark的batchsize&#xff0c;怎么解決小文件合并問題? Spark參數(性能)調優 介紹一下Spark怎么基于內存計算的 說下什么是RDD(對RDD的理解)?RDD有哪些特點?說下知道的RDD算子 RDD底層原理 RDD屬性 RDD的緩存級別? Spark廣播變…

MongoDB筆記02

MongoDB中的數據具有靈活的模式&#xff0c;文檔在同一集合&#xff0c;但他們不需要具有相同的字段或結構集合&#xff0c;集合文檔中的公共字段可以包含不同類型的數據 MongoDB中的數據具有靈活的模式&#xff0c;與sql數據庫不同&#xff0c;sql數據庫必須在插入數據之前確…

Nuxt3 的生命周期和鉤子函數(六)

title: Nuxt3 的生命周期和鉤子函數&#xff08;六&#xff09; date: 2024/6/30 updated: 2024/6/30 author: cmdragon excerpt: 摘要&#xff1a;本文深入解析了Nuxt3框架中的多個核心生命周期鉤子和組件注冊功能&#xff0c;包括imports:sources、imports:extend、import…