DCache >> DCache测试搭建

DCache >> DCache测试搭建文章目录 DCache 测试搭建简介背景支持平台特点组成安装部署 tars 框架依赖环境依赖安装 mysql 部署 tars 部署 DCache 部署项目待完善的问题 DCache 测试搭建简介背景 Dcache 使用腾讯 Tars 框架开发 属于分布式的 NoSQL 存储系统 数据存储在内存中 还可以连接后端 DB 做数据的持久化 支持平台 Linux 特点高性能存储引擎支持多种数据结构 如 key value

DCache测试搭建

简介

背景

Dcache使用腾讯Tars框架开发,属于分布式的NoSQL存储系统。数据存储在内存中,还可以连接后端DB做数据的持久化。

支持平台

Linux

特点

  • 高性能存储引擎
    • 支持多种数据结构,如:
      • key-value
      • k-k-row
      • list
      • set
      • zset
    • 支持数据持久化到后端DB
  • 集群模式
    • 高可用
    • 高扩展
    • 异地镜像
    • 就近接入
  • 通过名字访问
    • 支持同步、异步、单向RPC调用
  • 高效运维平台(提供WebUI)
    • 服务部署
    • 扩缩容
    • 迁移
    • 服务配置
    • 质量监控

组成

  • tars框架
  • 业务服务
    • KVCache模块
      • 存储key-value
    • MKVcache模块
      • k-k-row
      • list
      • set
      • zset
  • 公共基础服务
    • OptServer
    • ConfigServer
    • PropertyServer
    • DCache管理平台

安装部署

tars框架

依赖环境
  1. 操作系统
    • linux内核:2.6.18 or later
  2. C++语言框架依赖
    • gcc:4.8.2 or later
    • glibc-devel
    • bison:2.5 or later
    • flex:2.5 or later
    • cmake:2.8.8 or later
    • rapidjson:1.0.2
  3. tars框架运行依赖
    • mysql:5.6.5 or later
  4. web管理系统依赖
    • nvm:0.33.11 or later
    • node:8.11.3 or later
依赖安装
$ yum -y install gcc gcc-c++ cmake yasm glibc-devel flex bison ncurses-devel zlib-devel autoconf python-requests 
mysql部署
  1. 下载mysql源码包(5.6.44版本), 官方要求数据库版本不低于5.6.5。
$ wget "https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.44.tar.gz" 
  1. 安装 – 编译安装
# 创建普通用户 $ useradd -m -d /home/mysql mysql # 解压源码包 $ tar zxf mysql-5.6.44.tar.gz # 创建mysql安装目录, 并做软连接 $ mkdir /usr/local/mysql-5.6.44 $ ln -s /usr/local/mysql-5.6.44 /usr/local/mysql # 修改属主属组 $ chown mysql:mysql /usr/local/mysql-5.6.44 /usr/local/mysql # 切换到源码目录,编译安装 $ cd mysql-5.6.44 $ cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6.44 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_USER=mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci $ make && make install 
  1. mysql服务配置
# 删除原始数据目录, 在数据盘创建数据目录,进行软连 $ rm -rf /usr/local/mysql/data $ mkdir -p /data/mysql-data $ ln -s /data/mysql-data /usr/local/mysql/data # 修改属主属组 $ chown -R mysql:mysql /data/mysql-data /usr/local/mysql/data # 配置启动脚本 $ cd /usr/loca/mysql/ $ cp support-files/mysql.server /etc/init.d/mysql # 初始化数据库 $ rm -rf /etc/my.cnf $ yum -y install perl $ yum install -y perl-Module-Install.noarch $ perl scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql --pid-file=/var/run/mysql/mysql.pid --socket=/tmp/mysql.sock # 修改配置文件 $ vim /usr/local/mysql/my.cnf ''' [mysqld] # Remove leading # and set to the amount of RAM for the most important data # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. innodb_buffer_pool_size = 128M # Remove leading # to turn on a very important data integrity option: logging # changes to the binary log between backups. log_bin # These are commonly set, remove the # and set as required. basedir = /usr/local/mysql datadir = /usr/local/mysql/data # port = ..... # server_id = ..... socket = /tmp/mysql.sock bind-address={$your machine ip} # Remove leading # to set options mainly useful for reporting servers. # The server defaults are faster for transactions and fast SELECTs. # Adjust sizes as needed, experiment to find the optimal values. join_buffer_size = 128M sort_buffer_size = 2M read_rnd_buffer_size = 2M sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES ''' # 启动服务,设置开机自启 $ service mysql start $ chkconfig mysql on 
  1. 设置环境变量
