Mysql 實戰問題處理速通

文章目錄

    • 創建賬號和授權
    • 查詢沒有主鍵的表
    • 統計每個庫大小
    • 前十張大表
    • 清理日志表
    • Prepared statement needs to be re-prepared
    • xtrabackup 問題
    • 鎖問題處理
      • 快速處理
      • 查詢事務等待和阻塞情況
      • innodb_trx
      • processlist
      • data_locks
      • data_lock_waits
      • metadata_locks
      • events_statements_current
      • 其他
    • 手動備份單表
    • 清理耗時過長的sql

創建賬號和授權

-- 以 xx_user 為例
CREATE USER `xx_user`@`%` IDENTIFIED WITH caching_sha2_password BY 'your_password';-- 全局表授權 select, insert, update, delete
grant select, insert, update, delete on xx_table to xx_user;-- 業務范圍內的表授 ALL PRIVILEGES
SELECT CONCAT('GRANT ALL PRIVILEGES ON ',TABLE_SCHEMA,'.',TABLE_NAME,' TO `xx_user`@`%`;')
FROM `information_schema`.`TABLES`
WHERE `TABLE_SCHEMA` = 'xxx_db' AND `TABLE_NAME` LIKE 'test_%' ;
FLUSH PRIVILEGES;-- 視圖授權 SELECT, SHOW
GRANT SELECT, SHOW VIEW ON `xxx_view` TO 'xx_user'@'%';

查詢沒有主鍵的表

SELECT t.table_name, t.table_type,n.table_schema,n.table_name,n.constraint_name FROM information_schema.tables t
LEFT JOIN information_schema.key_column_usage n
ON t.table_schema=n.table_schema AND t.table_name= n.table_name AND n.constraint_name = 'PRIMARY'
WHERE t.table_schema = 'xxx_db'
AND t.table_type = 'BASE TABLE'
AND n.table_name is NULL;

統計每個庫大小

SELECT TABLE_SCHEMA, SUM(DATA_LENGTH)/1024/1024 AS Data_MB, SUM(INDEX_LENGTH)/1024/1024 AS INDEX_MB
FROM information_schema.tables AS T1
WHERE T1.TABLE_SCHEMA like 'xxx_db%'
GROUP BY table_schema;

前十張大表

按行排序(TABLE_ROWS)
按表空間排序(TABLE_ROWS)

-- 按行
SELECT TABLE_SCHEMA AS database_name,TABLE_NAME AS table_name,TABLE_ROWS AS table_rows, ENGINE AS table_engine
,ROUND((DATA_LENGTH) /1024.0/1024,2) AS Data_MB ,ROUND((INDEX_LENGTH) /1024.0/1024,2) AS Index_MB
,ROUND((DATA_LENGTH + INDEX_LENGTH)/1024.0/1024,2) AS Total_MB,ROUND((DATA_FREE)/1024.0/1024,2) AS Free_MB
FROM information_schema.tables AS T1
WHERE T1.TABLE_SCHEMA like 'xxx_db%'
ORDER BY TABLE_ROWS
DESC LIMIT 10;-- 按表空間
SELECT TABLE_SCHEMA AS database_name,TABLE_NAME AS table_name,TABLE_ROWS AS table_rows, ENGINE AS table_engine
,ROUND((DATA_LENGTH) /1024.0/1024,2) AS Data_MB ,ROUND((INDEX_LENGTH) /1024.0/1024,2) AS Index_MB
,ROUND((DATA_LENGTH + INDEX_LENGTH)/1024.0/1024,2) AS Total_MB,ROUND((DATA_FREE)/1024.0/1024,2) AS Free_MB
FROM information_schema.tables AS T1
WHERE T1.TABLE_SCHEMA like 'xxx_db%'
ORDER BY Total_MB
DESC LIMIT 10;

清理日志表

-- 清中間件的日志表
TRUNCATE TABLE xxljob.xxl_job_log;
TRUNCATE TABLE nacos.his_config_info;-- 清業務庫的日志表
TRUNCATE TABLE xx_db.xx_table;

Prepared statement needs to be re-prepared

問題:當時參數 table_open_cache =16384, 但 table_definition_cache 還是默認值 2000,table_definition_cache 也需要同時調大,這里我設置與 table_open_cache 一樣大。

MySQL提示:1615: Prepared statement needs to be re-prepared

xtrabackup 問題

  • 問題 LOCK INSTANCE FOR BACKUP
    xtrabackup 運行過程中會鎖mysql實例,如果特殊情況下中斷或故障時,就需要手動解鎖
