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…