STEP BY STEP带你使用Docker搭建MySql-MGR高可用集群

数据的重要性

数据已成为当今数字时代最重要的资产之一,对于企业的成功至关重要。它可以帮助企业了解客户、市场和自身运营,提高运营效率,做出明智决策,推动创新,并获得竞争优势。

数据的采集,存储,分析离不开企业的各种软件系统,这些数据最终都会存储在数据库中。确保数据安全,数据完整性,不丢失数据可以说是整个IT团队的责任,是保障系统正常运行和业务连续性的重要保证。

MySQL高可用方案

通常来讲,单台数据库服务器很容易就会发生单点故障,就很有可能造成业务数据的丢失,为了避免单点故障,生产环境的数据库都会采用高可用集群的方式进行部署。

MySQL有几中常见的高可用方案

  • MySQL复制(MySQL Replication)
  • MHA(Master High Availability)
  • MGR(MySQL Group Replication)

今天我们要讲的就是Mysql官方提供的MGR解决方案。更详细的内容,大家可以翻阅Mysql官方关于组复制的参考文档。

MGR简单说明
MySQL Group Replication是MySQL数据库的一种高可用性解决方案,它是基于组复制(Group Replication)技术实现的。它允许多个MySQL服务器之间形成一个同步复制组,实现数据的自动复制和故障转移,从而提高了系统的可用性和容错性。

通过Docker容器模拟搭建一个MGR集群

我们进入今天的主题,带大家一步一步通过Docker容器来快速搭建一个MGR的集群。不过要声明一点,我们这个MGR集群是在本地电脑上模拟出的三个节点,实际上还是属于单点,只是为了让大家熟悉了理解MGR集群创建的整个过程,生产环境请不要按这种方式操作。

容器环境的准备

如果我们的操作系统上还没有安装Docker运行时环境的,可以参考我写的另两篇文章

  • 【Ubuntu 22.04下Docker安装(最全指引)】
  • 【Mac OS下Docker的安装与配置】

准备工作

  • 创建容器网络
  • 创建工作目录

创建容器网络