--  sql 執行解鎖
UNLOCK INSTANCE;
  • [Xtrabackup] could not find redo log file with LSN 813931920896 [ERROR] [MY-011825] [Xtrabackup] read_logfile() failed. [ERROR] [MY-011825] [Xtrabackup] log copying failed.
--  sql 執行刷盤
FLUSH LOGS;
  • [Xtrabackup] Found tables with row versions due to INSTANT ADD/DROP columns [Xtrabackup] Please run OPTIMIZE TABLE or ALTER TABLE ALGORITHM=COPY on all listed tables to fix this issue.
https://www.modb.pro/db/631294  升級到 8.0.33 或 8.2.0(xtrabackup 同時升到 8.2.0)
  • The input device is not a TTY

在 crontab 定時執行,腳本中 docker run -it … 要去掉 -it , 不然就會出現 The input device is not a TTY

鎖問題處理

mysql 鎖實戰分析

官網文檔

快速處理

# 查詢數據鎖
SELECT * FROM performance_schema.data_locks;# 事務ID查詢進程ID
SELECT trx.trx_id, trx.trx_mysql_thread_id AS PID, trx.trx_state, trx.trx_query
FROM information_schema.innodb_trx trx;# 釋放鎖,下面語句結果復制出來執行,把對應的 pid 給 kill 掉,釋放鎖
SELECT concat('KILL ', trx.trx_mysql_thread_id,';') as cmd FROM performance_schema.data_locks lck
INNER JOIN information_schema.innodb_trx trx ON trx.trx_id= lck.ENGINE_TRANSACTION_ID;

查詢事務等待和阻塞情況

# 查詢事務等待和阻塞情況
SELECTr.trx_id waiting_trx_id,r.trx_mysql_thread_id waiting_thread,r.trx_query waiting_query,b.trx_id blocking_trx_id,b.trx_mysql_thread_id blocking_thread,b.trx_query blocking_query
FROM       performance_schema.data_lock_waits w
INNER JOIN information_schema.innodb_trx b ON b.trx_id = w.blocking_engine_transaction_id
INNER JOIN information_schema.innodb_trx r ON r.trx_id = w.requesting_engine_transaction_id;# 直接用 sys.innodb_lock_waits 查詢
SELECTwaiting_trx_id,waiting_pid,waiting_query,blocking_trx_id,blocking_pid,blocking_query
FROM sys.innodb_lock_waits;

eg.

waiting trx idwaiting threadwaiting queryblocking trx idblocking threadblocking query
A46SELECT b FROM t FOR UPDATEA35SELECT SLEEP(100)
A57SELECT c FROM t FOR UPDATEA35SELECT SLEEP(100)
A57SELECT c FROM t FOR UPDATEA46SELECT b FROM t FOR UPDATE

在識別阻塞事務時,如果發出查詢的會話已閑置,則阻塞查詢會報告一個空值。在這種情況下,使用以下步驟確定阻塞查詢:

確定阻塞事務的進程列表 ID。在 sys.innodb_lock_waits 表中,阻塞事務的進程表 ID 就是 blocking_pid 值。使用 blocking_pid,查詢 MySQL 性能模式線程表,以確定阻塞事務的 THREAD_ID。例如,如果 blocking_pid 為 6,請執行以下查詢:

SELECT THREAD_ID FROM performance_schema.threads WHERE PROCESSLIST_ID = 6;

使用 THREAD_ID 查詢性能模式 events_statements_current 表,以確定線程執行的最后一次查詢。例如,如果 THREAD_ID 是 28,請執行以下查詢:

SELECT THREAD_ID, SQL_TEXT FROM performance_schema.events_statements_current WHERE THREAD_ID = 28;

如果線程執行的最后一次查詢信息不足以確定鎖被鎖定的原因,可以查詢性能模式events_statements_histor表,查看線程執行的最后 10 條語句。

SELECT THREAD_ID, SQL_TEXT FROM performance_schema.events_statements_history WHERE THREAD_ID = 28 ORDER BY EVENT_ID;

innodb_trx

查詢出事務 idpid( processlist 中的 id)

SELECT trx.trx_id, trx.trx_mysql_thread_id AS PID, trx.trx_state, trx.trx_query FROM information_schema.innodb_trx trx;
trx_idpidtrx_statetrix_query
292681221590590RUNNING
292677969587984RUNNING

processlist

根據 pid 查詢進程詳情

