当前位置: 首页 > news >正文

银河麒麟V10 SP3 X86 二进制文件部署 mysql-5.7.29 GTID 半同步复制的双主架构

文章目录

    • @[toc]
    • 啰嗦一下
      • mysql 的 AB 复制和 gtid 复制的优缺点
        • AB 复制(Asynchronous Replication)
        • GTID 复制(Global Transaction Identifier Replication)
      • mysql gtid 并行复制和半同步复制的优缺点
        • 并行复制(Parallel Replication)
        • 半同步复制(Semi-Synchronous Replication)
    • 好戏开场
      • 部署 mysql
        • 创建 mysql 启动的用户
        • 创建 mysql 安装包存放路径
        • 创建主库 mysql 配置文件
        • 创建从库 mysql 配置文件
        • mysql 初始化
        • 创建 systemcl 管理
        • 修改 root 用户密码
      • 配置互为主从
        • 从库配置主从关系
        • 主库配置互为主从关系
      • 验证主从复制
        • 模拟主库故障

  • 麒麟镜像可以去下面的地方下载,需要自己注册一个账号
    • 麒麟软件生态
  • Mysql 二进制文件下载地址

啰嗦一下

  • 老生常谈的问题(这些问题都会影响部署的排查)
    • 关掉 firewalld
    • 关掉 selinux (银河麒麟默认会关闭 selinux)

我下载的海光 x86 版本的麒麟

NAME="Kylin Linux Advanced Server"
VERSION="V10 (Lance)"
ID="kylin"
VERSION_ID="V10"
PRETTY_NAME="Kylin Linux Advanced Server V10 (Lance)"
ANSI_COLOR="0;31"

mysql 的 AB 复制和 gtid 复制的优缺点

抄自 opengpt 3.5

在 MySQL 中,有两种常见的复制方式:AB 复制(Asynchronous Replication)和 GTID 复制(Global Transaction Identifier Replication)。

AB 复制(Asynchronous Replication)

优点

  1. 简单易用:AB 复制是 MySQL 复制的最基本形式,设置相对简单,适合初学者或简单复制场景。
  2. 性能:因为是异步复制,主数据库不需要等待从数据库的确认,所以主库的写操作可以更快地完成,提高了主库的性能。
  3. 容错:在出现网络故障或从库延迟时,主库不会受到影响,继续提供服务。

缺点:

  1. 数据延迟:因为是异步复制,从库的数据可能会有一定的延迟,这意味着在主库上提交的事务不会立即在从库上可见。
  2. 数据一致性:由于延迟,主从之间的数据可能会出现不一致的情况,这需要开发者自行处理。
  3. 单点故障:如果主库故障,需要手动切换到备库,造成一定的停机时间。

GTID 复制(Global Transaction Identifier Replication)

优点:

  1. 数据一致性:使用 GTID,每个事务都有全局唯一的标识符,确保主从之间的数据一致性,避免数据冲突。
  2. 简化拓扑结构:GTID 复制使得添加或删除节点更加容易,不需要像传统复制那样配置复杂的 master-host 和 master-log-position。
  3. 自动故障转移:GTID 复制可以更容易地实现自动故障转移,当主库发生故障时,可以自动切换到从库。

缺点:

  1. 性能:由于 GTID 需要维护全局唯一标识符,可能会对性能产生一定的影响,尤其在高负载的情况下。
  2. 配置复杂性:相比 AB 复制,GTID 复制的配置较为复杂,特别是在现有的非 GTID 复制架构迁移到 GTID 复制时,需要谨慎处理。
  3. 兼容性:GTID 复制要求 MySQL 版本在 5.6 以上,如果要使用较旧的 MySQL 版本,可能不支持 GTID。
  • 综合考虑
    • AB 复制适合简单的数据复制和备份需求,对数据一致性和高可用性要求不高的场景。
    • GTID 复制适合对数据一致性和高可用性要求较高的复制架构,尤其在复杂的拓扑结构和自动故障转移场景中更加有优势。选择哪种复制方式取决于应用程序的需求和系统的复杂性。

mysql gtid 并行复制和半同步复制的优缺点

在 MySQL GTID 主从复制中,还有两种复制模式:并行复制和半同步复制。这两种模式可以进一步提高复制的性能和数据一致性。让我们来看一下它们的优缺点和利弊:

并行复制(Parallel Replication)