$ echo -e 'PATH=$PATH:/usr/local/mysql/bin\nexport PATH' > /etc/profile.d/mysql_env.sh $ source /etc/profile 
  1. 修改root初始密码, 授权登录
$ mysqladmin -u root password 'root@appinside' $ mysql -uroot -p mysql> grant all on *.* to "root"@"%" identified by 'root@appinside' with grant option; mysql> grant all on *.* to "root"@"localhost" identified by 'root@appinside' with grant option; mysql> grant all on *.* to "root"@"10.80.137.193" identified by 'root@appinside' with grant option; mysql> grant all on *.* to "root"@"platformxxxx.cdn.idc.com" identified by 'root@appinside' with grant option; 

tars 内部程序通过’root@{主机名}’登录数据库,需要授权。主机名可以通过/etc/hosts查看。

  1. 添加mysql库路径
$ vim /etc/ld.so.conf /usr/local/mysql/lib/ ldconfig 
  1. mysql主从配置

测试环境暂不需要,待正式部署后再做补充。#TODO

tars部署
  1. git clone Tars
# 使用递归方式clone $ git clone https://github.com/TarsCloud/Tars.git --recursive 
  1. 使用一键部署脚本
$ cd Tars/deploy # 修改数据库信息 $ vim comm.propertys host = 10.80.137.139 port = 3306 pwd = root@appinside # 授权tars用户权限 mysql> grant all on *.* to 'tars'@'%' identified by 'tars2015' with grant option; mysql> grant all on *.* to 'tars'@'localhost' identified by 'tars2015' with grant option; mysql> grant all on *.* to 'tars'@'platformxxxx.cdn.idc.com' identified by 'tars2015' with grant option; # 执行脚本 $ python deploy.py all 
  1. deploy.py脚本在执行过程中,会报错tars用户的’Access denied’, 但是在部署脚本中有tars用户的授权操作。目前观察问题现象是授权未执行成功,且没有报错,具体原因未查明,先手动授权预防报错。
  2. 该执行脚本不具有幂等性,不能重复执行。若必须重新执行的情况,需要修改脚本,注释掉已完成的函数部分,还要根据情况对应修改脚本。
  3. 脚本执行完成后,会自启动web服务,若端口冲突,需要修改/usr/local/app/web/config/webConf.js文件,将port端口号修改。详细操作可以见下面的步骤。
  1. web启停、web切换dcache-alpha分支,以及端口冲突问题解决
 切换DCache的web分支。 目前web管理界面,DCache服务暂时只提供体验版,需要在部署过程中手动切换分支(后期可以考虑修改部署脚本,直接指定tag来clone)。 # 备份文件 config/webConf.js, config/tars.conf $ cp config/webConf.js ~ $ cp config/tars.conf ~ $ cp package-lock.json ~ # 暂存当前master分支, 切换alpha分支。 $ rm -rf package-lock.json $ git stash $ git checkout -b dcache-alpha origin/dcache-alpha # 恢复文件 $ cp ~/webConf.js config/webConf.js $ cp ~/tars.conf config/tars.conf # 端口冲突解决 $ vim config/webConf.js webConf: { port: 33000, //服务启动端口, 默认3000 loggerPath: path.join(__dirname, '../log'), //本地日志的目录 logFileKeepDays: '1', //日志保留时间 defaultLanguage: 'cn', //cn 或 en ,用户默认的语言环境 }, # 修改dcache配置 $ vim config/dcacheConf.js module.exports = { enableDcache: true //启动dcache界面,默认false } # 从新安装npm依赖包 $ npm install --registry=https://registry.npm.taobao.org # web启停 # 启动web(prd为脚本名,详细查看package.json) $ npm run prd # 停止所有web $ pm2 kill # 使用别名启停单个web $ pm2 stop tars-node-web $ pm2 start tars-node-web # 命令行启动界面 ┌───────────────┬────┬─────────┬──────┬───────┬────────┬─────────┬────────┬──────┬────────────┬──────┬──────────┐ │ App name │ id │ version │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │ ├───────────────┼────┼─────────┼──────┼───────┼────────┼─────────┼────────┼──────┼────────────┼──────┼──────────┤ │ tars-node-web │ 0 │ 0.1.0 │ fork │ 29648 │ online │ 0 │ 27h │ 0.5% │ 103.1 MB │ root │ disabled │ └───────────────┴────┴─────────┴──────┴───────┴────────┴─────────┴────────┴──────┴────────────┴──────┴──────────┘ # Web端访问地址 http://10.80.137.193:33000 # tars核心或普通服务端口占用修改 1. 登录web端界面 2. 依次点击 -> 需要修改的服务 -> 服务管理 -> 管理Servants -> 编辑 -> 绑定地址框 -> 修改'-p'后参数 -> 确认 3. 重启 -> 服务管理 -> 重启按钮 
  1. Tars用户体系模块使用