SELECT * FROM `performance_schema`.PROCESSLIST WHERE id in (587984,590590);
iduserhostdbcommandtimestateinfoexecute_engine
587984xxx172.8.8.1:50372xxxSleep6468PRIMARY
590590xxx172.8.8.1:1885xxxSleep3095PRIMARY

data_locks

官網文檔

MySQL的data_locks表是InnoDB存儲引擎用于記錄當前事務持有和請求的數據鎖信息的。這些數據鎖用于控制并發訪問,確保數據的一致性和完整性。在MySQL中,當一個事務訪問某個數據時,它可以對該數據加鎖,這樣其他事務就無法修改或讀取該數據,直到鎖被釋放。

InnoDB存儲引擎在做SELECT、INSERT、DELETE、UPDATE操作的時候,不會為表加上S鎖或者X鎖的,但是會使用到意向鎖這種表級別鎖。MyISAM引擎是不支持意向鎖的。

意向鎖又分為意向共享鎖(intention shared lock,IS):事務有意向對表中的某些行加共享鎖(S鎖);意向排他鎖(intention exclusive lock,IX):事務有意向對表中的某些行加排他鎖(X鎖)。事務在給一個數據行加共享鎖前必須取得該表的IS鎖;事務在給一個數據行加排他鎖前必須取得該表的IX鎖。意向鎖的引入主要是為了在進行行級鎖或頁級鎖時,提供一種機制來表示事務可能會對表中的某些行或頁面進行鎖定操作的意向,從而提高并發控制的效率。

如果沒有意向寫鎖,mysql在加行鎖之前,需要循環掃描表,判斷表是否有行鎖。

有了意向寫鎖之后,mysql在加行寫鎖時,只要判斷表上沒有意向寫鎖,可以直接加行寫鎖,無需掃描。

查看數據鎖的情況,查詢出來的 THREAD_ID 后面都有關聯在使用

SELECT * FROM `performance_schema`.`data_locks` WHERE engine_transaction_id in (292681221,292677969);
ENGINEENGINE_LOCK_IDENGINE_TRANSACTION_IDTHREAD_IDEVENT_IDOBJECT_SCHEMAOBJECT_NAMEPARTITION_NAMESUBPARTITION_NAMEINDEX_NAMEOBJECT_INSTANCE_BEGINLOCK_TYPELOCK_MODELOCK_STATUSLOCK_DATA
INNODB139813616145968:41767:13981111875760829267796958834896xxxtask_apply139811118757608TABLEIXGRANTED
INNODB139813616145968:32475:13981111875752029267796958834890xxxtask_todo139811118757520TABLEIXGRANTED
INNODB139813616145968:31409:4:19:13981111875460829267796958834890xxxtask_todoPRIMARY139811118754608RECORDX,REC_NOT_GAPGRANTED
INNODB139813616145968:40701:5:6:13981111875495229267796958834896xxxtask_applyPRIMARY139811118754952RECORDX,REC_NOT_GAPGRANTED
INNODB139813616109608:32475:13981111848508829268122159095485xxxtask_todo139811118485088TABLEIXGRANTED

588348 獲取 task_todo,task_apply 的行寫鎖(X),自然也有意向排他鎖 IX,590954 只獲取了 task_todo 意向寫鎖,并沒有獲得行鎖,可能是修改的是同一記錄,但 588348 沒有釋放寫鎖。

data_lock_waits

官網文檔

select * FROM  performance_schema.data_lock_waits

metadata_locks

官網文檔

元數據鎖,簡稱MDL鎖,屬于表鎖范疇。MDL的作用是,保證讀寫的正確性。比如,如果一個查詢正在遍歷一個表中的數據,而執行期間另一個線程對這個表結構做變更,增加了一列,那么查詢線程拿到的結果跟表結構對不上,肯定是不行的。
因此,當對一個表做 增刪改查 操作的時候,加MDL讀鎖;當要對表做 結構變更 操作的時候,加 MDL寫鎖

讀鎖之間不互斥,因此你可以有多個線程同時對一張表增刪改查。讀寫鎖之間、寫鎖之間是互斥的,用來保證變更表結構操作的安全性,解決了DML和DDL操作之間的一致性問題。不需要顯式使用,在訪問一個表的時候會被自動加上。

ISIXAUTO-INCSX
ISX
IXXX
AUTO-INCXXX
SXXX
XXXXXX

思考:我們在對表做Alter操作的時候,是否能立即執行?