优点:

  1. 提高复制性能:并行复制允许在从库上同时执行多个线程来处理不同的事务,从而提高了复制的性能和吞吐量。
  2. 减少延迟:通过并行执行事务,从库可以更快地赶上主库,从而减少数据复制的延迟。
  3. 多核利用:现代服务器通常有多个核心,使用并行复制可以更好地利用这些多核心,加快数据复制。

缺点:

  1. 复杂性增加:并行复制的配置和管理相对复杂,可能需要更多的系统资源和监控,不适合所有环境。
  2. 并发控制:并行复制可能导致数据在不同线程之间的冲突和竞争,需要开发者正确处理并发控制问题。

半同步复制(Semi-Synchronous Replication)

优点:

  1. 数据安全性:半同步复制确保至少一个从库已经确认接收并写入主库的事务,从而提高数据的安全性和一致性。
  2. 高可用性:在主库发生故障时,由于至少有一个从库已经复制了主库的数据,可以更快地将从库提升为新的主库,减少停机时间。
  3. 监控机制:半同步复制提供了可以监控从库复制进度的机制,使得管理员可以更好地了解复制的状态和延迟情况。

缺点:

  1. 性能影响:由于需要等待至少一个从库确认写入,半同步复制可能对主库的性能产生一定的影响,特别是在写入负载较高的情况下。
  2. 单点故障:如果配置了多个从库,并且至少一个从库确认写入的要求,那么当所有从库都不可用时,主库的写入将会受阻。
  • 综合考虑
    • 并行复制适用于高负载环境,可以显著提高复制性能和减少复制延迟,但配置和管理相对较复杂。
    • 半同步复制适用于对数据安全性和高可用性要求较高的场景,但可能会对主库的性能产生一定的影响。选择哪种模式取决于具体的应用需求和系统性能情况。

准备两台虚拟机,我们启航

好戏开场

部署 mysql

  • 下面的操作,都是使用的 root 用户,但是 mysql 使用的是普通用户
  • 部署 mysql 是两台虚拟机都需要安排的

创建 mysql 启动的用户

创建的 mysql 用户就分配一个 nologin 的 shell,不给登录机器的

useradd mysql -s /sbin/nologin

创建 mysql 安装包存放路径

mkdir -p /data/software/mysql

上传或者下载 mysql 二进制文件到 /data/software/mysql 下后进行解压,这里就不体现步骤了

下面的命令给 mysql 二进制文件修改用户权限,让 mysql 用户有权限可以读取

chown -R mysql /data/software/mysql/mysql-5.7.29-linux-glibc2.12-x86_64

创建主库 mysql 配置文件

我这边就用了 GTID 的半同步模式

  • 创建对应的目录 [两台机器都需要创建]
mkdir -p /data/mysql/{mysql_data,logs,config}
  • 在 mysql 主库上创建配置文件
