mysql(mariadb)读写分离部署
目录
一、原理
二、准备环境
三、部署mysql主从复制
1.五台服务器下载mariadb
2.修改master配置文件,重启数据库
3.登录mysql创建replication
4.从服务器登录验证
5.获得master服务器 DB的相关信息
6.备份master原有数据
7.修改slave1、slave2配置
8. 进入msql执行下列命令,slave1、slave2开启主从复制,
四、部署mysql读写分离
1.在amoeba服务器(192.168.1.138)安装java 1.6版本过高的版本,amoeba无法兼容
2.下载amoeba tar包
3.在master、slave1、slave2服务器中配置amoeba的访问权限
4.修改amoeba配置文件
5.修改数据服务配置文件
6.放入后台启动
7.测试amoeba
8.测试读写分离
9.总结
一、原理
一台主服务器,多台从数据服务器,主服务器开启日志功能,且建立一个允许从数据服务器访问的账号,从数据服务器开启从服务,主服务器所以产生的数据记录在日志文件里保存到本地磁盘,当日志文件发生变化时,从数据服务器通过IO线程同步变化的数据,把变化的二进制文件传到从数据服务器并告知主数据服务数据没有问题然后保存到本地磁盘,从数据服务器和主数据服务有一样的数据,所以当读取数据时通过SQL线程调用从数据服务器,而主服务器只负责写,减轻主数据服务器压力。
二、准备环境
五台服务器
master服务器192.168.1.12、slave1服务器192.168.1.133、slave2服务器192.168.1.134
amoeba服务器192.168.1.138、localhost服务器192.168.1.141
五台服务器都关闭防火墙,同步时间
[root@localhost ~] systemctl stop firewalld
[root@localhost ~] setenforce 0
[root@localhost ~] iptables -F
[root@localhost ~] yum -y install ntp
[root@master ~] systemctl start ntpd
[root@master ~] ntpdate 192.168.1.12
28 Jun 14:26:12 ntpdate[8815]: the NTP socket is in use, exiting
生产环境中最好将ntpdate 192.168.1.12 写入周期计划任务每天执行一下,时间不同步会造成数据缺失!
三、部署mysql主从复制
1.五台服务器下载mariadb
[root@localhost ~] yum -y install mariadb mariadb-server
2.修改master配置文件,重启数据库
[root@master ~] vim /etc/my.cnf
server-id=1 #编号
log-bin=mysql-binlog #启动日志
log-slave-updates=true #开启主从复制
3.登录mysql创建replication(主从复制功能),将slave作为从服务器
[root@master ~] mysql
MariaDB [(none)]> grant replication slave on*.* to 'myslave'@'192.168.1.%'identified by '123456';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges; #刷新
Query OK, 0 rows affected (0.00 sec)
4.从服务器登录验证
[root@slave1 ~] mysql -umyslave -p123456 -h192.168.1.12
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 5.5.68-MariaDB MariaDB ServerCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MariaDB [(none)]>
5.获得master服务器 DB的相关信息
MariaDB [(none)]> show master status;
+---------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------------+----------+--------------+------------------+
| mysql-binlog.000003 | 1029164 | | |
+---------------------+----------+--------------+------------------+
6.备份master原有数据
[root@master ~] mysqldump -uroot --all-databases >/root/alldbbackup.sql #因为主从同步从开启同步的节点开始同步,之前的数据没有
[root@master ~] scp /root/alldbbackup.sql root@192.168.1.133: /root/
alldbbackup.sql 100% 503KB 68.1MB/s 00:00 #通过scp传输给slave,slave服务器导入到 本地数据库
[root@master ~] mysql -uroot -p </root/alldbbackup.sql #将数据库还原
7.修改slave1、slave2配置
[root@slave1 ~] vim /etc/my.cnf
[mysqld]
server-id=2 #编号
relay-log=relay-log-bin #中继日志
relay-log-index=slave-relay-bin.index #定义日志索引[root@slave2 ~] vim /etc/my.cnf
[mysqld]
server-id=3 #编号
relay-log=relay-log-bin #中继日志
relay-log-index=slave-relay-bin.index #定义日志索引
8. 进入msql执行下列命令,slave1、slave2开启主从复制,
#slave1、slave2开启主从复制
MariaDB [(none)]> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)MariaDB [(none)]> change master to master_host="192.168.1.12", master_user="myslave", master_password="123456", master_log_file="mysql-binlog.000003", master_log_pos=1029164;
Query OK, 0 rows affected (0.01 sec)MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.01 sec)MariaDB [(none)]> show slave status\G;
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.1.12Master_User: myslaveMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-binlog.000003Read_Master_Log_Pos: 1029164Relay_Log_File: relay-log-bin.000002Relay_Log_Pos: 532Relay_Master_Log_File: mysql-binlog.000003Slave_IO_Running: YesSlave_SQL_Running: Yes
#主从复制成功开启
四、部署mysql读写分离
1.在amoeba服务器(192.168.1.138)安装java 1.6版本,过高的版本,amoeba无法兼容
[root@amoeba ~] java -version #确保服务器未安装java
bash: java: 未找到命令Creating jdk1.6.0_31/jre/lib/ext/localedata.jar
Creating jdk1.6.0_31/jre/lib/plugin.jar
Creating jdk1.6.0_31/jre/lib/javaws.jar
Creating jdk1.6.0_31/jre/lib/deploy.jarJava(TM) SE Development Kit 6 successfully installed. #java1.6安装完成
[root@amoeba ~] mkdir /usr/local/jkd1.6
[root@amoeba ~] mv jdk1.6.0_31/ /usr/local/jkd1.6/ #将文件全部移到jdk1.6目录中[root@amoeba ~] vim /etc/profile #添加变量,让jdk1.6生效
#在文件最下面添加
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$HOME/bin
export PATH=$PATH:$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$HOME/bin[root@amoeba ~] source /etc/profile
[root@amoeba ~] java -version
java version "1.6.0_31" #成功下载
Java(TM) SE Runtime Environment (build 1.6.0_31-b04)
Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01, mixed mode)
2.下载amoeba tar包
[root@amoeba ~] ll
总用量 86672
-rw-r--r--. 1 root root 3161433 2月 29 2016 amoeba-mysql-binary-2.2.0.tar.gz
[root@amoeba ~] mkdir /usr/local/amoeba #给amoeba创建一个目录
[root@amoeba ~] tar xf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/ #解压到目录里
[root@amoeba ~] chmod -R 755 /usr/local/amoeba/ #递归的更改目录所有文件权限
[root@amoeba ~] vim /etc/profile #在文件最下面添加变量
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin
[root@amoeba ~] source /etc/profile
3.在master、slave1、slave2服务器中配置amoeba的访问权限
#进入mysql执行下列命令
MariaDB [(none)]> grant all on *.* to 'test'@'192.168.1.138'identified by '123.com';
Query OK, 0 rows affected (0.00 sec)
4.修改amoeba配置文件
[root@amoeba ~] vim /usr/local/amoeba/conf/amoeba.xml30 <property name="user">amoeba</property>31 32 <property name="password">123456</property>
115 <property name="defaultPool">master</property>
116
117
118 <property name="writePool">master</property>
119 <property name="readPool">slaves</property>
120 -->
5.修改数据服务配置文件
[root@amoeba ~] vim /usr/local/amoeba/conf/dbServers.xml 20 <property name="port">3306</property> #修改端口 23 <property name="schema">test</property> #mysql授权用户 26 <property name="user">test</property> #登录用户和授权用户一致29 <property name="password">123.com</property> #mysql授权的密码45 <dbServer name="master" parent="abstractServer">48 <property name="ipAddress">192.168.1.12</property> #定义masterIP地址51 #定义slave1 和 slave252 <dbServer name="slave1" parent="abstractServer">53 <factoryConfig>54 <!-- mysql ip -->55 <property name="ipAddress">192.168.1.133</property>56 </factoryConfig>57 </dbServer>58 59 <dbServer name="slave2" parent="abstractServer">60 <factoryConfig>61 <!-- mysql ip -->62 <property name="ipAddress">192.168.1.134</property>63 </factoryConfig>64 </dbServer>#定义读的池slave65 <dbServer name="slaves" virtual="true">68 <property name="loadbalance">1</property> #轮询为169 70 <!-- Separated by commas,such as: server1,server2,server1 -->71 <property name="poolNames">slave1,slave2</property> #slave1和slave2间轮询
6.放入后台启动
[root@amoeba ~] cd /usr/local/amoeba/bin/
[root@amoeba bin] ./amoeba start &
[2] 13599
[root@amoeba bin] remote application= .Amoeba:39059 response OK
amoeba server is running with port=39059
[root@amoeba bin] netstat -anptl |grep 8066
tcp6 0 0 :::8066 :::* LISTEN 13566/java
7.测试amoeba
[root@slave2 ~] mysql -uamoeba -p123456 -h 192.168.1.138 -P 8066
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 926681939
Server version: 5.1.45-mysql-amoeba-proxy-2.2.0 MariaDB ServerCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MySQL [(none)]>
#可以用amoeba用户登录
8.测试读写分离
master创建一个数据库 slave1和slave2 自动同步
MariaDB [(none)]> create database ceshi;
Query OK, 1 row affected (0.01 sec)MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| ceshi |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.00 sec)
关闭 slave1和slave2的主从复制功能,再向master和slave1、slave2 的ceshi数据库插入表
MySQL [(none)]> stop slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)MariaDB [(none)]> create database shiyan;
MariaDB [(none)]> use shiyan;
Database changed
在表中分别插入不同数据
MariaDB [shiyan]> CREATE TABLE customer (-> id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,-> name VARCHAR(30) NOT NULL,-> email VARCHAR(50),-> created_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP-> );
Query OK, 0 rows affected (0.01 sec)MariaDB [shiyan]> insert into customer (name,email) values ('master master','master.master@example.com');
Query OK, 1 row affected (0.00 sec)MariaDB [shiyan]> select * from customer;
+----+---------------+---------------------------+---------------------+
| id | name | email | created_date |
+----+---------------+---------------------------+---------------------+
| 1 | master master | master.master@example.com | 2023-06-28 20:17:16 |
+----+---------------+---------------------------+---------------------+
1 row in set (0.00 sec)MariaDB [shiyan]> insert into customer (name,email) values ('slave1 slave1','slave1,slave1@example.com');
Query OK, 1 row affected (0.00 sec)MariaDB [shiyan]> select * from customer;
+----+---------------+---------------------------+---------------------+
| id | name | email | created_date |
+----+---------------+---------------------------+---------------------+
| 1 | slave1 slave1 | slave1,slave1@example.com | 2023-06-28 20:18:51 |
+----+---------------+---------------------------+---------------------+
1 row in set (0.00 sec)MariaDB [shiyan]> insert into customer (name,email) values ('slave2 slave2','slave2,slave2@example.com');
Query OK, 1 row affected (0.00 sec)MariaDB [shiyan]> select * from customer;
+----+---------------+---------------------------+---------------------+
| id | name | email | created_date |
+----+---------------+---------------------------+---------------------+
| 1 | slave2 slave2 | slave2,slave2@example.com | 2023-06-28 20:19:25 |
+----+---------------+---------------------------+---------------------+
1 row in set (0.00 sec)
用amoeba用户登录mysql,查看表发现只能看见slave1和slave2的轮询
[root@slave2 ~]# mysql -uamoeba -p123456 -h 192.168.1.138 -P 8066
MySQL [shiyan]> select * from customer;
+----+---------------+---------------------------+---------------------+
| id | name | email | created_date |
+----+---------------+---------------------------+---------------------+
| 1 | slave1 slave1 | slave1,slave1@example.com | 2023-06-28 20:18:51 |
+----+---------------+---------------------------+---------------------+
1 row in set (0.00 sec)MySQL [shiyan]> select * from customer;
+----+---------------+---------------------------+---------------------+
| id | name | email | created_date |
+----+---------------+---------------------------+---------------------+
| 1 | slave2 slave2 | slave2,slave2@example.com | 2023-06-28 20:19:25 |
+----+---------------+---------------------------+---------------------+
1 row in set (0.01 sec)MySQL [shiyan]> select * from customer;
+----+---------------+---------------------------+---------------------+
| id | name | email | created_date |
+----+---------------+---------------------------+---------------------+
| 1 | slave1 slave1 | slave1,slave1@example.com | 2023-06-28 20:18:51 |
+----+---------------+---------------------------+---------------------+
1 row in set (0.00 sec)
在aomeba服务器里进入数据库,插入表来测试
[root@amoeba bin] mysql -uamoeba -p123456 -h 192.168.1.138 -P 8066MySQL [shiyan]> insert into customer (name,email) values ('slave1 slave1','slave1,slave1@example.com');
Query OK, 1 row affected (0.00 sec#主master查看 写入了数据库中
MariaDB [shiyan]> select * from customer;
+----+---------------+---------------------------+---------------------+
| id | name | email | created_date |
+----+---------------+---------------------------+---------------------+
| 1 | master master | master.master@example.com | 2023-06-28 20:17:16 |
| 2 | slave1 slave1 | slave1,slave1@example.com | 2023-06-28 20:31:56 |
+----+---------------+---------------------------+---------------------+#slave1和slave2 查看 ,无变化 没有写入权限
MariaDB [shiyan]> select * from customer;
+----+---------------+---------------------------+---------------------+
| id | name | email | created_date |
+----+---------------+---------------------------+---------------------+
| 1 | slave1 slave1 | slave1,slave1@example.com | 2023-06-28 20:18:51 |
+----+---------------+---------------------------+---------------------+
9.总结
master只有写入能力,slave1和slave2进行轮询。
相关文章:
mysql(mariadb)读写分离部署
目录 一、原理 二、准备环境 三、部署mysql主从复制 1.五台服务器下载mariadb 2.修改master配置文件,重启数据库 3.登录mysql创建replication 4.从服务器登录验证 5.获得master服务器 DB的相关信息 6.备份master原有数据 7.修改slave1、slave2配置 8. 进入…...
ES-工作原理
前言 搜索引擎是对数据的检索,而数据总体分为两种:结构化数据和非结构化数据。而对于结构化数据,因为他们具有特定的结构,所以一般都是可以通过关系型数据库MySQL/oracle的二维表的方式存储和搜索,也可以建立索引。…...
C++小结(4)
C 字符串 C 提供了两种类型的字符串表示形式: C 风格字符串C 引入的 string 类类型 C 风格字符串 C 风格的字符串起源于 C 语言,并在 C 中继续得到支持。字符串实际上是使用 null 字符 \0 终止的一维字符数组。因此,一个以 null 结尾的字…...
Java框架之spring 的 messaging
写在前面 本文看下spring message相关的内容。 1:Message?Messaging? Message是消息的意思,是一个名词。而Messaging是一个动名词,是将消息发送出去的意思,因此,我们的消息系统是messaging s…...
linux使用grep命令查询nginx的进程情况时总是出现 grep --color=auto nginx
问题: 每次使用ps aux | grep 服务名 命令查询某个服务的进程时,总会出现一条grep --colorauto 服务名 例如: ps aux | grep nginx # 会出现图片中的情况解答: 这是因为grep 也是一条命令,它在输出时,会…...
FFmpeg音视频开发知识点(二)
系列文章目录 FFmpeg音视频开发知识点(一) 文章目录 系列文章目录前言一、AAC音频编码1. ffmpeg编译第三方的libfdk_aac2. S16重采样FLTP 二、AAC音频解码总结 前言 该篇讲解一下,音频编解码中的难点,以及开发过程中遇到问题&am…...
【Java可执行命令】(十)JAR文件签名工具 jarsigner:通过数字签名及验证保证代码信任与安全,深入解析 Java的 jarsigner命令~
Java可执行命令之jarsigner 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 语法3.1.1 可选参数:jarsigner -keystore < url>3.1.2 可选参数:jarsigner -storepass <口令>3.1.3 可选参数:jarsigner -keypass <口令>3.1.4 可选参…...
c#调用c++ dll,Release版本内存访问错误
最近遇到个比较经典的案例,在c#中调用yara进行文件检测,yara是c编写的一个非常强大库,github有个大佬用c#对其进行了封装,使其能在跨平台下,只需编译yara的so或dll就能直接跑。但总是在Release版本下时不时就崩溃&…...
内网安全:Cobalt Strike 与 MSF 联动( 会话 相互转移 )
内网安全:Cobalt Strike 与 MSF 联动( 会话 相互转移 ) 在渗透中,有时候 Cobalt Strike 会话可能会受限制,所以我们需要把 Cobalt Strike 会话转移到 MSF 上进行后面的渗透。也有的时候会话在 MSF 上,但是…...
性能测试讲解超详细Jmeter
目录 什么是性能 性能测试的目的 功能测试和性能测试 基准测试 负载测试 稳定性测试 压力测试 并发测试 总结 性能测试指标 响应时间 并发数 吞吐量 点击数 错误率 资源使用率 总结 性能测试流程 性能测试需求分析 性能测试计划和方案 编辑性能测试用例编辑 性…...
微服务 – Spring Cloud – Nacos 配置中心
微服务 – Spring Cloud – Nacos 配置中心 文章目录 微服务 – Spring Cloud – Nacos 配置中心打开nacos面板新建配置引入依赖配置文件启动类业务类打开nacos面板新建配置 Data ID: nacos-config-client-dev.yaml Group: DEV-CLOUD2023 config:info: config info lalalal …...
超细,设计一个“完美“的测试用例,用户登录模块实例...
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 好的测试用例一定…...
【C#】文件拖拽,获取文件路径
系列文章 【C#】编号生成器(定义单号规则、固定字符、流水号、业务单号) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/129129787 【C#】日期范围生成器(开始日期、结束日期) 本文链接:h…...
SAP PI/PO初步了解 2023.07.03
SAP PI/PO 是SAP 提供的一种集成中间件解决方案,用于在组织内部或不同组织之间实现系统的无缝通信和数据交换。它使企业能够以统一高效的方式集成各种应用和系统,无论这些系统的技术平台或数据格式如何。 以下是关于SAP PI/PO的简要概述: 1…...
Java中生产者消费者模型
在Java中,生产者消费者模型是一种常见的多线程编程模型,用于解决生产者和消费者之间的数据交互问题。 简介 生产者(Producer)负责生成数据,并将数据放入共享的缓冲区(队列)中。消费者…...
测试Hyperledger Fabric环境
首先进入fabric-samples目录中的first-networked 子目录 cd fabric-samples/first-network 在first-network目录下有一个自动化脚本byfn.sh,可以使用-help参数查看相应的可 用命令,在命令提示符中输入如下命令: ./byfn.sh --help命令执行成功后&#…...
ClickHouse查询sql长度超超过最大限制
ClickHouse查询sql长度超超过最大限制 Max query size exceeded ClickHouse exception, message: Code: 62. DB::Exception: Syntax error: failed at position 262102 (‘fwm00ud6a3ynu0kaxr.ya0eyemkbzdvrxkhwgchccll’) (line 10406, col 17): fwm00ud6a3ynu0kaxr.ya0eyemk…...
【Axure教程】拖动调整行高列宽的表格
表格是在系统软件中非常常用的工具。表格通常由行和列组成,用于以结构化的方式显示和组织数据。它们在各种场景中都有广泛的应用,包括数据分析、数据录入、报表生成、项目管理和数据可视化等领域。 今天作者就教大家如何在Axure里制作一个能通过鼠标拖动…...
中间件-netty(1)
netty 前言篇 文章目录 一、IO基础篇1.概念1.1 阻塞(Block)和非阻塞(Non-Block)1.2 同步(Synchronization)和异步(Asynchronous)1.3 BIO 与 NIO 对比1.3.1 面向流与面向缓冲1.3.2 阻塞与非阻塞1.3.3 选择器的问世 2.NIO 和 BIO 如何影响应用程序的设计2.1 API调用2.2 数据处理2…...
【方法】想把PDF文档转换成PPT,如何操作?
很多小伙伴在工作中,会使用PDF或者PPT来展示内容。那如果需要把PDF转换成PPT,要如何操作呢? 我们知道,PPT转换成PDF很容易操作,只需通过PPT的【导出】选项,就可以直接转换成PDF;还可以通过“另…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
如何配置一个sql server使得其它用户可以通过excel odbc获取数据
要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据,你需要完成以下配置步骤: ✅ 一、在 SQL Server 端配置(服务器设置) 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到:SQL Server 网络配…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...