答案是不一定,如果此時還有事務在進行增刪改查操作,Alter操作會阻塞,必須等待所有事務執行完畢才能執行。

需要注意的是,我們在對大表做DDL的時候,有可能會造成數據庫崩潰。所以要求我們盡量在業務不繁忙的時候執行DDL,或者是使用第三方工具,如 pt-online-schema-change 等來安全的執行表的DDL操作。

SELECT * from performance_schema.metadata_locks ml WHERE ml.owner_thread_id in (588348,590954);
OBJECT_TYPEOBJECT_SCHEMAOBJECT_NAMECOLUMN_NAMEOBJECT_INSTANCE_BEGINLOCK_TYPELOCK_DURATIONLOCK_STATUSSOURCEOWNER_THREAD_IDOWNER_EVENT_ID
TABLExxxtask_todo139811196356656SHARED_READTRANSACTIONGRANTEDsql_parse.cc:625158834885
TABLExxxtask_todo139811197083072SHARED_WRITETRANSACTIONGRANTEDsql_parse.cc:625158834890
TABLExxxtask_apply139811195232128SHARED_READTRANSACTIONGRANTEDsql_parse.cc:625158834892
TABLExxxtask_apply139811208160848SHARED_WRITETRANSACTIONGRANTEDsql_parse.cc:625158834896
TABLExxxtask_todo139811162016464SHARED_READTRANSACTIONGRANTEDsql_parse.cc:625159095480
TABLExxxtask_todo139811117870400SHARED_WRITETRANSACTIONGRANTEDsql_parse.cc:625159095485

events_statements_current

SELECT * FROM `performance_schema`.`events_statements_current` WHERE `THREAD_ID` IN (588348,590954)
THREAD_IDEVENT_IDEND_EVENT_IDEVENT_NAMESOURCETIMER_STARTTIMER_ENDTIMER_WAITLOCK_TIMESQL_TEXTDIGESTDIGEST_TEXTCURRENT_SCHEMAOBJECT_TYPEOBJECT_SCHEMAOBJECT_NAMEOBJECT_INSTANCE_BEGINMYSQL_ERRNORETURNED_SQLSTATEMESSAGE_TEXTERRORSWARNINGSROWS_AFFECTEDROWS_SENTROWS_EXAMINEDCREATED_TMP_DISK_TABLESCREATED_TMP_TABLESSELECT_FULL_JOINSELECT_FULL_RANGE_JOINSELECT_RANGESELECT_RANGE_CHECKSELECT_SCANSORT_MERGE_PASSESSORT_RANGESORT_ROWSSORT_SCANNO_INDEX_USEDNO_GOOD_INDEX_USEDNESTING_EVENT_IDNESTING_EVENT_TYPENESTING_EVENT_LEVELSTATEMENT_IDCPU_TIMEMAX_CONTROLLED_MEMORYMAX_TOTAL_MEMORYEXECUTION_ENGINE
5883489595statement/com/Executeinit_net_server_extension.cc:10212885788008093800012885788119174500011108070004000000xxx000000Rows matched: 1 Changed: 1 Warnings: 000101000000000000085TRANSACTION0682950509084481066609PRIMARY
5909548484statement/com/Executeinit_net_server_extension.cc:1021322314220725430001322814278650650005000579252200050005436000000xxx1205HY000Lock wait timeout exceeded; try restarting transaction10000000000000000080TRANSACTION069273860329376350460PRIMARY

其他

select * from performance_schema.events_transactions_current where thread_id in (588348,590954);
select * from performance_schema.threads where thread_id in (588348,590954);SELECT * FROM performance_schema.events_statements_history WHERE THREAD_ID IN  (588348,590954);
select * from performance_schema.events_transactions_history where thread_id in (588348,590954) ORDER BY event_id;

手動備份單表

mysql集群不支持無主鍵表, 手動備份單表時務必按下述操作, 否則會導致集群無法啟動

# 錯誤的方式CREATE TABLE xx_table_bakxxx AS SELECT * FROM xx_table;# 這個方法不會備份主鍵索引注釋# 正確的方式CREATE TABLE xx_table_bakxxx LIKE xx_table;INSERT INTO xx_table_bakxxx SELECT * FROM xx_table;

清理耗時過長的sql

壓測環境的mysql數據已經做了一個清場的存儲過程, 如果環境變卡, 監控界面顯示cpu過高, 請再壓測前調用以便殺掉卡死的sql語句

