mysql雙機熱備(主主模式)

一、環境準備

主機名ip操作系統備注
node01192.168.48.91CentOS Linux 7 (Core)mysql主庫
node01192.168.48.92CentOS Linux 7 (Core)mysql主庫
192.168.48.90漂移IP(VIP)

centos7鏡像下載地址:

https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2207-02.iso

二、安裝mysql8

node01&node02

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum makecache
yum update
systemctl disable --now firewalld
setenforce 0
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
sed -i '3 s/^/# /' /etc/chrony.conf
sed -i '4 a server ntp.aliyun.com iburst' /etc/chrony.conf
systemctl restart chronyd.service
systemctl enable chronyd.service
chronyc sources
wget http://dev.mysql.com/get/mysql80-community-release-el7-8.noarch.rpm
yum localinstall -y mysql80-community-release-el7-8.noarch.rpm
yum repolist enabled | grep mysql
yum -y install mysql-community-server --nogpgcheck
rpm -qa |grep mysql
systemctl start mysqld
systemctl enable mysqld
systemctl daemon-reload
#查看mysql密碼
cat /var/log/mysqld.log | grep password
#2025-08-29T05:53:37.423668Z 6 [Note] [MY-010454] [Server] A temporary password is generated for #root@localhost: Oeblh;:dK1ba
#使用密碼登錄
mysql -uroot -p 'Oeblh;:dK1ba'
#修改密碼
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Admin123.';
#創建遠程連接用戶
create user 'root'@'%' identified with mysql_native_password by 'Admin123.';
grant all privileges on *.* to 'root'@'%' with grant option;
flush privileges;

三、mysql主主復制

流程圖:

flowchart TDA[開始配置MySQL從庫] --> B[修改從庫配置文件my.cnf]B --> C[重啟從庫MySQL服務]C --> D[創建主庫數據快照并導入從庫]D --> E[在從庫上配置主庫連接信息]E --> F[啟動從庫復制進程]F --> G[檢查從庫復制狀態]G --> H{Slave_IO_Running和<br>Slave_SQL_Running是否均為Yes?}H -->|是| I[主從復制建立成功]H -->|否| J[根據錯誤信息排查問題]J --> E

1. 修改配置文件

1.1. node01

這里開啟了GTID。

vim /etc/my.cnf
[mysqld]
# 數據文件存儲目錄。MySQL所有的數據庫數據(表、索引等)都存放在這個路徑下。
datadir=/var/lib/mysql
?
# MySQL服務器監聽的Unix套接字文件路徑。本地客戶端可以通過這個socket文件連接數據庫,速度比TCP/IP更快。
socket=/var/lib/mysql/mysql.sock
?
# MySQL錯誤日志文件的存放路徑。啟動失敗、運行錯誤等信息都會記錄在這里,是排查問題的重要依據。
log-error=/var/log/mysqld.log
?
# 存儲MySQL服務進程ID(PID)的文件路徑。系統和管理工具通過讀取這個文件來獲取MySQL的進程號。
pid-file=/var/run/mysqld/mysqld.pid
?
# 服務節點ID,在復制拓撲(主從/主主)中每個實例必須具有唯一ID(1-2^32-1)。
# 主從復制中,主庫和從庫的server-id必須不同。
server-id=1
?
# 開啟二進制日志(binlog)并設置二進制日志文件的基本名。
# binlog記錄了所有更改數據的SQL語句,用于主從復制和數據恢復。
log-bin=master-bin
?
# 【謹慎使用】指定需要記錄二進制日志的數據庫。只有在此列表中數據庫的更改才會被寫入binlog。
# 基于"當前USE的數據庫"進行過濾,有風險(如:在db1中更新db2的表將不會被記錄)。
# 建議使用反向過濾(binlog-ignore-db)或在從庫過濾,而非在此正向過濾。
binlog-do-db=your_database_name
?
# 設置中繼日志的文件名。中繼日志存在于從庫,用于存儲從主庫binlog讀取到的數據更改事件。
relay-log=mysql-relay-bin
?
# 【推薦方式】指定不記錄二進制日志的數據庫(反向過濾,更安全)。
# 通常忽略MySQL系統自帶的數據庫,避免不必要的復制。
binlog_ignore_db=sys ? ? ? ? ? ? ?  # 忽略sys系統庫
binlog_ignore_db=mysql ? ? ? ? ? ?  # 忽略mysql系統庫(存儲用戶權限等信息)
binlog_ignore_db=information_schema # 忽略information_schema虛擬庫(存儲元數據)
binlog_ignore_db=performance_schema # 忽略performance_schema虛擬庫(存儲性能指標)
?
# --- 自增字段全局配置(在多主復制架構中用于避免自增ID沖突)---
# 自增字段每次增長的步長。在雙主模式下通常設置為節點的總數。
auto_increment_increment=2
# 自增字段的起始偏移量。每個實例應設置不同的偏移量(如1和2),確保ID不會沖突。
auto_increment_offset=1
?
# --- 從庫復制過濾規則(通常配置在從庫的my.cnf中,主庫配置無效)---
# 指定從庫需要復制的數據庫。與binlog-do-db類似,有基于默認數據庫過濾的風險。
# replicate_do_db=test
# 指定從庫需要忽略的數據庫。
# replicate_ignore_db=mysql
?
# --- 字符集與排序規則配置 ---
# 設置MySQL服務器的默認字符集為utf8mb4,支持存儲所有的UTF-8字符,包括表情符號(emoji)。
character-set-server=utf8mb4
# 設置服務器默認的排序規則(collation)。utf8mb4_unicode_ci基于Unicode標準排序,精度高。
collation-server=utf8mb4_unicode_ci
?
# --- 事務隔離級別 ---
# 設置默認的事務隔離級別為READ-COMMITTED(讀已提交)。
# 此級別可以避免臟讀,但可能出現不可重復讀和幻讀。許多復制場景推薦使用此級別。
transaction-isolation=READ-COMMITTED
?
# --- GTID(全局事務標識符)配置 ---
# 開啟GTID模式。GTID為每個提交的事務生成一個全局唯一的ID,簡化了復制的維護和故障恢復。
gtid-mode=on
# 強制GTID一致性,確保所有事務都可以以事務安全的方式被記錄和復制。
enforce-gtid-consistency=true
?