cat << EOF > /data/mysql/config/my.cnf
[mysqld]
pid-file=/data/mysql/mysqld.pid
socket=/data/mysql/mysqld.sock
datadir=/data/mysql/mysql_data
log-error=/data/mysql/logs/error.log
port=13306
# MySQL 在运行时需要 errmsg.sys 文件来显示和报告错误消息
lc-messages-dir=/data/software/mysql/mysql-5.7.29-linux-glibc2.12-x86_64/share# GTID
## 每个 mysql 的 server_id 不能重复
server_id=135
# 新事务和复制事务都必须是 GTID 事务
gtid_mode=on
# 不允许任何事务违反 GTID 一致性
enforce_gtid_consistency=on# MySQL 在启动时会跳过启动从服务器的复制线程,从而暂时禁止从服务器执行复制任务
skip_slave_start=1# binlog
# binlog 文件的名称
log_bin=mysql-bin
# 设置每个二进制日志文件的最大大小
max_binlog_size=100m
# 设置用于缓存二进制日志事件的缓冲区大小
binlog_cache_size=4m
# 设置 binlog 缓存的最大大小
max_binlog_cache_size=512m
# binlog 类型
binlog_format=ROW
# binlog 过期时间
expire_logs_days=7
# binlog 记录忽略的数据库
binlog-ignore-db=sys,mysql,performance_schema,information_schema
# 从服务器将主服务器的更新记录到自己的 binlog 里面
log-slave-updates=ON
# 每次提交事务时,等待将日志写入磁盘并返回成功后才继续执行
sync_binlog=1# 配置半同步复制使用的插件
plugin-load=rpl_semi_sync_master=semisync_master.so
plugin-load=rpl_semi_sync_slave=semisync_slave.so
# 开启半同步复制
rpl_semi_sync_slave_enabled=ONbind-address=0.0.0.0
# 是否允许在数据库目录下使用符号链接
## symbolic-links=0:表示不允许使用符号链接。如果设置为 0,MySQL 服务器在启动时将不会使用数据库目录下的符号链接,并且可能会在符号链接存在时报错。
## symbolic-links=1:表示允许使用符号链接。如果设置为 1,MySQL 服务器在启动时将允许使用数据库目录下的符号链接,但仅限于特定目录或文件(根据权限设置)。
## symbolic-links=2:表示允许使用符号链接,且没有限制。如果设置为 2,MySQL 服务器在启动时将允许使用数据库目录下的任意符号链接,包括对任意文件或目录的链接。
symbolic-links=0
# mysql 最大连接数
max_connections=1000
# 默认存储引擎
default_storage_engine=innodb
# 禁用外部锁定,MySQL 将使用内部锁定来代替外部锁定
skip_external_locking
# 0:表名存储为原始大小写,区分大小写;
# 1:表名存储为小写,不区分大小写;
# 2:表名存储为小写,但会在文件系统上进行名称比较,因此会区分大小写。
lower_case_table_names=1
# 禁用主机缓存,每次都要重新解析域名
skip_host_cache
# 开启主机名解析
skip_name_resolve
# 设置服务器的默认字符集
character_set_server=utf8
# 客户端与服务器之间允许的最大数据包大小
max_allowed_packet=12M
# 控制 SQL 的执行模式
## STRICT_TRANS_TABLES:启用严格模式,对于事务表,如果有非法数据插入或更新,将会引发错误
## NO_ZERO_IN_DATE:禁止在日期中使用 "0000-00-00" 这样的零值,否则会被转换为 NULL 值
## ERROR_FOR_DIVISION_BY_ZERO:当除零错误发生时,产生错误而不是返回 NULL 值
## NO_AUTO_CREATE_USER:禁止 GRANT 语句自动创建新用户,必须手动创建
## NO_ENGINE_SUBSTITUTION:如果指定的存储引擎不可用或不存在,不要自动替换为其他可用的存储引擎,而应该返回错误
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'[client]
# 设置 MySQL 客户端连接的默认字符集
character-set-client=utf8
EOF

创建从库 mysql 配置文件

  • 在 mysql 从库上创建配置文件
    • 注意 service_id 要和主库的不一样
cat << EOF > /data/mysql/config/my.cnf
[mysqld]
pid-file=/data/mysql/mysqld.pid
socket=/data/mysql/mysqld.sock
datadir=/data/mysql/mysql_data
log-error=/data/mysql/logs/error.log
port=13306
lc-messages-dir=/data/software/mysql/mysql-5.7.29-linux-glibc2.12-x86_64/shareserver_id=136
gtid_mode=on
enforce_gtid_consistency=onskip_slave_start=1log_bin=mysql-bin
max_binlog_size=100m
binlog_cache_size=4m
max_binlog_cache_size=512m
binlog_format=ROW
expire_logs_days=7
binlog-ignore-db=sys,mysql,performance_schema,information_schema
log-slave-updates=ON
sync_binlog=1plugin-load=rpl_semi_sync_master=semisync_master.so
plugin-load=rpl_semi_sync_slave=semisync_slave.so
rpl_semi_sync_slave_enabled=ONbind-address=0.0.0.0
symbolic-links=0
max_connections=1000
default_storage_engine=innodb
skip_external_locking
lower_case_table_names=1
skip_host_cache
skip_name_resolve
character_set_server=utf8
max_allowed_packet=12M
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'[client]
character-set-client=utf8
EOF

修改文件和目录的用户权限

chown -R mysql /data/mysql
chown -R mysql /data/software/mysql/mysql-5.7.29-linux-glibc2.12-x86_64

更新 PATH 变量

echo 'MYSQL_HOME="/data/software/mysql/mysql-5.7.29-linux-glibc2.12-x86_64"' >> /etc/profile
echo 'PATH=${PATH}:${MYSQL_HOME}/bin' >> /etc/profile
source /etc/profile

mysql 初始化

mysqld --initialize-insecure \
--user=mysql \
--basedir=/data/software/mysql/mysql-5.7.29-linux-glibc2.12-x86_64 \
--datadir=/data/mysql/mysql_data

创建 systemcl 管理