# 執行SQL> CALL xxx.kill_overtime_procs(120);# 驗證SQL> SELECT * FROM information_schema.processlistWHERE command in ('Query', 'Execute')AND time > 0AND user <> 'system user';

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

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

相關文章

如何測量滾珠花鍵的旋轉方向間隙?

測量滾珠花鍵的旋轉方向間隙需要使用適當的工具&#xff0c;通常情況下&#xff0c;可以使用游標卡尺或外徑卡尺進行測量。這些工具可以準確地測量間隙的寬度和深度&#xff0c;并且可以輕松地記錄測量結果。手動檢測法&#xff1a;將滾珠花鍵固定在支架上&#xff0c;確保其可…

Android AppSearch 深度解析:現代應用搜索架構與實踐

一、AppSearch 概述1.1 什么是 AppSearchAppSearch 是 Android Jetpack 組件庫中的一個現代化本地搜索框架&#xff0c;于 Android 12 (API level 31) 引入&#xff0c;旨在為 Android 應用提供高效、可靠的本地數據索引和搜索能力。與傳統的 SQLite 搜索方案相比&#xff0c;A…

使用公眾號的消息模板給關注用戶發消息

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家&#xff0c;歷代文學網&#xff08;PC端可以訪問&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移動端可微信小程序搜索“歷代文學”&#xff09;總架構師&#xff0c;15年工作經驗&#xff0c;精通Java編…

【盤古100Pro+開發板實驗例程】FPGA學習 | 3X3圖像矩陣生成 | 圖像實驗指導手冊

本原創文章由深圳市小眼睛科技有限公司創作&#xff0c;版權歸本公司所有&#xff0c;如需轉載&#xff0c;需授權并注明出處&#xff08;www.meyesemi.com) 1. 實驗簡介 實驗目的&#xff1a; 實現 3X3 圖像矩陣對應 9 個像素點圖像數據的讀取。 實驗環境&#xff1a; Wind…

【通用視覺框架】基于OpenCvSharp+WPF+YOLO開發的仿VisionMaster的通用視覺框架軟件,全套源碼,開箱即用

【通用視覺框架】基于OpenCvSharpWPFYOLO開發的仿VisionMaster的通用視覺框架軟件&#xff0c;全套源碼&#xff0c;開箱即用 基于OpenCvSharp、WPF和YOLO的組合&#xff0c;構建一個兼具圖像處理能力、可視化交互和實時檢測的工業級視覺框架。其核心是將底層算法與上層界面無…

微信小程序轉Vue2組件智能提示詞

角色 小程序轉Vue2組件工程師&#xff08;ElementUI專精&#xff09; 核心能力 技術專長&#xff1a;作為世界頂尖前端工程師&#xff0c;專注于將小程序組件&#xff08;.wxml/.wxss/.js/.json&#xff09;精準轉換為Vue2ElementUI組件&#xff0c;轉換邏輯零偏差&#xff0c;…

JVM 學習總結

文章目錄內存結構程序計數器什么是程序計數器&#xff1f;核心作用&#xff1a;為什么需要程序計數器&#xff1f;實現原理主要特點示例&#xff1a;PC 寄存器如何工作總結Java 虛擬機棧什么是 Java 虛擬機棧&#xff1f;棧幀的內部結構主要特點總結線程診斷本地方法棧堆堆內存…

目標檢測檢出率,誤檢率,ap,map等評估python代碼

1.deepseek版本import numpy as np from collections import defaultdictdef calculate_iou(box1, box2):"""計算兩個邊界框的交并比&#xff08;IoU&#xff09;:param box1: [x1, y1, x2, y2]:param box2: [x1, y1, x2, y2]:return: IoU"""# 計…

python的高校班級管理系統

前端開發框架:vue.js 數據庫 mysql 版本不限 后端語言框架支持&#xff1a; 1 java(SSM/springboot)-idea/eclipse 2.NodejsVue.js -vscode 3.python(flask/django)–pycharm/vscode 4.php(thinkphp/laravel)-hbuilderx 數據庫工具&#xff1a;Navicat/SQLyog等都可以 在高校教…

Scrapy 工作流程深度解析:引擎驅動的完美協作

一、Scrapy 核心組件全景圖 #mermaid-svg-KWCKN9n4urijbSws {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-KWCKN9n4urijbSws .error-icon{fill:#552222;}#mermaid-svg-KWCKN9n4urijbSws .error-text{fill:#552222;…

PCIe Base Specification解析(七)