1.2. node02

vim /etc/my.cnf
[mysqld]
# 數據文件存儲目錄。MySQL所有的數據庫數據(表、索引等)都存放在這個路徑下。
datadir=/var/lib/mysql
?
# MySQL服務器監聽的Unix套接字文件路徑。本地客戶端可以通過這個socket文件連接數據庫,速度比TCP/IP更快。
socket=/var/lib/mysql/mysql.sock
?
# MySQL錯誤日志文件的存放路徑。啟動失敗、運行錯誤等信息都會記錄在這里,是排查問題的重要依據。
log-error=/var/log/mysqld.log
?
# 存儲MySQL服務進程ID(PID)的文件路徑。系統和管理工具通過讀取這個文件來獲取MySQL的進程號。
pid-file=/var/run/mysqld/mysqld.pid
?
# 服務節點ID,在復制拓撲(主從/主主)中每個實例必須具有唯一ID(1-2^32-1)。
# 主從復制中,主庫和從庫的server-id必須不同。
server-id=2
?
# 開啟二進制日志(binlog)并設置二進制日志文件的基本名。
# binlog記錄了所有更改數據的SQL語句,用于主從復制和數據恢復。
log-bin=master-bin
?
# 【謹慎使用】指定需要記錄二進制日志的數據庫。只有在此列表中數據庫的更改才會被寫入binlog。
# 基于"當前USE的數據庫"進行過濾,有風險(如:在db1中更新db2的表將不會被記錄)。
# 建議使用反向過濾(binlog-ignore-db)或在從庫過濾,而非在此正向過濾。
binlog-do-db=your_database_name
?
# 設置中繼日志的文件名。中繼日志存在于從庫,用于存儲從主庫binlog讀取到的數據更改事件。
relay-log=mysql-relay-bin
?
# 【推薦方式】指定不記錄二進制日志的數據庫(反向過濾,更安全)。
# 通常忽略MySQL系統自帶的數據庫,避免不必要的復制。
binlog_ignore_db=sys ? ? ? ? ? ? ?  # 忽略sys系統庫
binlog_ignore_db=mysql ? ? ? ? ? ?  # 忽略mysql系統庫(存儲用戶權限等信息)
binlog_ignore_db=information_schema # 忽略information_schema虛擬庫(存儲元數據)
binlog_ignore_db=performance_schema # 忽略performance_schema虛擬庫(存儲性能指標)
?
# --- 自增字段全局配置(在多主復制架構中用于避免自增ID沖突)---
# 自增字段每次增長的步長。在雙主模式下通常設置為節點的總數。
auto_increment_increment=2
# 自增字段的起始偏移量。每個實例應設置不同的偏移量(如1和2),確保ID不會沖突。
auto_increment_offset=2
?
# --- 從庫復制過濾規則(通常配置在從庫的my.cnf中,主庫配置無效)---
# 指定從庫需要復制的數據庫。與binlog-do-db類似,有基于默認數據庫過濾的風險。
# replicate_do_db=test
# 指定從庫需要忽略的數據庫。
# replicate_ignore_db=mysql
?
# --- 字符集與排序規則配置 ---
# 設置MySQL服務器的默認字符集為utf8mb4,支持存儲所有的UTF-8字符,包括表情符號(emoji)。
character-set-server=utf8mb4
# 設置服務器默認的排序規則(collation)。utf8mb4_unicode_ci基于Unicode標準排序,精度高。
collation-server=utf8mb4_unicode_ci
?
# --- 事務隔離級別 ---
# 設置默認的事務隔離級別為READ-COMMITTED(讀已提交)。
# 此級別可以避免臟讀,但可能出現不可重復讀和幻讀。許多復制場景推薦使用此級別。
transaction-isolation=READ-COMMITTED
?
# --- GTID(全局事務標識符)配置 ---
# 開啟GTID模式。GTID為每個提交的事務生成一個全局唯一的ID,簡化了復制的維護和故障恢復。
gtid-mode=on
# 強制GTID一致性,確保所有事務都可以以事務安全的方式被記錄和復制。
enforce-gtid-consistency=true