cat << EOF > /usr/lib/systemd/system/mysqld.service
[Unit]
After=network.target
After=syslog.target[Install]
WantedBy=multi-user.target[Service]
User=mysql
Type=forking
TimeoutSec=0
PermissionsStartOnly=true
ExecStart=/data/software/mysql/mysql-5.7.29-linux-glibc2.12-x86_64/bin/mysqld \\--defaults-file=/data/mysql/config/my.cnf --daemonize \\--plugin-dir=/data/software/mysql/mysql-5.7.29-linux-glibc2.12-x86_64/lib/plugin
LimitNOFILE=5000
Restart=on-failure
RestartPreventExitStatus=1
PrivateTmp=false
EOF

启动 mysql

systemctl daemon-reload
systemctl enable mysqld
systemctl start mysqld

进入 mysql 验证

初始化的时候没有带密码,进入 mysql 不需要密码,直接回车就可以了

mysql -uroot -p -S /data/mysql/mysqld.sock
  • 以下的操作没有特殊提示,均在 mysql 内操作

修改 root 用户密码

SET PASSWORD FOR root@localhost = PASSWORD ('abc123');

配置互为主从

从库配置主从关系

主库创建复制用户

CREATE USER 'rpldb'@'%' IDENTIFIED BY 'rpldb007';
GRANT REPLICATION SLAVE ON *.* TO 'rpldb'@'%';

主库查看 binlog 名称和 Position 信息

SHOW MASTER STATUS\G

获取到类似如下的信息

*************************** 1. row ***************************File: mysql-bin.000001Position: 841Binlog_Do_DB:Binlog_Ignore_DB: sys,mysql,performance_schema,information_schema
Executed_Gtid_Set: c5b4fcf9-3699-11ee-845e-000c29db9ce6:1-3

从库配置主从,下面的 ip 和用户名,密码,binlog 文件名称和 Position 都要替换成自己实际的信息

CHANGE MASTER TO MASTER_HOST='172.72.0.135', MASTER_PORT=13306, MASTER_USER='rpldb', MASTER_PASSWORD='rpldb007', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=841;

启动复制

START SLAVE;

查看 slave 情况

SHOW SLAVE STATUS\G

看到这两个都是 yes,表示主从复制已经建立成功了

             Slave_IO_Running: YesSlave_SQL_Running: Yes

主库配置互为主从关系

从库创建复制用户

CREATE USER 'rpldb'@'%' IDENTIFIED BY 'rpldb007';
GRANT REPLICATION SLAVE ON *.* TO 'rpldb'@'%';

从库查看 binlog 名称和 Position 信息

SHOW MASTER STATUS\G

获取到类似如下的信息

*************************** 1. row ***************************File: mysql-bin.000001Position: 841Binlog_Do_DB:Binlog_Ignore_DB: sys,mysql,performance_schema,information_schema
Executed_Gtid_Set: 1d31ccb1-369d-11ee-bff2-000c29cd48ee:1-3

主库配置互为主从,下面的 ip 和用户名,密码,binlog 文件名称和 Position 都要替换成自己实际的信息

CHANGE MASTER TO MASTER_HOST='172.72.0.136', MASTER_PORT=13306, MASTER_USER='rpldb', MASTER_PASSWORD='rpldb007', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=841;

启动复制

START SLAVE;

查看 slave 情况

SHOW SLAVE STATUS\G

看到这两个都是 yes,表示主从复制已经建立成功了

             Slave_IO_Running: YesSlave_SQL_Running: Yes

验证主从复制

主库创建一个测试数据

-- 建库
CREATE DATABASE replication_test;
-- 进入到库里
USE replication_test;
-- 建表
CREATE TABLE replication_test.slt(num int auto_increment primary key,name char(10),job char(10),age int,salary int,descrip char(128)not null default ''
)charset=utf8;
-- 插入数据
INSERT INTO replication_test.slt(name, job, age, salary,descrip) VALUES
('Tom','teacher',30,20000,'level2'),
('frank','teacher',31,21000,'level2'),
('jack','teacher',32,22000,'level2'),
('jhon','asistant',23,8000,'level3'),
('hugo','manager',45,30000,'level4'),
('jinhisan','teacher',26,9000,'level1');

主库查看一下数据

SELECT * FROM replication_test.slt WHERE name='Tom';

获取到如下的信息

+-----+------+---------+------+--------+---------+
| num | name | job     | age  | salary | descrip |
+-----+------+---------+------+--------+---------+
|   1 | Tom  | teacher |   30 |  20000 | level2  |
+-----+------+---------+------+--------+---------+

可以在从库看一下,同样可以获取到一样的信息

模拟主库故障