登录和管理权限模块,测试环境未部署,待补充。#TODO [官方文档]

  1. tars服务手动启停
# 启动基础服务 $ cd /usr/local/app/tars $ tarsregistry/util/start.sh $ tarsAdminRegistry/util/start.sh $ tarsnode/util/start.sh $ tarsconfig/util/start.sh $ tarspatch/util/start.sh # 停止基础服务 $ cd /usr/local/app/tars $ tarsregistry/util/stop.sh $ tarsAdminRegistry/util/stop.sh $ tarsnode/util/stop.sh $ tarsconfig/util/stop.sh $ tarspatch/util/stop.sh 
  1. tarsnode配置监控(crontab)
* * * * * /usr/local/app/tars/tarsnode/util/monitor.sh 
  1. 业务服务节点扩容

主要涉及tarsnode服务的手动安装,测试环境暂无需要,后续补充。#TODO

  1. 放张web端效果图
    image

Tars框架部分,部署完成。

DCache部署

1. 准备工作

# 克隆DCache项目 $ git clone https://github.com/Tencent/DCache.git # 下载第三方依赖代码 $ cd src/thirdParty $ chmod +x thirdparty.sh $ ./thirdparty.sh # 编译 # [坑]自动部署脚本将tarscpp编译到framework目录下,与DCache项目指定的路径不一致 # 需要在Tars/cpp目录下从新编译。(说明DCache是按照tarscpp子项目路径规则来指定的,没毛病。) $ cd Tars/cpp/ $ cmake . && make && make install # 编译DCache服务 $ cd src/ $ make release $ make all # 分别进入以下目录,生成发布包 $ cat dir_list.txt src/OptServer/ src/ConfigServer/ src/PropertyServer/ src/Router/ src/Proxy/ src/KVCacheServer/ src/MKVCacheServer/ $ cat dir_list.txt |while read line; do cd ${line}; make tar; cd -; done # 将所有tar包都下载到本地 # 几种方式(看个人喜好) - sz - wget (python -m SimpleHTTPServer 8080) - scp - git 

2. 公共服务部署

  • 2.1 安装OptServer
 数据库环境初始化 # 授权账户 mysql> grant all on *.* to 'dcache'@'%' identified by 'dcache2019' with grant option; mysql> grant all on *.* to 'dcache'@'localhost' identified by 'dcache2019' with grant option; mysql> grant all on *.* to 'dcache'@'platformxxxx.cdn.idc.com' identified by 'dcache2019' with grant option; mysql> flush privileges; # 创建数据库 $ vim src/OptServer/sql/exec-sql.sh db_install_ip="10.80.137.193" root="root@appinside" mysql -h $db_install_ip -uroot -p$root -e "drop database if exists db_dcache_relation; create database db_dcache_relation" mysql -h $db_install_ip -uroot -p$root --default-character-set=utf8 db_dcache_relation < db_dcache_relation.sql 

以下为服务部署,图片及说明大部分来源于官方文档。

image

1 ) 在Tars管理平台主页点击“运维管理”,然后填写必要的信息,如下图:

image

image

2 ) 上传发布包

image

根据上图数字序号,依次点击,得到如下提示框:

