mysql8.0版本部署+日志清理+rsync備份策略

mysql安裝:https://blog.csdn.net/qq_39399966/article/details/120205461

系統:centos7.9
數據庫版本:mysql8.0.28

1.卸載舊的mysql,保證環境純凈
rpm -qa | grep mariadb
mariadb-5....
rpm -e --nodeps 軟件
rpm -e --nodeps mariadb-5...
rpm -qa | grep -i mysql ?#查看是否安裝過mysql

#查找mysql文件,并將其刪除
find / -name mysql
whereis mysql
rm -rf 查詢到的mysql路徑
rm /etc/my.cnf
rpm -qa | grep -i mysql

#uname -m
arch
x86_64 ?#我的是x86

#拉取包,如果你是arch,下載https://mirrors.aliyun.com/mysql/MySQL-8.0/mysql-8.0.28-1.el7.aarch64.rpm-bundle.tar
wget https://mirrors.aliyun.com/mysql/MySQL-8.0/mysql-8.0.28-1.el7.x86_64.rpm-bundle.tar?

#安裝依賴
yum install openssl-devel perl-Test-Simple perl-JSON.noarch perl.x86_64 perl-devel.x86_64 autoconf numactl openssl-devel.x86_64 openssl.x86_64 -y

#rpm安裝順序
#1梯隊
rpm -ivh mysql-community-common-8.0.26-1.el7.x86_64.rpm --nodeps
rpm -ivh mysql-community-libs-8.0.26-1.el7.x86_64.rpm --nodeps
rpm -ivh mysql-community-client-8.0.26-1.el7.x86_64.rpm --nodeps
rpm -ivh mysql-community-server-8.0.26-1.el7.x86_64.rpm --nodeps
#2梯隊
rpm -ivh mysql-community-libs-compat-8.0.26-1.el7.x86_64.rpm --nodeps
rpm -ivh mysql-community-embedded-compat-8.0.26-1.el7.x86_64.rpm --nodeps
rpm -ivh mysql-community-devel-8.0.26-1.el7.x86_64.rpm --nodeps
rpm -ivh mysql-community-test-8.0.26-1.el7.x86_64.rpm --nodeps

#數據庫初始化
mysqld --initialize --console
#目錄授權
chown -R mysql:mysql /var/lib/mysql/

#啟動
systemctl start mysqld && systemctl enable --now mysqld && systemctl status mysqld

#查看密碼
cat /var/log/mysqld.log | grep password

#登錄
mysql -u root -p

#改密碼
alter USER 'root'@'localhost' IDENTIFIED BY 'W!@f2rfsdf;';

#登錄授權
use mysql;
select host, user, authentication_string, plugin from user;
update user set host = "%" where user='root';
flush privileges;

#密碼驗證方式更改
use mysql;
alter USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'heihei3431@:';
flush privileges;

#創建用戶并授權

CREATE USER 'xixi'@'%' IDENTIFIED BY 'heihei@13のqednasdo11';
GRANT ALL PRIVILEGES ON *.* TO 'xixi'@'%' WITH GRANT OPTION;
ALTER USER 'xixi'@'%' IDENTIFIED WITH mysql_native_password BY 'heihei@13のqednasdo11';
FLUSH PRIVILEGES;

UPDATE mysql.user SET authentication_string = PASSWORD('qwc@113.'), plugin = 'mysql_native_password' WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;

----------------------mysql:熱備份,清理日志數據,注意:mysql服務器需要和遠程服務器是免密登錄,創建公私鑰,這個腳本只是實現了全備
#腳本功能:
#1.清理二進制日志binlog
#2.清理錯誤日志(Error Log)。
#3.清理慢查詢日志(Slow Query Log)。
#4.執行全量備份。
#5.將備份文件上傳到遠程服務器。