2. 重啟MySQL服務

node01&node02

sudo systemctl restart mysql

3. 創建復制用戶

在兩臺服務器上創建一個用于復制的MySQL用戶,并授予必要的權限。

node01

CREATE USER 'replication'@'192.168.48.92' IDENTIFIED WITH mysql_native_password BY 'Admin123.';
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.48.92';
FLUSH PRIVILEGES;
?
CHANGE MASTER TO
MASTER_HOST='192.168.48.92',
MASTER_USER='replication',
MASTER_PASSWORD='Admin123.',
MASTER_AUTO_POSITION=1;

node02

CREATE USER 'replication'@'192.168.48.91' IDENTIFIED WITH mysql_native_password BY 'Admin123.';
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.48.91';
FLUSH PRIVILEGES;
?
CHANGE MASTER TO
MASTER_HOST='192.168.48.91',
MASTER_USER='replication',
MASTER_PASSWORD='Admin123.',
MASTER_AUTO_POSITION=1;

4. 開啟復制

node01&node02

#開啟復制
START SLAVE;
#檢查復制狀態
SHOW SLAVE STATUS \G
?
#兩個節點以下參數均為yes說明復制正常。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
?

重點關注以下字段:

  • Slave_IO_Running: Yes (表示I/O線程正常運行,能從主庫讀取binlog)

  • Slave_SQL_Running: Yes (表示SQL線程正常運行,能重放中繼日志)

  • Seconds_Behind_Master: 0 (表示主從延遲為0秒。如果值不為0,說明存在延遲;如果為NULL,則需檢查錯誤)18

  • Last_IO_Error, Last_SQL_Error: 如果復制進程異常,這里會顯示錯誤信息

5. 驗證

node01