image

点击“上传发布包”,在新的提示页面上传DCacheOptServer.tgz发布包,得到如下页面:

image

点击“发布版本”下的输入框,选择目标发布包,然后点击“发布”,如发布成功,会显示如下页面:

image

3 ) 添加配置文件

image

 
  
# admin registry obj AdminRegObj = tars.tarsAdminRegistry.AdminRegObj charset = utf8 dbname = db_tars dbhost = 10.80.137.193 dbport = 3306 dbuser = root dbpass = root@appinside charset = utf8 dbname = db_dcache_relation dbhost = 10.80.137.193 dbport = 3306 dbuser = dcache dbpass = dcache2019 # 创建路由数据库的用户名和密码 dbuser = router_dcache dbpass = router_dcache_2019 # 发布服务线程数 ThreadCount = 5 # 通知node下线服务超时时间(秒) Timeout = 20 # 下线服务备份目录 BakPath = /data/dcacheuninstall/ # 下线服务线程数 ThreadCount = 2

根据上图,依次点击,得到下图:

image

其中文件名称填“DCacheOptServer.conf”, 文件内容按照上面格式填写

4 ) 重启OptServer

image

根据上图,依次点击,重启OptServer,重启成功后,“当前状态”从“Off”变成“Active”,如下图所示:

image

  • 2.2 ConfigServer部署

安装ConfigServer的步骤和安装OptServer的步骤类似,除了不需要创建数据库外

添加配置时,可以参考DCache服务配置说明。

以下为我的测试配置示例:

 config #db_dcache_relation的数据库信息 
  
dbhost=10.80.137.193 dbpass=dcache2019 dbuser=dcache dbname=db_dcache_relation charset=utf8 dbport=3306
  • 2.3 安装PropertyServer

以下为我的测试配置示例:

 
  
Sql=CREATE TABLE `${TABLE}` (`stattime` timestamp NOT NULL default CURRENT_TIMESTAMP,`f_date` date NOT NULL default '1970-01-01',`f_tflag` varchar(8) NOT NULL default '',`app_name` varchar(20) default NULL,`module_name` varchar(50) default NULL,`group_name` varchar(100) default NULL,`idc_area` varchar(10) default NULL,`server_status` varchar(10) default NULL,`master_name` varchar(128) NOT NULL default '',`master_ip` varchar(16) default NULL,`set_name` varchar(15) NOT NULL default '',`set_area` varchar(15) NOT NULL default '',`set_id` varchar(15) NOT NULL default '',`value1` varchar(255) default NULL,`value2` varchar(255) default NULL,`value3` varchar(255) default NULL,`value4` varchar(255) default NULL,`value5` varchar(255) default NULL,`value6` varchar(255) default NULL,`value7` varchar(255) default NULL,`value8` varchar(255) default NULL,`value9` varchar(255) default NULL,`value10` varchar(255) default NULL,`value11` varchar(255) default NULL,`value12` varchar(255) default NULL,`value13` varchar(255) default NULL,`value14` varchar(255) default NULL,`value15` varchar(255) default NULL,`value16` varchar(255) default NULL,`value17` varchar(255) default NULL,`value18` varchar(255) default NULL,`value19` varchar(255) default NULL,`value20` varchar(255) default NULL,`value21` varchar(255) default NULL,`value22` varchar(255) default NULL,`value23` varchar(255) default NULL,`value24` varchar(255) default NULL,`value25` varchar(255) default NULL,`value26` varchar(255) default NULL,`value27` varchar(255) default NULL,`value28` varchar(255) default NULL,`value29` varchar(255) default NULL,`value30` varchar(255) default NULL,`value31` varchar(255) default NULL,`value32` varchar(255) default NULL,`value33` varchar(255) default NULL,`value34` varchar(255) default NULL,`value35` varchar(255) default NULL,KEY(`f_date`,`f_tflag`,`master_name`,`master_ip`),KEY `IDX_MASTER_NAME` (`master_name`),KEY `IDX_MASTER_IP` (`master_ip`),KEY `IDX_TIME` (`stattime`),KEY `IDX_F_DATE` (`f_date`))ENGINE\=MyISAM TbNamePre=t_property_realtime AppName=dcache_idc5min_147 dbhost=10.80.137.193 dbname=taf_property_147 dbuser=dcache dbpass=dcache2019 dbport=3306 charset=gbk charset=gbk dbname=db_dcache_relation dbhost=10.80.137.193 dbpass=dcache2019 dbport=3306 dbuser=dcache InsertInterval=1 BakCenterError = property1 BinLogErr = property2 BinLogSyn = property3 CacheError = property4 Chunks/OnceElement = property5 BackUpObjAdapter.connectRate = property6 BackUpObjAdapter.queue = property7 BinLogObjAdapter.connectRate = property8 BinLogObjAdapter.queue = property9 CacheObjAdapter.connectRate = property10 CacheObjAdapter.queue = property11 RouterClientObjAdapter.connectRate = property12 RouterClientObjAdapter.queue = property13 WCacheObjAdapter.connectRate = property14 WCacheObjAdapter.queue = property15 asyncqueue = property16 memsize = property17 DataMemUsedRatio = property18 DbError = property19 DbException = property20 DirtyNum = property21 DirtyRatio = property22 ElementCount = property23 Exception = property24 HitCount = property25 MemSize = property26 getBatchCount = property27 setBatchCount = property28 MKMemUsedRatio = property29 eraseCount = property30 eraseCountUnexpire = property31 asyncqueue0 = property32 Jmem0DataUsedRatio = property33 Jmem1DataUsedRatio = property34 ColdDataRatio = property35 expireCount = property36 OnlyKeyCount = property37 BigChunk = property38