前言:需要替換你的日志路徑,每個人的情況不一樣
yum -y install rsync
#遠程服務器:
ssh-keygen -t rsa -b 2048
ssh-copy-id 150mysql
mkdir -p /store/mysql
chmod 755 /store/mysql
#mysql服務器:
ssh-keygen -t rsa -b 2048
ssh-copy-id 136node
mkdir -p /backup/{mysql,script,logs}
chmod -R 755 /backup/{mysql,script,logs}
mysql_config_editor set --login-path=backup --user=root --password ?#插件存儲密碼,用戶腳本免交互登錄mysql


#日志存放位置查看
mysql -uroot -p
show variables like '%log_error%'; #查看錯誤日志,報錯查看這個日志
log-error=/var/log/mysql/error.log
show variables like '%log_bin%'; ?#binlog日志用于數據恢復,show variables like '%binlog_format%'; ?#查看binlog記錄信息的方式 ?ROW行記錄
log_bin=/var/lib/mysql/mysql-bin
SHOW VARIABLES LIKE 'slow_query_log'; #查看慢日志
/var/log/mysql/mysql-slow.log


vim /etc/my.cnf
[client]
sock=/data/mysql/mysql.sock
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
log-error=/var/log/mysql/error.log
pid-file=/var/run/mysqld/mysqld.pid
log_bin=/data/mysql/mysql-bin
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2

sudo mkdir -p /var/log/mysql
sudo chown -R mysql:mysql /var/log/mysql
systemctl restart mysqld

---【全量備份+熱備份+rsync】
[root@150m01 /backup/script]# cat auto_mysqldump.sh
#!/bin/bash

# 設置環境變量
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
export PATH

# 獲取當前日期
DATE="$(date +%F)"

# 本地備份目錄
local_backup_dir=/backup/mysql
mkdir -p "${local_backup_dir}"

# 日志文件路徑
log_file="/backup/logs/mysql_backup.log"
mkdir -p "$(dirname "${log_file}")"

# 遠程服務器信息
REMOTE_SERVER="136node" ?# 替換為遠程服務器的IP地址或主機名
REMOTE_DIR="/store/mysql" ?# 替換為遠程服務器的備份目錄
REMOTE_SSH_PORT=22 ?# 替換為遠程服務器的SSH端口

# MySQL配置
MYSQL_LOGIN_PATH="backup" ?# 使用 mysql_config_editor 設置的登錄路徑
SOCKET_FILE="/var/lib/mysql/mysql.sock" ?# MySQL 套接字文件路徑

# 清理二進制日志
echo "$(date): Cleaning up binary logs..." >> "${log_file}"
mysql --login-path=${MYSQL_LOGIN_PATH} --socket=${SOCKET_FILE} -e "PURGE BINARY LOGS BEFORE NOW() - INTERVAL 30 DAY;" >> "${log_file}" 2>&1

# 清理錯誤日志
echo "$(date): Cleaning up error log..." >> "${log_file}"
ERROR_LOG="/var/log/mysql/error.log"
if [ -f "$ERROR_LOG" ]; then
? ? cat /dev/null > $ERROR_LOG
? ? echo "$(date): Error log cleaned." >> "${log_file}"
else
? ? echo "$(date): Error log not found." >> "${log_file}"
fi

# 清理慢查詢日志
echo "$(date): Cleaning up slow query log..." >> "${log_file}"
SLOW_QUERY_LOG="/var/log/mysql/mysql-slow.log"
if [ -f "$SLOW_QUERY_LOG" ]; then
? ? cat /dev/null > $SLOW_QUERY_LOG
? ? echo "$(date): Slow query log cleaned." >> "${log_file}"
else
? ? echo "$(date): Slow query log not found." >> "${log_file}"
fi

# 執行 MySQL 熱備份
echo "$(date): Performing MySQL hot backup..." >> "${log_file}"
mysqldump --login-path=${MYSQL_LOGIN_PATH} --socket=${SOCKET_FILE} --all-databases > "${local_backup_dir}/hot_backup-${DATE}.sql"
if [ $? -eq 0 ]; then
? ? echo "$(date): MySQL hot backup completed successfully" >> "${log_file}"
else
? ? echo "$(date): MySQL hot backup failed" >> "${log_file}"
? ? exit 1
fi