通过停止主库的服务来模拟出现故障,然后在从库继续写入数据,验证主库修复后,是否会建立数据同步

systemctl stop mysqld

在从库内看同步情况,可以看到 Slave_IO_Running 变成了 Connecting 状态

在从库内继续写入数据

INSERT INTO replication_test.slt(name, job, age, salary,descrip) VALUES
('Rose','teacher',30,20000,'level1'),
('Maybe','manager',28,30000,'level4');

重新启动宕机的 mysql 服务

systemctl start mysqld

启动宕机 mysql 的复制

START SLAVE;

查看 slave 情况,看到 Slave_IO_RunningSlave_SQL_Running 都是 yes 即可

SHOW SLAVE STATUS\G

宕机恢复的节点进行数据查看,验证数据是否同步

SELECT * from replication_test.slt WHERE name='Maybe';

可以正常获取到数据,证明互为主从没毛病

+-----+-------+---------+------+--------+---------+
| num | name  | job     | age  | salary | descrip |
+-----+-------+---------+------+--------+---------+
|   8 | Maybe | manager |   28 |  30000 | level4  |
+-----+-------+---------+------+--------+---------+

相关文章:

银河麒麟V10 SP3 X86 二进制文件部署 mysql-5.7.29 GTID 半同步复制的双主架构

文章目录 [toc]啰嗦一下mysql 的 AB 复制和 gtid 复制的优缺点AB 复制&#xff08;Asynchronous Replication&#xff09;GTID 复制&#xff08;Global Transaction Identifier Replication&#xff09; mysql gtid 并行复制和半同步复制的优缺点并行复制&#xff08;Parallel …...

python爬虫3:requests库-案例1

python爬虫3&#xff1a;requests库-案例1 前言 ​ python实现网络爬虫非常简单&#xff0c;只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点&#xff0c;方便以后复习。 申明 ​ 本系列所涉及的代码仅用于个人研究与讨论&#xff0c;并不会对网…...

计算机网络 数据链路层 媒体接入控制

...

面部表情识别(Pytorch):人脸检测模型+面部表情识别分类模型

目录 0 相关资料1 基于人脸检测面部表情分类识别方法2 项目安装2.1 平台与镜像2.2 项目下载2.3 模型下载2.4 上传待测试图片2.5 项目安装 3 demo测试 0 相关资料 面部表情识别2&#xff1a;Pytorch实现表情识别(含表情识别数据集和训练代码)&#xff1a;https://blog.csdn.net…...

外卖点餐小程序开源源码——支持扫码点餐

一套支持店内扫码点餐、外卖点餐配送于一体的餐饮系统&#xff0c;支持商家创建优惠券&#xff0c;支持商家自定义打印机功能&#xff0c;支持商家财务管理&#xff0c;支持商户菜品管理&#xff0c;支持菜品自定义分类&#xff0c;支持商家招募骑手入驻功能。系统基于thinkphp…...

十分钟掌握使用 SolidJS 构建全栈 CRUD 应用程序

我们可以开始讨论 SolidJS&#xff0c;说它比React更好&#xff0c;但没有必要做这种比较。SolidJS只是众多前端框架之一&#xff0c;旨在在Web上快速创建数据驱动。那么&#xff0c;我们为什么要突出这个新孩子呢&#xff1f; 首先&#xff0c;我们不能忽视SolidJS不使用虚拟…...

LabVIEW开发多材料摩擦电测量控制系统

LabVIEW开发多材料摩擦电测量控制系统 摩擦电效应是两个物体摩擦在一起&#xff0c;电荷从一个物体转移到另一个物体的现象&#xff0c;从而导致两个物体携带相等和相反的电荷。接触和充电是主导该过程的两个关键因素。当静电荷累积到一定水平时&#xff0c;可能会出现放电现象…...

【Linux】网络基础1

文章目录 网络基础11. 计算机网络背景1.1 网络发展 2. 认识协议2.1 网络协议2.2 OSI七层模型2.3 TCP/IP五层&#xff08;或四层&#xff09;模型 3. 网络传输基本流程3. 1 数据报封装和分用 4. 网络中的地址管理4.1 认识IP地址 5. 认识MAC地址 网络基础1 1. 计算机网络背景 1…...

HTML - Javascript - 原生的JS HTTP请求:实用主义的一篇文章

HTML - Javascript - 原生的JS HTTP请求&#xff1a;实用主义的一篇文章 前言 虽然现在使用JQuery等可以做到很方便的HTTP请求&#xff0c;但是这样做毕竟要引入一些JS文件。 如果想使用原生的JS进行HTTP网络请求应该怎样呢&#xff1f;可以使用XMLHttpRequest。 使用方法 …...