3. DCache管理平台安装

# 修改web配置文件(前面已经做过了) $ cat /usr/local/app/web/config/dcacheConf.js # 安装 tars-dcache 模块 $ cd /usr/local/app/web/ $ npm install tars-dcache --save # 新建 db_cache_web 数据库, 并执行 Tars web service 项目sql文件夹下的db_cache_web.sql脚本,创建DCache web所需要的表。 mysql> CREATE DATABASE db_cache_web; mysql> use db_cache_web; mysql> source sql/db_cache_web.sql; # 启动或者重启管理平台即可在管理平台看到 Dcache 管理平台的入口。 $ pm2 kill $ npm run prd 

4. 创建DCache应用

DCache创建应用操作

  • 上传发布包
  • 上线模块
  • 模块配置

名词解释:

  • 模块:可以理解为mysql中table表的概念,需要创建对应模块来存储数据。两种Cache模块对应功能,上面已有说明不再赘述。
  • 应用:既多个模块的集合,该应用下的所有模块共享Proxy和Router服务,可以理解为mysql中db的概念。
  • 4.1 发布包上传

上传Proxy,Router,Cache对应的发布包是部署对应服务的前提。

1 ) Proxy发布包上传

image

依次点击,然后在弹出的提示框页面选择Proxy服务的发布包,上传。点击“默认”,将该发布包设置为Proxy服务的默认发布包,如下图:

image

2 ) Router发布包上传

Router发布包的上传和Proxy发布包的上传步骤相同。

3 ) Cache发布包上传

Cache发布包的上传和Proxy发布包上传步骤类似,只不过Cache有两种不同类型(KVCache和MKVCache)的发布包(本地也需分目录保存包文件),在“上传提示框”页面要注意类型匹配,如下图:

image

上传完两种不同类型的发布包并分别设置为默认,得到下图:

image

  • 4.2 部署和发布Proxy和Router服务
    image

根据上图,依次点击“DCache”和“运维管理”,其中“应用”和“管理员”必填,可自定义,然后点击“创建应用”,得到下图:

image

在输入框填写相关信息,其余保持不变,点击“创建router、proxy服务”,得到下图:

image

确认填写无误后,点击“安装发布”,等待安装完成,结果如下图所示(先看个问题,稍后放图):

[坑] 在创建router、proxy服务环节,数据库的用户名和密码我采用之前创建的user: dcache, pwd: dcache2019 这一套。然后当点击安装发布时,出现以下报错:

image

从报错上来看,是服务访问数据库时被denied。这让我很疑惑,dcache账户明明已经做过授权。再仔细一看发现这里报错的账户是’router_dcache’,并不是我输入的用户名。难道程序做了其他操作给用户名加上了router前缀?