# 使用 rsync 同步本地備份文件到遠程服務器
echo "$(date): Syncing backup files to remote server using rsync..." >> "${log_file}"
rsync -vzrtopg --progress --delete -e "ssh -p ${REMOTE_SSH_PORT}" "${local_backup_dir}/" "${REMOTE_SERVER}:${REMOTE_DIR}/" >> "${log_file}" 2>&1
if [ $? -eq 0 ]; then
? ? echo "$(date): Backup files synced successfully" >> "${log_file}"
else
? ? echo "$(date): Backup files sync failed" >> "${log_file}"
? ? exit 1
fi

# 刪除本地舊的備份文件(保留最近30天的備份)
echo "$(date): Deleting old local backups..." >> "${log_file}"
find "${local_backup_dir}" -name "hot_backup-*.sql" -mtime +30 -delete
if [ $? -eq 0 ]; then
? ? echo "$(date): Old local backups deleted successfully" >> "${log_file}"
else
? ? echo "$(date): Old local backups deletion failed" >> "${log_file}"
fi

# 在遠程服務器上刪除舊的備份文件(保留最近30天的備份)
echo "$(date): Deleting old remote backups..." >> "${log_file}"
ssh -p ${REMOTE_SSH_PORT} "${REMOTE_SERVER}" "find ${REMOTE_DIR} -name 'hot_backup-*.sql' -mtime +30 -delete" >> "${log_file}" 2>&1
if [ $? -eq 0 ]; then
? ? echo "$(date): Old remote backups deleted successfully" >> "${log_file}"
else
? ? echo "$(date): Old remote backups deletion failed" >> "${log_file}"
fi

echo "$(date): MySQL cleanup and backup completed." >> "${log_file}"


chmod +x auto_mysqldump.sh
----定時執行
crontab -e
#*/2 * * * * /backup/script/auto_mysqldump.sh ? #每兩分鐘同步一次,測試用
0 2 * * * * /backup/script/auto_mysqldump.sh ? #實際使用,每天晚上2點鐘更新

----驗證查看
mysql服務器:
ls /backup/mysql/
hot_backup-2025-03-31.sql
遠程服務器:
ls /store/mysql
hot_backup-2025-03-31.sql

----刪除測試
1.navicat登錄mysql數據庫刪除一個庫,例如test庫。
2.還原
mysql -uroot -p
source /backup/mysql/hot_backup-2025-03-31.sql


------------------------------全量+增量,兩個腳本不一樣,直接復制
vim auto_mysqldump.sh
#!/bin/bash

# 設置環境變量
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
export PATH

# 獲取當前日期
DATE="$(date +%F)"

# 本地備份目錄
local_backup_dir=/backup/mysql
mkdir -p "${local_backup_dir}"

# 日志文件路徑
log_file="/backup/logs/mysql_backup.log"
mkdir -p "$(dirname "${log_file}")"

# 遠程服務器信息
REMOTE_SERVER="136node" ?# 替換為遠程服務器的IP地址或主機名
REMOTE_DIR="/store/mysql" ?# 替換為遠程服務器的備份目錄
REMOTE_SSH_PORT=22 ?# 替換為遠程服務器的SSH端口

# MySQL配置
MYSQL_LOGIN_PATH="backup" ?# 使用 mysql_config_editor 設置的登錄路徑
SOCKET_FILE="/data/mysql/mysql.sock" ?# MySQL 套接字文件路徑

# 清理二進制日志
echo "$(date): Cleaning up binary logs..." >> "${log_file}"
mysql --login-path=${MYSQL_LOGIN_PATH} --socket=${SOCKET_FILE} -e "PURGE BINARY LOGS BEFORE NOW() - INTERVAL 30 DAY;" >> "${log_file}" 2>&1

