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
相关文章:
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.…...
搭建spark yarn 模式的集群集群
一.引言 在大数据处理领域,Apache Spark 是一个强大的分布式计算框架,而 YARN(Yet Another Resource Negotiator)是 Hadoop 的资源管理系统。将 Spark 运行在 YARN 模式下,可以充分利用 YARN 强大的资源管理和调度能力…...
在uni-app中使用Painter生成小程序海报
在uni-app中使用Painter生成小程序海报 安装Painter 从GitHub下载Painter组件:https://github.com/Kujiale-Mobile/Painter 将painter文件夹复制到uni-app项目的components目录下 配置页面 在需要使用海报的页面的pages.json中配置 {"path": "pag…...
Uni-app网络请求AES加密解密实现
Uni-app 网络请求封装与 AES 加密解密实现 下面我将为你提供一个完整的 Uni-app 网络请求封装方案,包含 POST 请求的统一处理、请求参数和响应数据的 AES 加密解密。 1. 创建加密解密工具类 首先创建一个 crypto.js 文件用于处理 AES 加密解密: // u…...
uniapp实现统一添加后端请求Header方法
uniapp把请求写完了,发现需要给接口请求添加头部,每个接口去添加又很麻烦,uniapp可以统一添加,并且还能给某些接口设置不添加头部。 一般用于添加token登录验证信息。 在 main.js 文件中配置。 代码如下: // 在…...
uniapp打包apk如何实现版本更新
我们做的比较简单,在后端设置版本号,并在uniapp的config.js中定义版本号,每次跟后端的进行对比,不一致的话就更新。 一、下载apk 主要代码(下载安装包,并进行安装,一般得手动同意安装…...
【Java开发日记】OpenFeign 的 9 个坑
目录 坑一:用对Http Client 1.1 feign中http client 1.2 ribbon中的Http Client 坑二:全局超时时间 坑三:单服务设置超时时间 坑四:熔断超时时间 4.1 使用feign超时 4.2 使用ribbon超时 4.3 使用自定义Options 坑五&…...
RocketMQ 存储核心:深入解析 CommitLog 设计原理
一、引言 在分布式消息队列系统中,消息存储的可靠性和高吞吐能力是衡量系统优劣的核心指标。Apache RocketMQ 作为一款高性能、高可用的分布式消息中间件,其独特的 CommitLog 存储机制在消息持久化过程中扮演了关键角色。本文将深入剖析 CommitLog 的设…...
【C++ Qt】快速上手 显⽰类控件(Label、LCDNumber、ProcessBar、CalendarWidget)
每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry” 绪论: 本文围绕Qt中常用的显示类控件展开,重点讲解了 QLabel(文本/图片显示)、QLCDNumber(数字显示࿰…...
Docker和K8s面试题
1.Docker底层依托于linux怎么实现资源隔离的? 基于Namespace的视图隔离:Docker利用Linux命名空间(Namespace)来实现不同容器之间的隔离。每个容器都运行在自己的一组命名空间中、包括PID(进程)、网络、挂载…...
shell--数组、正则表达式RE
1.数组 1.1定义 什么是数组? 数组也是一种变量,常规变量只能保存一个值,数组可以保存多个值 1.2 分类 普通数组:只能用整数作为数组的索引--0 下标 有序数组(普通数组):(index)索引(为整数,从0开始) 关联数组:可以使用字符串作为数组的索引 1.3 普通数组 引用: ec…...
java 使用 POI 为 word 文档自动生成书签
poi 版本:4.1.0 <properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><…...
redis+lua+固定窗口实现分布式限流
用key的过期时间替代固定窗口的时间戳 -- KEYS[1]: 限流的key -- ARGV[1]: 限流窗口大小(秒) -- ARGV[2]: 限流阈值local key KEYS[1] local window tonumber(ARGV[1]) local limit tonumber(ARGV[2])-- 尝试获取当前计数 local current redis.call…...
什么是SQL92标准,有什么特点和影响?
一、SQL92简介 SQL92标准是1992年由美国国家标准协会(ANSI)和国际标准化组织(ISO)联合制定的数据库语言标准,正式名称为"SQL:1992"或ISO/IEC 9075:1992。他是关系型数据库管理系统(R…...
Flink Checkpoint 与实时任务高可用保障机制实战
在实时数仓体系中,数据一致性和任务稳定性是核心保障。本文围绕 Flink Checkpoint 机制,深入讲解高可用保障的最佳实践和工程实现。 一、业务背景与痛点 在金融风控、营销实时推荐、智能监控等场景中,实时数仓的每一条数据都至关重要。常见的业务痛点包括: 断点恢复困难:…...
WebRtc08:WebRtc信令服务器实现
如何使用socket.io发送消息 发送消息 // 给本次连接发送消息 socket.emit()// 给某个房间内所有人发送消息 io.in(room).emit()// 除了自己以外,给某个房间的所有人发消息 socket.to(room).emit();// 除本连接外,给所有人发消息 socket.broadcast.emit…...
基于 SpringBoot 与 Redis 的缓存预热案例
文章目录 “缓存预热” 是什么?项目环境搭建创建数据访问层预热数据到 Redis 中创建缓存服务类测试缓存预热 “缓存预热” 是什么? 缓存预热是一种优化策略,在系统启动或者流量高峰来临之前,将一些经常访问的数据提前加载到缓存中…...
Python对比两张CAD图并标记差异的解决方案
以下是使用Python对比两张CAD图并标记差异的解决方案,结合图像处理和CAD结构分析: 一、环境准备与库选择 图像处理库:使用OpenCV进行图像差异检测、颜色空间转换和轮廓分析。CAD解析库:若为DXF格式,使用ezdxf解析实体…...
LINUX427 冒险位 粘滞位 chmod 权限
为什么不同用户能查看的文件夹不同 思索 是因为不同文件夹的权限不同吗?感觉不是 权限不就是只有rwx权限吗? o 对对对 和0GU有关 O 组内的其他用户应该 O是其他用户 不是组内用户 文件创建应该设置了r权限 但是root为什么看到的好像不一样 root 这些…...
10 DPSK原始对话记录
10 DPSK原始对话记录 前言 编程之余,在 Vscode 的 Cline 插件界面中和 ai (dpsk v3-0324) 聊起了天,得到了一个有意思的回答。就像ai有自我意识一样。在此记录。 实际对话内容 时间范围:2025-04-27 23:37:22 - 23:44:17 对话模式:PLAN MODE [23:37:22] 用户提问 “你…...
实现一个瀑布流布局
1、纯CSS实现 实现方式:借助column-count属性来创建 4 列的布局,并使用 column-gap 设置列间距。每个 .img-container 使用 break-inside: avoid 来防止图片被分割。 来看一下完整的代码: <!DOCTYPE html> <html lang"en&qu…...
Linux:进程间通信->共享内存
1. 共享内存的概念 System V共享内存,是一个高效的进程间通信IPC机制,允许多个进程共享同一块物理内存区实现快速的数据交换。如下图所示 这两个进程分别通过页表映射到这一块共享内存中 2. 共享内存的函数 shmget 功能: 创建新的共享内存…...
《Crawl4AI 爬虫工具部署配置全攻略》
《Crawl4AI 爬虫工具部署配置全攻略》 摘要 :在数据驱动的智能时代,高效爬虫工具是获取信息的关键。本文将为你详细解析 Crawl4AI 的安装配置全流程,从基础设置到进阶优化,再到生产环境部署,结合实用技巧与常见问题解…...
spring框架学习(下)
这章节讲的主要是spring在生产Bean对象时的过程 Spring实例化对象的基本流程 1、解析bean.xml 2、封装成BeanDifinition类 3、存放到BeanDIfinitionMap里 4、从BeanDIfinitionMap遍历得到bean 5、将bean存放到SingletonObjects 6、调用getBean方法得到bean 以下是简易的…...
进程与线程-----C语言经典题目(8)
一.什么是进程 定义: 进程指的是程序在操作系统内的一次执行过程。它不只是程序代码,还涵盖了程序运行时的各类资源与状态信息。包括创建、调度、消亡。 进程的状态(ps -aux): 就绪状态:进程已经…...
lstm用电量预测+网页可视化大屏
视频教学: 训练结果: 详细代码: import pandas as pd import numpy as np from sklearn.preprocessing import MinMaxScaler from sklearn.model_selection import train_test_split from tensorflow.keras.models import Sequential from tensorflow.keras.layers impo…...
linux blueZ 第六篇:嵌入式与工业级应用案例——在 Raspberry Pi、Yocto 与 Buildroot 上裁剪 BlueZ 并落地实战
本篇面向嵌入式与工业级应用场景,深入讲解如何在各类 Linux 构建系统(Raspberry Pi OS、Yocto、Buildroot)中裁剪、交叉编译与集成 BlueZ,以及在工业网关、资产追踪与蓝牙 Mesh 等典型方案中的落地实例与注意要点,帮助你打造稳定、可维护、低功耗的嵌入式蓝牙产品。 目录 …...
Dev控件RadioGroup 如何设置一排有N个显示或分为几行
1.5个选项 全部横排显示,则Columns 5 2.5个选项 每行分两个,则有三行,则Columns 2...
AOSP Android14 Launcher3——Launcher的状态介绍LauncherState类
Launcher3中有一个跟Launcher状态相关的类,叫LauncherState LauncherState 是 Launcher3 中定义各种用户界面状态的抽象基类。你可以把它想象成一个状态机,定义了 Launcher 可能处于的不同视觉和交互模式,例如主屏幕、所有应用列表、最近任务…...
Redis 笔记(三)-Redis 基本知识及五大数据类型
一、redis 基本知识 redis 默认有 16个 数据库,config get databases 查看数据库数量 127.0.0.1:6379> config get databases # 查看数据库数量 1) "databases" 2) "16"默认使用的是第 0个 16 个数据库为:DB 0 ~ DB 15&am…...
Linux——线程(2)线程互斥(锁)
知识回顾 在学习本篇内容前,我们需要先回顾一下几个概念。 临界资源:多线程执行流共享的资源就叫做临界资源 临界区:每个线程内部,访问临界资源的代码,就叫做临界区 互斥:任何时刻,互斥保证有…...
深度解析:具身AI机器人领域最全资源指南(含人形机器人,多足机器人,灵巧手等精选资源)
💡 你是否在寻找具身人工智能(Embodied AI)领域的研究资源?是否希望有一个系统性的资源集合来加速你的研究?今天给大家推荐一个重磅项目! 🌟 为什么需要这个项目? 具身人工智能是一…...
组件之间的信息传递的四种方法!!【vue3 前端】
迎万难 赢万难! 目录 1. 使用 defineProps 传递数据:2. 使用。defineEmits 发送事件:3. 使用 Provide / Inject:4. 使用状态管理(如 Pinia): 1. 使用 defineProps 传递数据: 父组件…...
单片机学习笔记9.数码管
0到99计数 ,段选共阴极 ;0到99计数 ORG 0000H LJMP MAIN ORG 000BH LJMP TIMER0_ISR ORG 0100H; 定义位选控制位 DISPLAY_SELECT BIT 20H.0MAIN:; 定时器 0 初始化MOV TMOD, #01H ; 设置定时器 0 为模式 1MOV TH0, #3CH ; 定时器 0 高 8 位初值,定时 …...
Go 语言 核心知识点
Go 语言(Golang)是由 Google 开发的一种静态类型、编译型语言,设计目标是高效、简洁、并发友好。它借鉴了 C 语言的性能优势,同时引入了现代语言的特性(如垃圾回收、并发原语),并摒弃了传统面向…...
【C++ 类和数据抽象】消息处理示例(2)
目录 一、消息处理系统的核心价值 1.1 现代软件架构中的消息驱动 1.2 消息处理系统的关键组件 二、消息处理系统概述 三、Message类设计 3.1 成员变量 3.2. 成员函数 3.3. 私有辅助函数 四、Folder类设计 五、代码实现 六、数据抽象在消息处理系统中的应用 七、总结…...
kafka 中消费者 groupId 是什么
📚 什么是 groupId? groupId 是 Kafka 里消费者组(Consumer Group)的唯一标识。 同一个 groupId 的消费者,一起共享消费,一条消息只给组内一个消费者处理。不同 groupId 的消费者组,各自独立消…...
单相交直交变频电路设计——matlab仿真+4500字word报告
微♥“电击小子程高兴的MATLAB小屋”获取巨额优惠 1.模型简介 硬件电路采用Altium designer设计,仿真采用Matlab软件 本仿真模型基于MATLAB/Simulink(版本MATLAB 2018Rb)软件。建议采用matlab2018Rb及以上版本打开。(若需要其他…...
Python中的协程(Coroutine)
Python中的协程(Coroutine) 是一种轻量级的异步执行单元,主要用于解决IO密集型任务的性能问题。Python 3.5引入了 async/await 语法,使得协程变得简洁且易于使用。协程的核心是通过事件循环(Event Loop) 来…...
【QT】QT多线程
QT多线程 1.涉及到类和方法示例代码:未重写run函数 2.使用思路3.常用方法4.示例代码1:重写线程run函数现象: 5.示例代码2:多线程显示切换图片,使用公有方法现象: 1.涉及到类和方法 类:QThread 示…...
基于深度学习的医疗诊断辅助系统设计
标题:基于深度学习的医疗诊断辅助系统设计 内容:1.摘要 随着医疗数据的爆炸式增长和深度学习技术的飞速发展,开发基于深度学习的医疗诊断辅助系统具有重要的现实意义。本研究的目的在于设计一个高效、准确的医疗诊断辅助系统,以辅助医生进行更精准的诊断…...
C++ RAII
RAII(Resource Acquisition Is Initialization,资源获取即初始化)是 C 编程中的核心设计理念,用于管理资源的分配和释放。它通过将资源的生命周期绑定到对象的生命周期,利用 C 的自动对象管理机制(主要是栈…...
Linux进程学习【环境变量】进程优先级
进程优先级的基本概念 在 Linux 中,每个进程都有一个优先级,操作系统根据这个优先级来决定进程的执行顺序。优先级越高,进程的执行就越频繁。通常,进程优先级是由以下两个部分构成: 静态优先级(PRI&#x…...
Leetcode:283. 移动零
题目 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums [0]…...
BIOES 标签的含义
BIOES 标签的含义 B (Begin) 表示一个实体的开始。例如,在句子 “北京是中国的首都” 中,“北京” 作为地点实体的开头,首字会被标注为 B-LOC,后续字可能标注为 I-LOC。 I (Inside) 表示一个实体的中间或内部部分。例如&a…...
mAh 与 Wh:电量单位的深度解析
1. 基础定义与物理意义 1.1 mAh(毫安时) 定义:表示电池以毫安(mA)为单位的电流持续放电 1 小时的电荷量。1 mAh1 mA1 h3.6 C(库仑,电荷单位)局限性:仅反映电池存储的电荷量,未考虑电…...
安卓屏播放语音失败,报错TextToSpeech: speak failed: not bound to TTS engine
最近碰到一个很棘手的问题,无缘无故,之前在Android9.0跑得好好的程序,升级安装系统到Android13后,就发现之前能放的语音,现在放不了了,真是头大,所以我摸索着尝试解决,且看我的解决过…...
C语言学习之结构体
在C语言中,我们已经学了好几种类型的数据。比如整型int、char、short等,浮点型double、float等。但是这些都是基本数据类型,而这些数据类型应用在实际编程里显然是不够用的。比如我们没有办法用一旦数据类型来定义一个”人“的属性。因此这里…...
layui获取无法获取表单数据,data.field一直为空
form.on(submit(*), function(data){console.log(data.field) //当前容器的全部表单字段,名值对形式:{name: value}return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。}); console.log(data.field)一直显示为空࿰…...
「Mac畅玩AIGC与多模态02」部署篇01 - 在 Mac 上部署 Ollama + Open WebUI
一、概述 本篇介绍如何在 macOS 环境下本地部署 Ollama 推理服务,并通过 Open WebUI 实现可视化交互界面。该流程无需 CUDA 或专用驱动,适用于 M 系列或 Intel 芯片的 Mac,便于快速测试本地大语言模型能力。 二、部署流程 1. 环境准备 安装 Homebrew(如尚未安装):/bin…...