CREATE DATABASE IF NOT EXISTS your_database_name;
USE your_database_name;
?
CREATE TABLE node01 (id INT AUTO_INCREMENT PRIMARY KEY,hostname VARCHAR(100) NOT NULL,ip_address VARCHAR(15) NOT NULL,status VARCHAR(20) DEFAULT 'active',created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,description TEXT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
?
?
?
INSERT INTO node02 (hostname, ip_address, description) 
VALUES ('master-node', '192.168.48.92', '這是主庫節點01的測試數據,用于驗證主從復制');
?
?

node02

USE your_database_name;
SELECT * FROM node01;

成功輸出

mysql> SELECT * FROM node01;
+----+-------------+---------------+--------+---------------------+---------------------+----------------------------------------------------------------+
| id | hostname ?  | ip_address ?  | status | created_at ? ? ? ?  | updated_at ? ? ? ?  | description ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  |
+----+-------------+---------------+--------+---------------------+---------------------+----------------------------------------------------------------+
|  1 | master-node | 192.168.48.92 | active | 2025-08-29 20:00:16 | 2025-08-29 20:00:16 | 這是主庫節點01的測試數據,用于驗證主從復制 ? ? ? ? ? ? ? ? ? ? |
+----+-------------+---------------+--------+---------------------+---------------------+----------------------------------------------------------------+
1 row in set (0.00 sec)
?
?

node02

CREATE TABLE node02 (id INT AUTO_INCREMENT PRIMARY KEY,hostname VARCHAR(100) NOT NULL,ip_address VARCHAR(15) NOT NULL,status VARCHAR(20) DEFAULT 'active',created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,description TEXT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
?
?
?
INSERT INTO node02 (hostname, ip_address, description) 
VALUES ('master-node', '192.168.48.91', '這是主庫節點02的測試數據,用于驗證主從復制');
?

node01

SELECT * FROM node02;

成功輸出

mysql> SELECT * FROM node02;
+----+-------------+---------------+--------+---------------------+---------------------+----------------------------------------------------------------+
| id | hostname ?  | ip_address ?  | status | created_at ? ? ? ?  | updated_at ? ? ? ?  | description ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  |
+----+-------------+---------------+--------+---------------------+---------------------+----------------------------------------------------------------+
|  2 | master-node | 192.168.48.91 | active | 2025-08-29 20:03:52 | 2025-08-29 20:03:52 | 這是主庫節點02的測試數據,用于驗證主從復制 ? ? ? ? ? ? ? ? ? ? |
+----+-------------+---------------+--------+---------------------+---------------------+----------------------------------------------------------------+
1 row in set (0.00 sec)

到此,主主復制完成

四、配置keepalived

1. 下載keepalived

node01&node02

yum install -y keepalived

2. 編寫心跳檢測腳本

node01&node02

cat > /etc/keepalived/mysql_check.sh << 'EOF'
#!/bin/bash
C=`ps -C mysqld --no-header | wc -l`
if [ $C -eq 0 ];thenexit 1
fi
exit 0
EOF

3. 修改配置文件

node01

cat > /etc/keepalived/keepalived.conf << 'EOF'
global_defs {vrrp_mcast_group4 224.0.0.18
}
?
vrrp_script check_mysql {script "/etc/keepalived/mysql_check.sh" #腳本存放位置internal 2 #執行時間(周期,單位:秒)
}
?
vrrp_instance DB {state MASTER #這里主節點為 MASTER,其余的節點(備用節點)修改為 BACKUPinterface ens33 #網卡名稱根據實際情況修改virtual_router_id 51#同一組高可用集群中的所有節點必須設置相同的 ID,不同集群必須使用不同的 ID。priority 200 #節點的權重,主節點需要大于備用節點(數字越大,權重越高,優先級越高)advert_int 1authentication {auth_type PASSauth_pass 123456#同一集群中的所有節點必須使用相同的密碼。}virtual_ipaddress {192.168.48.90 #漂移地址,主備節點一致}track_script {check_mysql}
}
EOF
?

node02

cat > /etc/keepalived/keepalived.conf << 'EOF'
global_defs {vrrp_mcast_group4 224.0.0.18
}
?
vrrp_script check_mysql {script "/etc/keepalived/mysql_check.sh" #腳本存放位置internal 2 #執行時間(周期,單位:秒)
}
?
vrrp_instance DB {state BACKUP#這里主節點為 MASTER,其余的節點(備用節點)修改為 BACKUPinterface ens33 #網卡名稱根據實際情況修改virtual_router_id 51#同一組高可用集群中的所有節點必須設置相同的 ID,不同集群必須使用不>
同的 ID。priority 100 #節點的權重,主節點需要大于備用節點(數字越大,權重越高,優先級越高)advert_int 1authentication {auth_type PASSauth_pass 123456#同一集群中的所有節點必須使用相同的密碼。}virtual_ipaddress {192.168.48.90 #漂移地址,主備節點一致}track_script {check_mysql}
}
EOF

4. 啟動keepalived

node01&node02

systemctl start keepalived
systemctl enable keepalived

5. 驗證故障轉移

查看node01是否存在漂移IP

[root@node01 ~]# ip addr show ens33 | grep 192.168.48.90inet 192.168.48.90/32 scope global ens33

node01關閉mysql,node02查看漂移IP是否到node02。

[root@node01 ~]# systemctl stop mysqld
[root@node02 ~]# ip addr show ens33 | grep 192.168.48.90inet 192.168.48.90/32 scope global ens33

使用其他主機連接數據庫的VIP。連接正常則為成功。

[root@test ~]# mysql -u root -h 192.168.48.90 -P 3306 -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 8.0.43 MySQL Community Server - GPL

到此,mysql雙機熱備(主主模式)完成。

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

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

相關文章

微積分 | 積分代換

注&#xff1a;本文為 “微積分 | 積分代換法 ” 相關合輯。 英文引文&#xff0c;機翻未校&#xff0c; 中文引文&#xff0c;略作重排。 未去重&#xff0c;如有內容異常&#xff0c;請看原文。 Integration by Substitution 積分代換法 May 23, 2018 / By Dave Peterson …

循環高級(1)

1.無限循環2.break3.coutinue4.練習1 打印矩形&#xff08;循環嵌套&#xff09;5.練習2 打印直角三角形#include<stdio.h> int main() {/*打印一個5行5列的三角形效果如下&#xff1a;***** ***** ***** ***** *****…

vpp開啟nat,分片包丟包問題分析與解決

現象描述兩個網口都開啟nat output-feature&#xff0c;路由模式進行大包轉發&#xff0c;網絡不同&#xff0c;小包轉發沒問題。通過trace發現&#xff0c;在nat44-ed-in2out-output-slowpath節點丟包。Packet 503:50:43:447292: handoff_traceHANDED-OFF: from thread 2 trac…

深入解析交換機端口安全:Sticky MAC的工作原理與應用實踐

深入解析交換機端口安全&#xff1a;Sticky MAC的工作原理與應用實踐在當今企業網絡環境中&#xff0c;未授權設備接入是常見的安全威脅之一&#xff0c;而Sticky MAC技術正是解決這一問題的利器。在網絡安全管理中&#xff0c;端口安全是保護網絡基礎設施的第一道防線。Sticky…

AI接管瀏覽器:Anthropic發布Claude for Chrome,是效率革命還是安全噩夢?

AI智能體&#xff08;Agent&#xff09;的競賽&#xff0c;正在以超乎想象的速度進入白熱化階段。 就在上個月&#xff0c;OpenAI剛剛憑借ChatGPT Agent&#xff0c;向世界展示了AI在云端遠程操作電腦、制作PPT的強大能力。而現在&#xff0c;它的老對手Anthropic&#xff0c;…

LFI-labs靶場通關教程

目錄 CMD01-06 pass01 pass02 pass03 pass04 pass05 pass06 HDR-1 hdr-1 LFI-01-14 pass01 pass02 pass03 pass04 pass05 pass06 pass07 pass08 pass09 pass10 pass11 pass12 pass13 pass14 CMD01-06 pass01 看看源碼, 這里顯示的是一個get參數cmd,并…

隨機森林的 “Bootstrap 采樣” 與 “特征隨機選擇”:如何避免過擬合?(附分類 / 回歸任務實戰)

隨機森林的 “Bootstrap 采樣” 與 “特征隨機選擇”&#xff1a;如何避免過擬合&#xff1f;&#xff08;附分類 / 回歸任務實戰&#xff09; 第一部分&#xff1a;揭開隨機森林的神秘面紗 1.1 告別“過擬合”&#xff0c;擁抱更強大的模型 在機器學習的旅程中&#xff0c;…

Java開發 - 緩存

一、RedisUtil封裝package com.qj.redis.util;import lombok.extern.slf4j.Slf4j; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component;import javax.annotation.Resource; import java.util.Set; import java.util.…

光伏發多少電才夠用?匹配家庭用電需求

在“雙碳”目標推動下&#xff0c;新能源產業迎來爆發式增長&#xff0c;家庭屋頂光伏憑借清潔環保、能降低電費的優勢&#xff0c;成為越來越多家庭的選擇。但很多家庭在安裝前都會陷入一個核心困惑&#xff1a;到底裝多大容量的光伏系統&#xff0c;發多少電才能剛好滿足自家…

如何管理跨境電商多語種素材?數字資產本地化指南

核心要點&#xff1a; 問題&#xff1a; 多語言內容管理真的那么難嗎&#xff1f;多語種內容素材雜亂、反復翻譯浪費預算、上線延遲影響市場窗口期&#xff0c;跨境電商如何高效管理全球素材&#xff1f; 答案&#xff1a; 借助 AI 驅動的數字資產管理系統&#xff0c;跨境品…

Git 8 ,git 分支開發( 切換分支開發,并設置遠程倉庫默認分支 )

目錄 前言 一、&#x1f4cd;環境背景 二、&#x1f4bb; 完整流程 三、&#x1f4dd; 順序總覽 四、&#x1f539;關系圖例 五、?暫存警告 六、?? 默認分支 七、&#x1f7e3;更多操作 前言 在團隊開發或多人協作的項目中&#xff0c;Git 是最常用的版本管理工具。一個常見…

如何在mysql中執行創建數據庫的腳本文件?

1、先準備好腳本文件&#xff0c;.sql擴展名的把腳本文件放在某個盤的根目錄&#xff08;也可以不是根目錄&#xff0c;根目錄的話路徑會簡單一些&#xff09;,這里我放在C盤的根目錄下。腳本文件內容如下&#xff1a;/* SQLyog Community v13.1.1 (32 bit) MySQL - 5.7.26 : D…

《AI智脈速遞》2025 年 8 月22 日 - 29 日

歐盟 AI 法案正式生效&#xff1a;禁止社會評分&#xff0c;規范生成式 AI 內容標注 8 月 21 日&#xff0c;歐盟《人工智能法案》全面實施&#xff0c;明確禁止社會評分、實時面部識別等高風險 AI 應用&#xff0c;要求生成式 AI 內容必須標注來源。該法案被視為全球最嚴格的 …

iOS 審核 4.3a【二進制加固】

我們應該知道,面對iOS 上架 遇到4.3a的問題或者制作馬甲包.最基礎的操作就是混淆代碼尤其是我們專業做上架的,需要對各種語言的編譯模式,產物,以及ipa構成都需要非常了解, 每種語言開發的App的編譯產物不同,針對不同的編譯產物做不同的處理方式有一些經驗的開發者, 應該知道 目…

使用Python腳本執行Git命令

說明&#xff1a;本文介紹如何使用Python腳本在某個目錄下執行Git命令 編碼 直接上代碼 import os import subprocessdef open_git_bash_and_run_command(folder_path, git_command):# 檢查文件夾路徑是否存在if not os.path.exists(folder_path):print(f"錯誤&#xff1a…

2025docker快速部署Nginx UI可視化管理平臺

1、nginx-ui簡介 Nginx UI 是一個開源項目&#xff0c;旨在為著名的 Web 服務器和反向代理軟件 Nginx 提供一個基于網頁的圖形化用戶界面&#xff08;GUI&#xff09;。它的核心目標是讓 Nginx 的配置和管理變得可視化、簡單化和自動化&#xff0c;從而降低其使用門檻&#xf…

數據防泄與最小可見:ABP 統一封裝行級安全(RLS)+ 列級脫敏

數據防泄與最小可見&#xff1a;ABP 統一封裝行級安全&#xff08;RLS&#xff09; 列級脫敏 TL;DR&#xff1a;把“誰能看到哪些行、字段可見到哪一位”下沉到數據庫強制層&#xff08;PostgreSQL&#xff1a;RLS 安全視圖&#xff1b;SQL Server&#xff1a;RLS DDM&#x…

網絡編程 04:TCP連接,客戶端與服務器的區別,實現 TCP 聊天及文件上傳,Tomcat 的簡單使用

一、概述 記錄時間 [2025-08-29] 前置文章&#xff1a; 網絡編程 01&#xff1a;計算機網絡概述&#xff0c;網絡的作用&#xff0c;網絡通信的要素&#xff0c;以及網絡通信協議與分層模型 網絡編程 02&#xff1a;IP 地址&#xff0c;IP 地址的作用、分類&#xff0c;通過 …

最小生成樹——Kruskal

標題什么是生成樹&#xff1f; 對于一張無向圖&#xff0c;由nnn個頂點和n?1n-1n?1條邊構成地聯通子圖&#xff0c;叫做這個無向圖 生成樹 最小生成樹就是指邊權之和最小的生成樹 如何求最小生成樹&#xff1f; Kruskal 介紹: 存圖時只存每條邊地起點、終點&#xff0c;…

ADFS 和 OAuth 的區別

ADFS 和 OAuth 的區別 ADFS(Active Directory Federation Services)和 OAuth 都是身份認證與授權領域的技術,但它們的設計目標、應用場景和實現方式有顯著區別。以下從核心定義、技術特性、應用場景等方面詳細對比: 核心定義與設計目標 技術 核心定義 設計目標 ADFS 微軟…