# 清理錯誤日志
echo "$(date): Cleaning up error log..." >> "${log_file}"
ERROR_LOG="/var/log/mysql/error.log"
if [ -f "$ERROR_LOG" ]; then
? ? cat /dev/null > $ERROR_LOG
? ? echo "$(date): Error log cleaned." >> "${log_file}"
else
? ? echo "$(date): Error log not found." >> "${log_file}"
fi

# 清理慢查詢日志
echo "$(date): Cleaning up slow query log..." >> "${log_file}"
SLOW_QUERY_LOG="/var/log/mysql/mysql-slow.log"
if [ -f "$SLOW_QUERY_LOG" ]; then
? ? cat /dev/null > $SLOW_QUERY_LOG
? ? echo "$(date): Slow query log cleaned." >> "${log_file}"
else
? ? echo "$(date): Slow query log not found." >> "${log_file}"
fi

# 執行 MySQL 熱備份
echo "$(date): Performing MySQL hot backup..." >> "${log_file}"
mysqldump --login-path=${MYSQL_LOGIN_PATH} --socket=${SOCKET_FILE} --all-databases > "${local_backup_dir}/hot_backup-${DATE}.sql"
if [ $? -eq 0 ]; then
? ? echo "$(date): MySQL hot backup completed successfully" >> "${log_file}"
else
? ? echo "$(date): MySQL hot backup failed" >> "${log_file}"
? ? exit 1
fi

# 使用 rsync 同步本地備份文件到遠程服務器
echo "$(date): Syncing backup files to remote server using rsync..." >> "${log_file}"
rsync -vzrtopg --progress --delete -e "ssh -p ${REMOTE_SSH_PORT}" "${local_backup_dir}/" "${REMOTE_SERVER}:${REMOTE_DIR}/" >> "${log_file}" 2>&1
if [ $? -eq 0 ]; then
? ? echo "$(date): Backup files synced successfully" >> "${log_file}"
else
? ? echo "$(date): Backup files sync failed" >> "${log_file}"
? ? exit 1
fi

# 刪除本地舊的備份文件(保留最近30天的備份)
echo "$(date): Deleting old local backups..." >> "${log_file}"
find "${local_backup_dir}" -name "hot_backup-*.sql" -mtime +30 -delete
if [ $? -eq 0 ]; then
? ? echo "$(date): Old local backups deleted successfully" >> "${log_file}"
else
? ? echo "$(date): Old local backups deletion failed" >> "${log_file}"
fi

# 在遠程服務器上刪除舊的備份文件(保留最近30天的備份)
echo "$(date): Deleting old remote backups..." >> "${log_file}"
ssh -p ${REMOTE_SSH_PORT} "${REMOTE_SERVER}" "find ${REMOTE_DIR} -name 'hot_backup-*.sql' -mtime +30 -delete" >> "${log_file}" 2>&1
if [ $? -eq 0 ]; then
? ? echo "$(date): Old remote backups deleted successfully" >> "${log_file}"
else
? ? echo "$(date): Old remote backups deletion failed" >> "${log_file}"
fi

# 執行 MySQL 增量備份
echo "$(date): Performing MySQL incremental backup..." >> "${log_file}"
INCREMENTAL_BACKUP_DIR="${local_backup_dir}/incremental"
mkdir -p "${INCREMENTAL_BACKUP_DIR}"

# 創建增量備份目錄
INCREMENTAL_BACKUP_FILE="${INCREMENTAL_BACKUP_DIR}/incremental_backup-${DATE}.sql"
mysqldump --login-path=${MYSQL_LOGIN_PATH} --socket=${SOCKET_FILE} --single-transaction --master-data=2 --flush-logs --all-databases > "${INCREMENTAL_BACKUP_FILE}"
if [ $? -eq 0 ]; then
? ? echo "$(date): MySQL incremental backup completed successfully" >> "${log_file}"
else
? ? echo "$(date): MySQL incremental backup failed" >> "${log_file}"
? ? exit 1
fi