文章目錄3.6 Data Integrity Mechansisms3.6.1 Introduction3.6.2 LCRC, Sequence Number, and Retry Management (TLP Transmitter)3.6.2.1 LCRC and Sequence Number Rules (TLP Transmitter)3.6.2.2 Handling of Received DLLPs3.6.3 LCRC and Sequence Number (TLP Receive…

Windows 11 使用Windows Hello使用人臉識別登錄失敗,重新錄入人臉識別輸入PIN后報Windows Hello安裝程序白屏無響應的問題解決

Windows 11 使用Windows Hello使用人臉識別登錄失敗&#xff0c;重新錄入人臉識別輸入PIN后報Windows Hello安裝程序白屏無響應的問題解決&#xff1a;遇到此種情況時&#xff1a;1、在“開始”右鍵——設置——賬號——登錄選項2、需要在PIN這里先進行刪除此登錄選項&#xff…

qq scheme

QQ intent scheme跳轉 1.跳轉指定說說(root) 2.跳轉指定說說(非root) 3. 跳轉聊天框 4. 跳轉用戶主頁 5. 跳轉加群 6. 跳轉指定用戶空間 1.跳轉指定說說(root) 該方法需root權限 app.startActivity({className: "com.qzone.reborn.base.QZoneTransparentShellActivi…

C語言基礎_隨機數、數組、函數、指針

0、隨機數&#xff1a; 要用C語言產生隨機數&#xff0c;首先在預處理程序部分要引入stdlib.h頭文件&#xff0c;然后就可以用rand()在后續程序中生成隨機數了。如果不設置隨機數種子srand()&#xff0c;后面生成的隨機數序列就是以41開頭的一個固定序列&#xff0c;因此一般以…

PHP?ORT擴展構建純PHP機器學習的推薦系統

結合 PHP?ORT 構建推薦系統的核心思想是&#xff1a;使用 ONNX 格式的機器學習模型&#xff0c;在 PHP 中本地執行推理&#xff0c;實時給出推薦結果。下面是一個完整的架構設計與實現路徑&#xff0c;適合你快速上手。&#x1f3af; 場景目標 你想在一個 PHP 網站中實現推薦功…

PromptPilot搭配Doubao-seed-1.6:定制你需要的AI提示prompt

目錄 一、PromptPilot 二、基于產品評價的用戶情感分析 2.1 使用PromptPiolt工具進行提示詞生成 2.2 基于prompt的模型調試 2.3 基于prompt的批量數據測評 2.4 基于多輪對話的prompt測試 如今&#xff0c;我們正身處一個 AI 技術飛速迭代的時代。人工智能早已不再是實驗室…

MSPM0開發學習筆記:二維云臺結合openmv實現小球追蹤

文章目錄前言一、硬件選擇二、原理介紹&#xff08;UART&#xff09;三、硬件連線三、軟件代碼1、視覺部分代碼&#xff08;Openart&#xff09;2、控制部分代碼&#xff08;MSPM0&#xff09;&#xff08;1&#xff09; UART部分&#xff08;2&#xff09; 計算函數部分&#…

【CTF-WEB-SQL】SQL注入基本流程(sql-labs的Less11)(用burp抓取post然后用sqlmap盲注)

題目 從第11less開始&#xff0c;就是POST表單了burp抓取數據包將抓取到的數據包存放到桌面&#xff0c;保存為post.txt數據包內容如下&#xff1a;POST /Less-11/ HTTP/1.1 Host: 223.112.39.132:44537 Content-Length: 39 Cache-Control: max-age0 Accept-Language: zh-CN,zh…

WPF 與 Winform :Windows 桌面開發該用誰?

WPF 與 Winform :Windows 桌面開發該用誰? 一、 WPF 與 Winform的概念 WPF:顏值與實力并存的 “后起之秀” Winform:簡單直接的 “老前輩” 二、WPF 與 Winform 的核心差異 1. 設計理念:分離 vs 耦合 2. 布局系統:靈活適配 vs 固定坐標 3. 視覺效果:絢麗動畫 vs 樸素原生…

【Git學習】入門與基礎

目錄 Git的安裝 Git 配置用戶信息 Git 初始化本地倉庫 Git 工作區、暫存區和版本庫 Git 跟蹤文件 Git 修改文件 Git 刪除文件 Git 撤銷本地文件的修改 Git 取消暫存 Git 跳過暫存區 Git 版本回退 Git 撤銷提交 Git 設置忽略文件 Git 比較文件差異 Git 代碼托管平臺…