Intellij IDEA运行报Command line is too long的解决办法

想哭&#xff0c;vue前端运行起来&#xff0c;对应的后端也得起服务。 后端出的这个bug&#xff0c;下面的博客写的第二种方法&#xff0c;完整截图是下面这个。 ​​​​​​​​​​​​​​​​​​​​Intellij IDEA运行报Command line is too long的解决办法 - 知乎 (zh…...

信号槽传输过程中指针所指对象的生命周期

在子线程中的一个槽函数&#xff0c;当读取到dxf文件完成后&#xff0c;结果通过在该槽函数中的 dx_data* pDxfData 指针变量读取。 然后通过QVariant封装该指针变量。发送到主线程中。 void qcWorker::slotReadDxfFile(QString dir) {bool bRtn{ false }; //定义一个局部指针…...

c++ 递归锁的使用

非递归锁 同一个线程里&#xff0c;在锁未释放的情况下反复加锁&#xff0c;会导致死锁。 示例 #include <iostream> #include <mutex> #include <thread> #include <unistd.h> using namespace std;std::mutex m_mutex;void Func() {m_mutex.lock(…...

Oracle TDE wallet

1. 钱夹密码千万不能忘记&#xff0c;这也是使用TDE 需要承担的风险。 2. 只要将wallet cwallet.sso 拷贝过去&#xff0c;加密没有意义&#xff01; 钱夹的备份 正如上述&#xff0c;已经加密过的表列或者表空间&#xff0c;钱夹必须打开才能够查询到里面的数据。如果钱夹丢…...

多模态学习

一、目标 三、多模态核心任务 题目&#xff1a;...

Android学习之路(2) 文本设置

Android学习之路(1) 文本 一、设置文本内容 设置文本内容的两种方式&#xff1a; 一种是在XML文件中通过属性android:text设置文本代码如下 <TextViewandroid:id"id/tv_hello"android:layout_width"wrap_content"android:layout_height"wrap_c…...

手写springboot

前言 首先确定springboot在spring基础上主要做了哪些改动&#xff1a;内嵌tomcatspi技术动态加载 一、基本实现 1. 建一个工程目录结构如下&#xff1a; springboot: 源码实现逻辑 user : 业务系统2.springboot工程项目构建 1. pom依赖如下 <dependencies>…...

报错Uncaught (in promise) Error: Manifest request to...

在使用nuxt框架时&#xff0c;出现如下报错&#xff1a; 解决方案&#xff1a; 不要打开两个以上的开发者工具更换nuxt的端口号 参考资料&#xff1a;https://github.com/nuxt/nuxt.js/issues/6202...

微信私域更好玩了

之前分享过&#xff0c;“小绿书”“公众号文章转音频”等内测中或悄悄已升级的功能。 其实&#xff0c;微信还在内测很多新功能&#xff0c;只是没公开 今天&#xff0c;小编又发现新升级 就是『附近』功能 增加了一个本地生活的入口&#xff0c;这里面是短视频和图文 展示…...

基于ant-design的a-modal自定义vue拖拽指令

写一个dragDialog.js 在main.js中引入 import ‘./core/directives/dragDialog.js’ // 让 dialog 支持鼠标拖动 import Vue from vueVue.directive(DragDialog, {update: function (el, binding, vnode) {if (!binding.value || !binding.value.reset) returnconst dialog e…...

【ES】笔记-模板字符串(template string)是增强版的字符串`${expresions}`

模板字符串 传统的 JavaScript 语言&#xff0c;输出模板通常是这样写的&#xff08;下面使用了 jQuery 的方法&#xff09;。 $(#result).append(There are <b> basket.count </b> items in your basket, <em> basket.onSale </em> are on sal…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

MySQL 主从同步异常处理

阅读原文&#xff1a;https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主&#xff0c;遇到的这个错误&#xff1a; Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一&#xff0c;通常表示&#xff…...

API网关Kong的鉴权与限流:高并发场景下的核心实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中&#xff0c;API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关&#xff0c;Kong凭借其插件化架构…...

jdbc查询mysql数据库时,出现id顺序错误的情况

我在repository中的查询语句如下所示&#xff0c;即传入一个List<intager>的数据&#xff0c;返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致&#xff0c;会导致返回的id是从小到大排列的&#xff0c;但我不希望这样。 Query("SELECT NEW com…...

CSS3相关知识点

CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...