# 使用 rsync 同步增量備份文件到遠程服務器
echo "$(date): Syncing incremental backup files to remote server using rsync..." >> "${log_file}"
rsync -vzrtopg --progress --delete -e "ssh -p ${REMOTE_SSH_PORT}" "${INCREMENTAL_BACKUP_DIR}/" "${REMOTE_SERVER}:${REMOTE_DIR}/incremental/" >> "${log_file}" 2>&1
if [ $? -eq 0 ]; then
? ? echo "$(date): Incremental backup files synced successfully" >> "${log_file}"
else
? ? echo "$(date): Incremental backup files sync failed" >> "${log_file}"
? ? exit 1
fi

# 刪除本地舊的增量備份文件(保留最近30天的備份)
echo "$(date): Deleting old local incremental backups..." >> "${log_file}"
find "${INCREMENTAL_BACKUP_DIR}" -name "incremental_backup-*.sql" -mtime +30 -delete
if [ $? -eq 0 ]; then
? ? echo "$(date): Old local incremental backups deleted successfully" >> "${log_file}"
else
? ? echo "$(date): Old local incremental backups deletion failed" >> "${log_file}"
fi

# 在遠程服務器上刪除舊的增量備份文件(保留最近30天的備份)
echo "$(date): Deleting old remote incremental backups..." >> "${log_file}"
ssh -p ${REMOTE_SSH_PORT} "${REMOTE_SERVER}" "find ${REMOTE_DIR}/incremental -name 'incremental_backup-*.sql' -mtime +30 -delete" >> "${log_file}" 2>&1
if [ $? -eq 0 ]; then
? ? echo "$(date): Old remote incremental backups deleted successfully" >> "${log_file}"
else


----驗證查看
mysql服務器:
ls /backup/mysql/
hot_backup-2025-03-31.sql#全量文件 ? increxxx.sql#增量文件
遠程服務器:
ls /store/mysql
hot_backup-2025-03-31.sql

----刪除測試
1.navicat登錄mysql數據庫刪除一個庫,例如test庫。
2.還原
mysql -uroot -p
source /backup/mysql/hot_backup-2025-03-31.sql ?#先還原全量文件
假設你有多個增量備份文件,需要按時間順序依次應用它們。例如:
mysql -u root -p < /backup/mysql/incremental/incremental_backup-2024-07-31.sql
mysql -u root -p < /backup/mysql/incremental/incremental_backup-2024-08-01.sql
mysql -u root -p < /backup/mysql/incremental/incremental_backup-2024-08-02.sql

其他:腳本錯誤路徑:tail -f /var/spool/mail/root?

================!!!!!!!!!!!!!!更換data目錄,不要默認的,不然更新mysql的時候,data所有數據會被覆蓋消失=================
#直接把腳本粘貼上去把,免得錯了