带着疑惑,再在数据库创建router_dcache用户并授权,密码使用与dcache相同的密码再次执行,结果仍然报错。

通过排查mysql的general log,服务确实是通过router_dcache这个用户访问的,那问题可能就出在,这个用户使用的密码也与前面输入的不一致。

安装完成图如下:

image

  • 4.3 上线一个KVCache模块
    image

按照上图箭头依次点击,“应用”选择在部署和发布Proxy和Router服务创建的应用名称,“cache类型”选择KVCache,所填信息确认无误后,点击“下一步”进入“模块配置”步骤,如下图:

image

填写必要信息之后,点击“下一步”,进入“服务配置”步骤,如下图:

image

image

再次确认信息填写无误,点击“安装发布”,等待服务发布完成。刷新管理平台主页,左侧目录树出现此模块信息,如下图:

image

  • 4.4 上线一个MKVCache模块

步骤和部署和发布KVCache类似,参考即可

  • 4.5 Cache配置管理
    image

按照上图箭头依次点击,可添加配置项。

  • 4.6 模块和单节点的配置管理

image

按照上图箭头依次点击,可在该页面上修改和添加配置。该页面的配置管理分两种类型:针对模块所有节点的配置管理和针对模块特定节点的配置管理。

项目待完善的问题

初步接触之后,比较关心下面两个问题的后续发展。

  1. DbAccess对接后端DB文档,目前官方未能提供。
  2. 项目语言支持暂时只要C++。(可能在2019第四季度会支持一些其他语言版本)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176474.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午9:50
下一篇 2026年3月26日 下午9:51


相关推荐

  • docker加载配置文件重启服务导致pod重启

    docker加载配置文件重启服务导致pod重启

    2021年6月1日
    95
  • CreateFileMapping函数[通俗易懂]

    为指定文件创建或打开命名或未命名的文件映射对象。要为物理内存指定NUMA节点,请参阅CreateFileMappingNuma。语法HANDLEWINAPICreateFileMapping(_In_HANDLEhFile,_In_opt_LPSECURITY_ATTRIBUTESlpAttributes,_In_DWORDflProtect,…

    2022年4月6日
    58
  • MATLAB—-输入和输出

    MATLAB—-输入和输出文章目录 1 输入语句 1 1 输入数值或矩阵 1 2 输入字符串 2 输出语句 2 1 输出单个字段 2 2 输出多个字段 1 输入语句 1 1 输入数值或矩阵 value1 input 请输入一个数值 value2 input 请输入一个矩阵 1 2 输入字符串输入字符串 需要加第二个参数 s string input 请输入一个字符串 s 2 输出语句使用 disp 函数可以输出 输出多个字段时 需要将多个字段转

    2025年7月2日
    4
  • moya + RxSwift 进行网络请求

    moya + RxSwift 进行网络请求1.关于moya如在OC中使用AFNetworking一般,Swift我们用Alamofire来做网络库.而Moya在Alamofire的基础上又封装了一层:官方说moya有以下特性(我也就信了):编译时检查正确的API端点访问.使你定义不同端点枚举值对应相应的用途更加明晰.提高测试地位从而使单元测试更加容易.2.开始1.创建枚举API就像这样:enumAPIManager{c

    2025年7月1日
    6
  • MongoVUE_Vue.js+Flask+MongoDB

    MongoVUE_Vue.js+Flask+MongoDBmongovue是mogodb的一个可视化操作工具,下面介绍一下这个工具的一些简单应用1首先进入连接的界面,在此页面中,选择+,则会进人数据库信息填写2此页面为数据库链接填写界面,name随便取一个,server,填写服务器的ip地址,port填写服务器端口号,后面则是填写密码和用户 3,正常链接后,则会显示相应的库,双击选择要连接的库4 点击右上角的fin

    2022年8月21日
    10
  • js二维码生成

    详细介绍可以查看API网站:http://code.ciaoca.com/javascript/qrcode/ (前端开发仓库)一、引入js文件&amp;lt;!– 第一步:引进js文件 –&amp;gt; &amp;lt;script type=”text/javascript” src=”js/jquery.min.js”&amp;gt; \ &amp;lt;script type=”text/java…

    2021年11月30日
    51

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号