#创建容器网络,并指定subnet
docker network create --subnet=172.20.0.0/16 mysql-mgr#检查容器网络
vian@txzq1899-ubuntu:~$ docker network inspect mysql-mgr 
[{"Name": "mysql-mgr","Id": "6d33e30330ed998c7ceb26971455479d5642d04e015bcfbab720733f9655bd80","Created": "2024-05-07T17:38:32.975808257+08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "172.20.0.0/16"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""}
]

创建工作目录
工作目录主要是用于存放脚本,初始配置文件,容器数据卷,用户名&密码文件

vian@txzq1899-ubuntu:~/ws/mysql$ ll
总计 24
drwxrwxr-x  6 vian vian 4096  58 01:34 ./
drwxrwxr-x 10 vian vian 4096  58 09:40 ../
drwxrwxr-x  5 vian vian 4096  58 01:42 conf/
drwxrwxr-x  5  999 vian 4096  58 01:27 data/
drwxrwxr-x  2 vian vian 4096  58 01:45 script/
drwxrwxr-x  2 vian vian 4096  58 09:50 secrets/vian@txzq1899-ubuntu:~/ws/mysql/secrets$ ll
总计 16
drwxrwxr-x 2 vian vian 4096  58 09:50 ./
drwxrwxr-x 6 vian vian 4096  58 01:34 ../
-rw-rw-r-- 1 vian vian   11  57 10:38 mysql-root
-rw-rw-r-- 1 vian vian   11  57 10:38 repl-user

脚本源码
本文中所有的操作步骤我都已经进行了脚本化,大家可以上我的github repo上自行下载相关的脚本。

地址如下:MySQL Containerize

https://github.com/TXZQ1899/containerize.git

STEP1、初始化Mysql实例

  • 创建三个MySQL容器
  • 映射数据卷
  • 分配IP地址

以下是脚本源码

  • 容器IP与准备工作中的子网是对应上的。
  • 映射了数据卷
    • 数据库文件
    • 密码文件

我们看到,第一次创建和启动容器是没有使用自定义的my.cnf配置文件的,采用默认方式启动3个MySQL容器节点。

#!/bin/bash# MySQL的docker容器名
container_names=("mysql-1" "mysql-2" "mysql-3")# MySQL宿主机端口
host_ports=(3306 3307 3308)
host_ports_x=(13306 13307 13308)
container_ips=("172.20.0.11" "172.20.0.12" "172.20.0.13")# 批量创建MySQL容器
for i in ${!container_names[@]}
dodocker run --name ${container_names[$i]} \--net mysql-mgr --ip ${container_ips[$i]} \-d -p ${host_ports[$i]}:3306 -p ${host_ports_x[$i]}:33061 \-v ~/ws/mysql/data/${container_names[$i]}:/var/lib/mysql \-v ~/ws/mysql/secrets:/run/secrets \-e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql-root \mysql:latestecho "Mysql container : ${container_names[$i]} has been created!"
doneecho "Step 1: MySQL Cluster Initialization Completed!"

STEP2、创建MGR配置文件

这里只是准备三个节点的配置文件,用于第四步中更新配置文件。同样也是使用脚本来批量创建。

vian@txzq1899-ubuntu:~/ws/mysql/conf$ tree
.
├── mysql-1
│   └── my.cnf
├── mysql-2
│   └── my.cnf
└── mysql-3└── my.cnf3 directories, 3 files

请注意源码中,这个组名是一个UUID,大家自行生成即可。

group_replication_group_name="bc946766-0c46-11ef-a8e2-0242ac110002" 

脚本源码如下:

#!/bin/bash# mysql安装路径
mysql_base_path=~/ws/mysql/conf/rm -rf ~/ws/mysql/conf/*# 节点数量和起始IP地址
node_count=3
base_ip="172.20.0.11"# 将起始IP地址分割成数组
IFS='.' read -ra ADDR <<< "$base_ip"# 计算最后一个IP片段的起始数字
last_octet=${ADDR[3]}# 创建配置文件
for ((i=1; i<=node_count; i++))
do# 计算每个节点的IP地址ip="172.20.0.$((last_octet + i - 1))"# MySQL配置路径conf_path=${mysql_base_path}/mysql-${i}# 创建目录mkdir -p ${conf_path}# 将节点配置写入对应的my.cnf文件cat > ${conf_path}/my.cnf <<EOF
[mysqld]
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"server_id=${i}
gtid_mode=ON
enforce_gtid_consistency=ONplugin_load_add='group_replication.so'group_replication_group_name="bc946766-0c46-11ef-a8e2-0242ac110002" 
group_replication_start_on_boot=off
group_replication_local_address= "${ip}:33061"
group_replication_group_seeds= "172.20.0.$((last_octet)):33061,172.20.0.$((last_octet + 1)):33061,172.20.0.$((last_octet + 2)):33061"
group_replication_bootstrap_group=off
EOFdone
tree ~/ws/mysql/conf 
echo "MGR配置文件创建完毕!"

STEP3、安装Group Replication插件

这一步是要在三个MySQL实例上安装group replication插件,需要在每一个MySQL实例的命令行执行安装指令。

mysql > install PLUGIN group_replication SONAME 'group_replication.so';

因为我们的MySQL实例部署在docker 容器中,所以需要通过docker exec 这个命令在容器内执行相应的SQL语句。

#mysql-1 是容器名称
#mysql,是容器中的mysql客户端, 
#-u,-p mysql用户名,密码
#-e "sql command;",要执行的SQL
docker exec -it mysql-1 \
mysql -uroot -phelloworld -e "sql command;"

第三步的脚本源码如下:

#!/bin/bash# 用户信息设置
CONTAINER_NAMES=("mysql-1" "mysql-2" "mysql-3")# 从环境变量读取root密码
MYSQL_ROOT_PASSWORD=$(<~/ws/mysql/secrets/mysql-root)# 在每个MySQL实例上执行创建用户和设置权限的步骤
for CONTAINER in "${CONTAINER_NAMES[@]}"
dodocker exec -it $CONTAINER mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "install PLUGIN group_replication SONAME 'group_replication.so';"
doneecho "Done"

STEP4、更新MySQL配置文件

这一步比较简单,就是需要将第二步创建的配置文件,复制到容器中mysql配置文件存储的地方。

主要通过docker cp命令实现

docker cp /path/to/file/filename container_name:/path/in/container

批量更新脚本源码如下 :

#!/bin/bash# MySQL的docker容器名
container_names=("mysql-1" "mysql-2" "mysql-3")# 批量更新MGR配置文件
for i in ${!container_names[@]}
dodocker cp ~/ws/mysql/conf/${container_names[$i]}/my.cnf ${container_names[$i]}:/etc/mysql/conf.d 
doneecho "Configuration update complete!"

STEP5、重启MySQL实例

更新完配置文件后需要批量重启MySQL实例,这个也比较简单,通过docker restart container_name来实现
脚本源码如下:

#!/bin/bash# MySQL的docker容器名
container_names=("mysql-1" "mysql-2" "mysql-3")# 批量重启MySQL容器
for i in ${!container_names[@]}
dodocker restart ${container_names[$i]} 
doneecho "Container restart is complete!"

STEP6、创建Replication用户

这一步需要创建用于Replication的用户,授权等操作。和第三步类似,也是通过docker exec在容器内执行相应SQL语句。

具体的SQL语句参考官方文档:

  • 【User Credentials For Distributed Recovery】

脚本源码如下 :

#!/bin/bash# 用户信息设置
USER='rpl_user'
PASSWORD=$(<~/ws/mysql/secrets/repl-user)
CONTAINER_NAMES=("mysql-1" "mysql-2" "mysql-3")# 从环境变量读取root密码
MYSQL_ROOT_PASSWORD=$(<~/ws/mysql/secrets/mysql-root)# 在每个MySQL实例上执行创建用户和设置权限的步骤
for CONTAINER in "${CONTAINER_NAMES[@]}"
dodocker exec -it $CONTAINER mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "SET SQL_LOG_BIN=0;CREATE USER IF NOT EXISTS '$USER'@'%' IDENTIFIED BY '$PASSWORD';GRANT REPLICATION SLAVE, CONNECTION_ADMIN, BACKUP_ADMIN ON *.* TO '$USER'@'%';GRANT GROUP_REPLICATION_STREAM ON *.* TO '$USER'@'%';FLUSH PRIVILEGES;SET SQL_LOG_BIN=1;CHANGE REPLICATION SOURCE TO SOURCE_USER='$USER',SOURCE_PASSWORD='$PASSWORD' FOR CHANNEL 'group_replication_recovery';"
doneecho "Done"

STEP7、设置和开启组复制

这一步就是设置和开启组复制功能,也是需要在数据库中执行相应的SQL指令。

开启组复制的SQL指令参考官方文档:

  • 【Bootstrapping the Group】

MySQL官方称之为引导,指引中有明确讲到:引导应该只由单个服务器完成,即启动群组的服务器,并且只能执行一次。

The process of starting a group for the first time is called bootstrapping. You use the group_replication_bootstrap_group system variable to bootstrap a group. The bootstrap should only be done by a single server, the one that starts the group and only once.

所以最终的脚本如下:

#!/bin/bash# 用户信息
USER='rpl_user'
PASSWORD=$(<~/ws/mysql/secrets/repl-user)
MYSQL_ROOT_PASSWORD=$(<~/ws/mysql/secrets/mysql-root)container_names=("mysql-1" "mysql-2" "mysql-3") # 所有容器的名称for CONTAINER in "${container_names[@]}"
doif [ "$CONTAINER" == "mysql-1" ]; then# 如果是master容器,执行bootstrapping命令echo "Initializing the master ($CONTAINER)..."docker exec -it $CONTAINER mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "SET GLOBAL group_replication_bootstrap_group=ON;START GROUP_REPLICATION USER='$USER', PASSWORD='$PASSWORD';SET GLOBAL group_replication_bootstrap_group=OFF;"else# 如果是其它容器,则加入已有集群echo "Adding the slave ($CONTAINER) to the group..."docker exec -it $CONTAINER mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "START GROUP_REPLICATION USER='$USER', PASSWORD='$PASSWORD';"fi
doneecho "Group replication started for all nodes."

STEP8、检查MGR集群状态

这一步就是检查一下MGR集群的状态,也是通过执行MySQL指令的形式

脚本源码如下:

#!/bin/bash
MYSQL_ROOT_PASSWORD=$(<~/ws/mysql/secrets/mysql-root)
docker exec -it mysql-1 mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "SELECT * FROM performance_schema.replication_group_members;"

MySQL-MGR-Cluster搭建完成

大家可以在主库上进行一些数据库操作,看看从库是否能实现数据同步。
也可以通过docker stop关闭mysql-1节点(Master),看看MGR机制是否能完成主从的切换。

vian@txzq1899-ubuntu:~/ws/mysql/script$ docker ps
CONTAINER ID   IMAGE          COMMAND                   CREATED        STATUS        PORTS                                                                                                 NAMES
84531a0b4f0d   mysql:latest   "docker-entrypoint.s…"   12 hours ago   Up 12 hours   33060/tcp, 0.0.0.0:3308->3306/tcp, :::3308->3306/tcp, 0.0.0.0:13308->33061/tcp, :::13308->33061/tcp   mysql-3
f91d0848fac2   mysql:latest   "docker-entrypoint.s…"   12 hours ago   Up 12 hours   33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp, 0.0.0.0:13307->33061/tcp, :::13307->33061/tcp   mysql-2
e7f3589bdeac   mysql:latest   "docker-entrypoint.s…"   12 hours ago   Up 12 hours   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp, 0.0.0.0:13306->33061/tcp, :::13306->33061/tcp   mysql-1
vian@txzq1899-ubuntu:~/ws/mysql/script$ vian@txzq1899-ubuntu:~/ws/mysql/script$ ./8.check-mgr-cluster-member-status.sh 
mysql: [Warning] Using a password on the command line interface can be insecure.
+---------------------------+--------------------------------------+--------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST  | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+--------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | 122dd904-0c97-11ef-a155-0242ac14000b | e7f3589bdeac |        3306 | ONLINE       | PRIMARY     | 8.4.0          | XCom                       |
| group_replication_applier | 125ddf4e-0c97-11ef-a1fb-0242ac14000c | f91d0848fac2 |        3306 | ONLINE       | SECONDARY   | 8.4.0          | XCom                       |
| group_replication_applier | 12a8bbac-0c97-11ef-a14f-0242ac14000d | 84531a0b4f0d |        3306 | ONLINE       | SECONDARY   | 8.4.0          | XCom                       |
+---------------------------+--------------------------------------+--------------+-------------+--------------+-------------+----------------+----------------------------+#所有的脚本如下,只需要按次序依次执行即可。
vian@txzq1899-ubuntu:~/ws/mysql/script$ ll
总计 56
drwxrwxr-x 2 vian vian 4096  58 01:45 ./
drwxrwxr-x 6 vian vian 4096  58 01:34 ../
-rwxr-xr-x 1 vian vian  766  58 01:26 1.init-cluster.sh*
-rwxr-xr-x 1 vian vian 1210  58 01:45 2.init-conf.sh*
-rwxrwxr-x 1 vian vian  450  57 22:52 3.install-gr-plugin.sh*
-rwxr-xr-x 1 vian vian  300  58 01:11 4.update-mgr-conf.sh*
-rwxr-xr-x 1 vian vian  260  58 01:13 5.restart-cluster.sh*
-rwxrwxr-x 1 vian vian  861  57 22:52 6.create-repl-user.sh*
-rwxr-xr-x 1 vian vian  989  58 00:58 7.setup-group-replication.sh*
-rwxr-xr-x 1 vian vian  207  58 01:41 8.check-mgr-cluster-member-status.sh*
-rwxr-xr-x 1 vian vian  118  57 17:25 cleanup.sh*
-rwxr-xr-x 1 vian vian   88  57 17:07 remove-cluster.sh*
-rwxr-xr-x 1 vian vian  228  58 01:37 start-cluster.sh*
-rwxr-xr-x 1 vian vian  228  58 01:38 stop-cluster.sh*

留一个思考题,MGR只是保证了MySQL集群的高可用,MGR能自动进行主从的切换,但我们的应用是感知不到这个动作的发生的。一般来讲应用通过域名连接到这个MySQL-MGR-集群,域名又是指向的哪里?如何保证应用能准确的连接到新的主库上呢?

关注我的公众号

欢迎大家关注、点赞、转发,一起交流软件开发、架构设计、云原生技术。
TXZQ聊IT技术与架构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3019568.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

数字人制作原理:捕捉、建模与合成

在感知系统中&#xff0c;我们与外部合作者一起创建逼真的 3D 人类&#xff0c;其行为可以像虚拟世界中的真实人类一样。这项工作在今天有许多实际应用&#xff0c;并且对于元宇宙的未来至关重要。但是&#xff0c;在感知系统中&#xff0c;我们的目标是科学的——通过重现人类…

【前端Vue】——初识Vue.js

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…

Vue线上环境禁止打印console.log

当我们在开发项目时&#xff0c;我们会使用大量的console.log&#xff0c;这样方便我们去调试&#xff0c;但是当正常上线后&#xff0c;在生产环境&#xff0c;我们是不喜欢打印的信息暴露在浏览器控制台的。 这时候我们可以通过一行代码解决&#xff1a; 在main.js文件中添加…

首个ICLR时间检验奖出炉,机器学习大牛Max Welling和OpenAI创始团队成员Diederik Kingma获奖

国际表征学习大会&#xff08;ICLR&#xff09;是机器学习领域的一个学术会议&#xff0c;每年一次&#xff0c;通常在每年四月底或五月初举行。会议包括特邀演讲以及经评审论文的口头和海报展示。 ICLR 由 Yann LeCun&#xff08;杨立昆&#xff09;和 Yoshua Bengio 两位图灵…

基于opencv的车辆统计

车辆统计&#xff09; 一、项目背景二、整体流程三、常用滤波器的特点四、背景减除五、形态学开运算闭运算 六、项目完整代码七、参考资料 一、项目背景 检测并识别视频中来往车辆的数量 最终效果图&#xff1a; 二、整体流程 加载视频图像预处理&#xff08;去噪、背景减除…

【Elasticsearch运维系列】Elasticsearch7.12.1启动指定版本JDK:你学废了吗?

一、背景 一套生ES集群&#xff0c;版本为7.12.1&#xff0c;近期频繁告警&#xff0c;频繁出现索引分片异常&#xff0c;索引状态异常&#xff0c;导致应用无法正常写入ES&#xff0c;另外&#xff0c;也经常出现节点掉问题。通过分析相关ES日志&#xff0c;显示和当前JAVA G…

【微机原理及接口技术】8086/8088系统时序和微机总线

【微机原理及接口技术】8086/8088系统时序和微机总线 文章目录 【微机原理及接口技术】8086/8088系统时序和微机总线前言一、8086/8088引脚信号和工作模式1.8088 的两种组态模式2.最小组态的引脚信号3.最小组态的总线形成4.最大组态的总线形成 二、8086/8088典型时序1.三种周期…

人工智能|推荐系统——工业界的推荐系统之序列建模

一、LastN特征 LastN&#xff1a;⽤户最近的&#x1d45b; 次交互&#xff08;点击、点赞等&#xff09;的物品ID。 对LastN物品ID做embedding&#xff0c;得到 &#x1d45b; 个向量。 把 &#x1d45b; 个向量取平均&#xff0c;作为⽤户的⼀种特征。 适⽤于召回双塔模型、…

Python 全栈体系【四阶】(四十一)

第五章 深度学习 九、图像分割 1. 基本介绍 1.1 什么是图像分割 图像分割&#xff08;Segmentation&#xff09;是图像处理和机器视觉一个重要分支&#xff0c;其目标是精确理解图像场景与内容。图像分割是在像素级别上的分类&#xff0c;属于同一类的像素都要被归为一类&a…

论文查重率高,有什么办法降重吗?

现在大部分学校已经进入到论文查重降重的阶段了。如果查重率居高不下&#xff0c;延毕的威胁可能就在眼前。对于即将告别校园的学子们&#xff0c;这无疑是个噩梦。四年磨一剑&#xff0c;谁也不想在最后关头功亏一篑。 查重率过高&#xff0c;无非以下两种原因。要么是作为“…

Vue3基础(API风格、监听、生命周期、toRefs、组件通信、插槽、axios,Promise)

Vue3基础&#xff08;API风格、监听、生命周期、toRefs、组件通信、插槽、axios&#xff0c;Promise&#xff09; 目录 Vue3基础&#xff08;API风格、监听、生命周期、toRefs、组件通信、插槽、axios&#xff0c;Promise&#xff09;API 风格选项式API组合式API混合式 事件监听…

DDD架构学习

文章目录 领域建模事件风暴四色建模法 DDD名称解析领域子域核心域通用域支撑域限界上下文战术设计实体值对象聚合和聚合根工厂资源库领域服务领域事件 DDD代码的分层名词解析实体值对象聚合根领域服务领域事件 VO&DTO&DO&PO博客 领域建模 领域驱动设计的核心在于领…

互联网产品为什么要搭建会员体系?

李诞曾经说过一句话&#xff1a;每个人都可以讲5分钟脱口秀。这句话换到会员体系里面同样适用&#xff0c;每个人都能聊点会员体系相关的东西。 比如会员体系属于用户运营的范畴&#xff0c;比如怎样用户分层&#xff0c;比如用户标签及CDP、会员积分、会员等级、会员权益和付…

手拿滑块撕瑞数 我叫超弟你记住!!什么腾讯滑块、数美、顶象、阿里通通拿下!最新版2024.5.8号

本文章非标题党&#xff0c;可提供主流验证码解决方案及成品、补环境框架、逆向教学 不论你是逆向小白、亦或是需求方都可通过本文章各取所需&#xff01;&#xff01; 废话不多说&#xff0c;老规矩&#xff0c;附上腾讯旗下验证码程序运行图&#xff0c;附程序运行时间 &…

【稳定检索|EI会议】✅2024年食品科学与生物医学国际会议(ICFSBS 2024)✅

2024 International Conference on Food Science and Biomedical Sciences 一、大会信息 会议名称&#xff1a;2024年食品科学与生物医学国际会议会议简称&#xff1a;ICFSBS 2024收录检索&#xff1a;提交Ei Compendex,CPCI,CNKI,Google Scholar等会议官网&#xff1a;http:/…

揭秘SSL证书一年费用:网络安全预算规划指南

网络安全在数字化时代的重要性不言而喻&#xff0c;而SSL证书作为保护网站安全的关键工具&#xff0c;其费用问题自然成为了用户们关注的重点。本文旨在深入分析SSL证书的一年所需成本&#xff0c;帮助用户们合理规划自己的网络安全预算。 我们需要了解SSL证书的基本概念。SSL…

中国 Copilot 能在笔记本电脑上起飞吗?

AI PC 是 PC 的下一个进化体&#xff1f; 中国能打造出自己的 AI 研发助手吗&#xff1f; 企业如何构建 AI 竞争力&#xff1f; AI 时代&#xff0c;个体如何避免被取代&#xff1f; 如果你也有此困惑&#xff0c;那就锁定这场直播吧&#xff01; 视频号搜索【极狐GitLab】预约…

AI编码工具-通义灵码功能实测

AI编码工具-通义灵码功能实测 通义灵码功能介绍行级/函数级实时续写自然语言生成代码单元测试生成异常排错智能排查生成代码注释生成代码解释研发领域自由问答 在上一篇文章中&#xff0c;我介绍了通义灵码的功能以及支持的操作系统&#xff0c;主流IDE等&#xff0c;详细内容可…

web前端框架设计第八课-表单控件绑定

web前端框架设计第八课-表单控件绑定 一.预习笔记 1.v-model实现表单数据双向绑定 2.搜索数据的实现 3.全选案例实现1—JQ方法 4.单选案例实现 二.课堂笔记 三.课后回顾 –行动是治愈恐惧的良药&#xff0c;犹豫拖延将不断滋养恐惧

图数据库 之 Neo4j 与 AI 大模型的结合绘制知识图谱

引言 随着信息时代的到来&#xff0c;海量的文本数据成为了我们获取知识的重要来源。然而&#xff0c;如何从这些文本数据中提取出有用的信息&#xff0c;并将其以可视化的方式展示出来&#xff0c;一直是一个具有挑战性的问题。近年来&#xff0c;随着人工智能技术的发展&…