mkdir -p /data/mysql
chown mysql:mysql -R /data/mysql
cp -R /var/lib/mysql/* /data/mysql/

1.my.cnf配置文件的datadir,socket,log-bin目錄也要切換為/data/mysql目錄下
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
log-error=/var/log/mysql/error.log
pid-file=/var/run/mysqld/mysqld.pid
log_bin=/data/mysql/mysql-bin
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2

2.腳本里的socket路徑更改/data/mysql/
SOCKET_FILE="/data/mysql/mysql.sock"

systemctl restart mysqld

#還有報錯查看
tail -f /var/spool/mail/root
journalctl -xe | grep mysqld

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

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

相關文章

C#進階學習(十七)PriorityQueue<TElement, TPriority>優先級隊列的介紹

1. PriorityQueue是什么&#xff1f;作用是什么&#xff1f; 定義&#xff1a;PriorityQueue<TElement, TPriority> 是 C# (.NET 6 引入) 中的泛型優先級隊列數據結構。 那么是什么是優先級隊列呢&#xff1f;優先級隊列是一種抽象數據結構&#xff0c;其核心特性是元素按…

如何查看和驗證AWS CloudFront的托管區域ID

在使用AWS Route 53設置DNS記錄時,正確識別CloudFront分發的托管區域ID是至關重要的。本文將詳細介紹幾種查看和驗證CloudFront托管區域ID的方法,特別關注中國區CloudFront的特殊情況。 為什么托管區域ID很重要? 托管區域ID是AWS服務中的一個關鍵標識符。在創建指向CloudF…

kafka整合flume與DStream轉換

一、Kafka整合flume cd /opt/software/flume/conf/ vi flume-kafka.conf a1.sourcesr1 a1.sinksk1 a1.channelsc1 a1.sources.r1.typespooldirt a1.sources.r1.spoolDir/root/flume-kafka a1.sinks.k1.typeorg.apache.flume.sink.kafka.KafkaSink a1.sinks.k1.kafka.to…

網絡通訊【QTcpServer、QTcpSocket、QAbstractSocket】

目錄 QTcpServer class簡單描述成員函數和信號 QTcpSocket Class詳細描述成員函數和信號 QAbstractSocket Class詳細描述成員函數和信號成員函數說明文檔 QT實現服務器和客戶端通訊服務器端&#xff1a;通訊流程原代碼 客戶端通信流程原代碼 QTcpServer class header: #includ…

大模型在腎癌診療全流程中的應用研究報告

目錄 一、引言 1.1 研究背景與意義 1.2 研究目的與方法 1.3 國內外研究現狀 二、大模型預測腎癌術前情況 2.1 基于影像組學的腎癌良惡性及分級預測 2.1.1 MRI 影像組學模型預測腎透明細胞癌分級 2.1.2 CT 影像深度學習模型鑒別腎腫物良惡性及侵襲性 2.2 大模型對手術風…

網絡原理 - 11(HTTP/HTTPS - 2 - 請求)

目錄 HTTP 請求&#xff08;Request&#xff09; 認識 URL URL 基本格式 關于 URL encode 認識方法&#xff08;method&#xff09; 1. GET 方法 2. POST 方法 認識請求“報頭”&#xff08;header&#xff09; Host Content-Length Content-Type User-Agent&…

實現MySQL高可用性:從原理到實踐

目錄 一、概述 1.什么是MySQL高可用 2.方案組成 3.優勢 二、資源清單 三、案例實施 1.修改主機名 2.安裝MySQL數據庫&#xff08;Master1、Master2&#xff09; 3.配置mysql雙主復制 4.安裝haproxy&#xff08;keepalived1、keepalived2&#xff09; 5.安裝keepaliv…

CSS學習筆記8——表格

一、表格 1-1、創建表格 在Word文檔中&#xff0c;如果要創建表格&#xff0c;只需插入表格&#xff0c;然后設定相應的行數和列數即可。然而在HTML網頁中&#xff0c;所有的元素都是通過標簽定義的&#xff0c;要想創建表格&#xff0c;就需要使用與表格相關的標簽。使用標簽…

爬蟲學習筆記(一)

目的 通過編寫程序爬取互聯網上的優質資源 爬蟲必須要使用python嗎 非也~ 編程語言知識工具&#xff0c;抓取到數據才是目的&#xff0c;而大多數爬蟲采用python語言編寫的原因是python的語法比較簡單&#xff0c;python寫爬蟲比較簡單&#xff01;好用&#xff01;而且pyt…

大廠面試:MySQL篇

前言 本章內容來自B站黑馬程序員java大廠面試題和小林coding 博主學習筆記&#xff0c;如果有不對的地方&#xff0c;海涵。 如果這篇文章對你有幫助&#xff0c;可以點點關注&#xff0c;點點贊&#xff0c;謝謝你&#xff01; 1.MySQL優化 1.1 定位慢查詢 定位 一個SQL…

C++_數據結構_詳解紅黑樹

?? 歡迎大家來到小傘的大講堂?? &#x1f388;&#x1f388;養成好習慣&#xff0c;先贊后看哦~&#x1f388;&#x1f388; 所屬專欄&#xff1a;C學習 小傘的主頁&#xff1a;xiaosan_blog 制作不易&#xff01;點個贊吧&#xff01;&#xff01;謝謝喵&#xff01;&…

DNA復制過程3D動畫教學工具

DNA復制過程3D動畫教學工具 訪問工具頁面: DNA復制動畫演示 工具介紹 我開發了一個交互式的DNA復制過程3D動畫演示工具&#xff0c;用于分子生物學教學。這個工具直觀展示了&#xff1a; DNA雙螺旋結構的解旋過程堿基互補配對原理半保留復制機制完整的復制周期動畫 主要特點…

使用阿里云 CDN 保護網站真實 IP:完整配置指南

使用阿里云 CDN 保護網站真實 IP&#xff1a;完整配置指南 一、寶塔面板準備工作1. 確認網站部署狀態2. 寶塔中檢查網站配置 二、配置阿里云 CDN1. 添加域名到 CDN2. 配置 DNS 解析3. 配置成功確認 三、寶塔面板安全加固&#xff08;隱藏 IP 的關鍵步驟&#xff09;1. 禁止通過…

PHP經驗筆記

isset — 檢測變量是否設置,并且不是NULL; 若變量存在且值不為NULL&#xff0c;則返回 TURE 若變量存在且其值為NULL或變量不存在&#xff0c;則返回 FALSE 結論 1. 當變量為空字符串、數值0和布爾值false時&#xff0c;isset全部返回true 2. 當變量不存在和變量存在且值為NULL…

Linux——安裝NVM

1. 安裝命令 官方地址&#xff1a;https://github.com/nvm-sh/nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash2. 安裝完成后執行命令 source ~/.bashrc3. 驗證 nvm -v

CentOS 7 磁盤陣列搭建與管理全攻略

CentOS 7 磁盤陣列搭建與管理全攻略 在數據存儲需求日益增長的今天&#xff0c;磁盤陣列&#xff08;RAID&#xff09;憑借其卓越的性能、數據安全性和可靠性&#xff0c;成為企業級服務器和數據中心的核心存儲解決方案。CentOS 7 作為一款穩定且功能強大的 Linux 操作系統&am…

C++每日訓練 Day 18:構建響應式表單與數據驗證(初學者友好)

&#x1f4d8; 本篇目標&#xff1a;在前幾日協程與事件驅動機制基礎上&#xff0c;構建一個響應式表單系統&#xff0c;實現用戶輸入的異步驗證與反饋。通過協程掛起/恢復機制&#xff0c;簡化異步邏輯&#xff0c;提升代碼可讀性。 &#x1f501; 回顧 Day 17&#xff1a;響應…

Vue初步總結-摘自 黑馬程序員

本文摘自 bilibili 前端最新Vue2Vue3基礎入門到實戰項目全套教程&#xff0c;自學前端vue就選黑馬程序員&#xff0c;一套全通關&#xff01; 更多詳情可參考&#xff1a; https://www.yuque.com/u26161316/pic6n4/heyv8nv8ubfk3fhe?singleDoc# 《Vue》

【基于Qt的QQ音樂播放器開發實戰:從0到1打造全功能音樂播放應用】

&#x1f339; 作者: 云小逸 &#x1f91f; 個人主頁: 云小逸的主頁 &#x1f91f; motto: 要敢于一個人默默的面對自己&#xff0c;強大自己才是核心。不要等到什么都沒有了&#xff0c;才下定決心去做。種一顆樹&#xff0c;最好的時間是十年前&#xff0c;其次就是現在&…

線程池(二):深入剖析synchronized關鍵字的底層原理

線程池&#xff08;二&#xff09;&#xff1a;深入剖析synchronized關鍵字的底層原理 線程池&#xff08;二&#xff09;&#xff1a;深入剖析synchronized關鍵字的底層原理一、基本使用1.1 修飾實例方法1.2 修飾靜態方法1.3 修飾代碼塊 二、Monitor2.1 Monitor的概念2.2 Moni…