0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Polardb数据库模拟控制智能家居测试案例

电子设计 2018-11-06 09:54 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Polardb 是阿里云研发的一种关系型数据库,与mysql完全兼容,而性能又是其6倍,具有高吞吐,低延迟等特性; 本测试通过模拟控制智能家居开关的终端场景,来体验polardb的性能;

本测试通过模拟控制智能家居开关的终端场景,来体验polardb的性能;

1、环境搭建

1.1 polardb配置

首先需要购买polardb,按照处理器和内存的性能不同,价格也不同,最低的配置为2核4G的polar.mysql.x2.medium规格,包月价格560RMB;

购买以后,就可以通过连接https://polardb.console.aliyun.com/,进入polardb控制台进行相关的配置;选择一个地域节点[如华东1],创建一个实例,然后选择一个集群列表,创建一个集群。创建好后,可以看到数据库类型为POLARDB (MySQL 5.6),付费类型和到期时间分别为包月和一个月的长度;在创建时配置好初始账号和密码就可以使用了;在集群页面,鼠标点击右侧的管理连接,进入集群信息页面,可以看到公网联接的地址,是用户账号名开始的连接,后面是mysql常用的端口号3306,记录下这个后面连接用的到;

集群连接地址 (公网) : mypolardb.mysql.polardb.rds.aliyuncs.com:3306 ,这里我的账号配置为mypolardb,所以这里以mypolardb开头;

在上面的白名单列表 中,点击后面的笔状修改按钮,将我们用来连接数据库的ecs 服务器地址添加到里面;这里我的服务器地址为47.94.219.162.

1.2 ECS服务器配置:

由于需要在web页面上进行结果测试,先安装nginx服务器,使用以下命令行进行安装:

sudo apt-get install nginx

安装好后,在浏览器中输入 ECS的地址[这里测试的是:47.94.219.162],可以看到nginx的欢迎界面,表示安装成功;

由于后面需要用php脚本程序开发,所以还需要安装php,在console窗口输入以下命令安装:

sudo apt-get install php*

安装好后,输入下面的命令修改nginx的配置:

sudo vi /etc/nginx/sites-available/default

将文件中的下面四段打开:

location ~ \.php$ {

include snippets/fastcgi-php.conf;

fastcgi_pass unix:/run/php/php7.0-fpm.sock;

}

保存退出,然后重启nginx:

service nginx restart

进入/var/www/html目录,创建一个php文件,测试是否php安装成功:

vi phpinfo.php

《?php phpinfo(); 》

在浏览器访问这个文件,如果可以看到相关的php信息,则表明php安装成功;

进入域名控制台,选择要解析的域名,点击解析连接,添加一条A记录,主机记录起一个容易记住的名字,比如:polardb,记录值选择ECS的ip地址,比如:47.94.219.162,然后创建完成后,等待5分钟,在浏览器访问一下新的域名,比如polardb.xunyun17.xyz,如果同样能看到nginx 的欢迎界面,表示域名解析成功;

由于本智能家居场景使用mysql开发体验,所以还需要在ubuntu里,安装mysql,运行下面的命令进行安装:

sudo apt install mysql-client

安装完mysql后,建立一个shell脚本,测试是否可以连接到polardb上:

vi p.sh

mysql -h mypolardb.mysql.polardb.rds.aliyuncs.com --user=mypolardb --password=mypolardb

。/p.sh

如果运行完脚本后,可以看到mysql的提示信息,和mysql大于号提示符,表示可以连接成功;

2、开发

首先搭建创建一个数据库和一张表用来保存客厅和设备当前信息:

。/p.sh

create database keting;

use keting;

CREATE TABLE status (devname VARCHAR(20), value int(4),changetime DATETIME);

insert into status(devname,value,changetime) values

(‘TV0001’,0,NOW()),

(‘LAMP01’,1,NOW()),

(‘CURN01’,1,NOW());

然后通过mysql的c语言api接口,编写一段程序,来读取status设备表中的设备状态:

////////////////////////////////////////query lamp device

sprintf(str_cmd,“select value from status where devname=‘LAMP01’”);

//printf(“\n%s\n.”,str_cmd);

no_res = 0;

if(mysql_query(conn, str_cmd))

{

printf(“《《《《《《《\n”);

exit(1);

}

res = mysql_use_result(conn);

if(no_res==0){

while((row = mysql_fetch_row(res)) != NULL)

{

// printf(“%s \n”, row[0]);

if(selno==17) printf(“%s”, row[0]);

else printf(“%s\t %s\t %s”, row[0],row[1],row[2]);

}

}

mysql_free_result(res);

sprintf(str_cmd,“select value from status where devname=‘CURN01’”);

//printf(“\n%s\n.”,str_cmd);

no_res = 0;

下一步,就是用php脚本调用这段代码查询设备状态,并且显示在网页上:查询结果在

使用以下php代码实现:

if(!empty($_REQUEST[‘arguments’])){

exec(‘。/mysqlv ’.$_REQUEST[‘arguments’]。‘ LAMP03 1’,$result);

//print_r($result);

//echo $result[0][0]。‘《br》’;

//echo $result[0][1]。‘《br》’;

//echo $result[0][2];

if($result[0][0]==0) $s1 = ‘OFF’;

else $s1 = ‘ON’;

if($result[0][1]==0) $s2 = ‘OFF’;

else $s2 = ‘ON’;

if($result[0][2]==0) $s3 = ‘OFF’;

else $s3 = ‘ON’;

if($_REQUEST[‘arguments’]==17) echo “《center》《table border=\”1\“》

《tr》

《th》电视《/th》

《th》灯《/th》

《th》窗帘《/th》

《/tr》

《tr》

《td》”.$s1.“《/td》

《td》”.$s2.“《/td》

《td》”.$s3.“《/td》

《/tr》

《/table》《/center》”;

打开浏览器运行这个php脚本,点击运行按钮,可以看到页面会显示一个设备状态表格,包括电视,灯,窗帘是否有打开或关闭;

接下来,用c语言写一个socket监听程序,用来监听后续远程设备对智能家居的更新请求,并实现状态更新,代码如下:

n = read(sock,buffer,255);

if (n 《 0) {

perror(“ERROR reading from socket”);

exit(1);

}

strncpy(devname,buffer,6);

devname[6]=0;

devval=buffer[6]-‘0’;

memset(cmdstr,0,256);

sprintf(cmdstr,“。/mysqlv 15 %s %i”,devname,devval);

printf(“%s.\n”,cmdstr);

system(cmdstr);

printf(“Here is the message: %s\n”,buffer);

n = write(sock,“I got your message”,18);

服务端监听程序编写好以后,就可以开始写模拟设备端的程序:

同样使用c语言的socket函数进行编写,将命令行的数据发往服务器端:

/* Now connect to the server */

if (connect(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) 《 0) {

perror(“ERROR connecting”);

exit(1);

}

/* Now ask for a message from the user, this message

* will be read by server

*/

printf(“Please enter the message: ”);

bzero(buffer,256);

strcpy(buffer, argv[3]);

//fgets(buffer,255,stdin);

/* Send message to the server */

n = write(sockfd, buffer, strlen(buffer));

if (n 《 0) {

perror(“ERROR writing to socket”);

exit(1);

}

最后,还要修改我们的mysqlv.c的数据库调用代码,将命令行参数更改到数据库中:

sprintf(str_cmd,“update status set value=%d where devname=\‘%s\’”,atoi(argc[3]),argc[2]);

3、测试

当服务器和客户端的程序都完成后,就可以进行测试了;首先在服务器上,用以下命令行后台运行监听程序:

。/s&

然后在本地运行模拟设备程序,例如我们要运行将灯打开的命令,用下面的命令行:

。/c 47.94.219.162 8266 LAMP011

如果收到服务器的回显消息,则表示发送成功;

打开浏览器,运行php脚本,点击运行按钮,可以看到页面出现了最新设备状态的表格信息;

结论与建议:可以看到这个polardb的新型数据库,还是和mysql兼容的,操作起来也比较方便;

如果能够像其他阿里云的产品也提供相关的restful api接口,将会使开发变得更方便和快捷;

4、附录和截图

操作polardb 的mysqlv完整程序:

#include 《mysql/mysql.h》

#include 《stdio.h》

#include 《stdlib.h》

#include 《string.h》

int main(int argv,char**argc)

{

MYSQL *conn;

MYSQL_RES *res;

MYSQL_ROW row;

char server[] = “47.98.24.120”;

char user[] = “mypolardb”;

char password[] = “mypolardb”;

char database[] = “mysql”;

char str_cmd[250];

int no_res = 0;

int selno=0;

if(argv《2) {

printf(“mysqlv funcno.\n”);

return 0;

}

conn = mysql_init(NULL);

if(!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0))

{

printf(“》》》》》》》\n”);

exit(1);

}

selno = atoi(argc[1]);

// printf(“selno:%d\n《br》”,selno);

switch(selno){

case 1:

strcpy(str_cmd,“select version()”);

break;

case 2:

strcpy(str_cmd,“select current_date”);

break;

case 3:

strcpy(str_cmd,“show databases”);

break;

case 4:

strcpy(str_cmd,“create database keting”);

no_res = 1;

break;

case 5:

strcpy(str_cmd,“drop database keting”);

no_res = 1;

break;

case 6:

strcpy(str_cmd,“create database woshi”);

no_res = 1;

break;

case 7:

strcpy(str_cmd,“drop database woshi”);

no_res = 1;

break;

case 8:

strcpy(str_cmd,“create database chufang”);

no_res = 1;

break;

case 9:

strcpy(str_cmd,“drop database chufang”);

no_res = 1;

break;

case 10:

strcpy(str_cmd,“use keting”);

no_res = 1;

break;

case 11:

strcpy(str_cmd,“use woshi”);

no_res = 1;

break;

case 12:

strcpy(str_cmd,“use chufang”);

no_res = 1;

break;

#if 0

case 13:

strcpy(str_cmd,“show tables”);

//no_res = 1;

break;

/*table operate for keting*/

case 14:

strcpy(str_cmd,“CREATE TABLE prop (devname VARCHAR(20), value int(4))”);

//no_res = 1;

break;n

#endif

case 15:

strcpy(str_cmd,“describe prop”);

//no_res = 1;

break;

case 16:

strcpy(str_cmd,“drop table if exists prop”);

//no_res = 1;

break;

}

if(selno==13){

strcpy(str_cmd,“use keting”);

if(mysql_query(conn, str_cmd))

{

printf(“《《《《《《《\n”);

exit(1);

}

strcpy(str_cmd,“show tables”);

no_res = 0;

}

if(selno==14){

strcpy(str_cmd,“use keting”);

if(mysql_query(conn, str_cmd))

{

printf(“《《《《《《《\n”);

exit(1);

}

strcpy(str_cmd,“select * from prop;”);

no_res = 0;

}

if(selno==15){

strcpy(str_cmd,“use keting”);

if(mysql_query(conn, str_cmd))

{

printf(“《《《《《《《\n”);

exit(1);

}

// sprintf(str_cmd,“insert into prop(devname,value,changetime) values (\‘%s\’,%i,NOW())”,argc[2],atoi(argc[3]));

sprintf(str_cmd,“update status set value=%d where devname=\‘%s\’”,atoi(argc[3]),argc[2]);

printf(“\n%s\n.”,str_cmd);

no_res = 1;

}

if(selno==16){

strcpy(str_cmd,“use keting”);

if(mysql_query(conn, str_cmd))

{

printf(“《《《《《《《\n”);

exit(1);

}

sprintf(str_cmd,“delete from prop where devname=‘my_dev’”);

printf(“\n%s\n.”,str_cmd);

no_res = 1;

}

if(selno==17){

strcpy(str_cmd,“use keting”);

if(mysql_query(conn, str_cmd))

{

printf(“《《《《《《《\n”);

exit(1);

}

////////////////////////////////////////query tv device

sprintf(str_cmd,“select value from status where devname=‘TV0001’”);

//printf(“\n%s\n.”,str_cmd);

no_res = 0;

if(mysql_query(conn, str_cmd))

{

printf(“《《《《《《《\n”);

exit(1);

}

res = mysql_use_result(conn);

if(no_res==0){

while((row = mysql_fetch_row(res)) != NULL)

{

// printf(“%s \n”, row[0]);

if(selno==17) printf(“%s”, row[0]);

else printf(“%s\t %s\t %s”, row[0],row[1],row[2]);

}

}

mysql_free_result(res);

////////////////////////////////////////query lamp device

sprintf(str_cmd,“select value from status where devname=‘LAMP01’”);

//printf(“\n%s\n.”,str_cmd);

no_res = 0;

if(mysql_query(conn, str_cmd))

{

printf(“《《《《《《《\n”);

exit(1);

}

res = mysql_use_result(conn);

if(no_res==0){

while((row = mysql_fetch_row(res)) != NULL)

{

// printf(“%s \n”, row[0]);

if(selno==17) printf(“%s”, row[0]);

else printf(“%s\t %s\t %s”, row[0],row[1],row[2]);

}

}

mysql_free_result(res);

sprintf(str_cmd,“select value from status where devname=‘CURN01’”);

//printf(“\n%s\n.”,str_cmd);

no_res = 0;

}

//printf(“finish! \n”);

if(mysql_query(conn, str_cmd))

{

printf(“《《《《《《《\n”);

exit(1);

}

res = mysql_use_result(conn);

if(no_res==0){

if(selno==14)

printf(“DEVICE VALUE TIMESTAMP《br》”);

while((row = mysql_fetch_row(res)) != NULL)

{

// printf(“%s”, row[0]);

if(selno==17) printf(“%s\t ”, row[0]);

else printf(“%s\t %s\t %s”, row[0],row[1],row[2]);

}

}

mysql_free_result(res);

mysql_close(conn);

/*

printf(“finish! \n”);

printf(“finish! 《br》”);

*/

return 0;

}

server.c服务器监听的完整程序:

#include 《stdio.h》

#include 《stdlib.h》

#include 《netdb.h》

#include 《netinet/in.h》

#include 《string.h》

void doprocessing (int sock);

int main( int argc, char *argv[] ) {

int sockfd, newsockfd, portno, clilen;

char buffer[256];

struct sockaddr_in serv_addr, cli_addr;

int n, pid;

/* First call to socket() function */

sockfd = socket(AF_INET, SOCK_STREAM, 0);

if (sockfd 《 0) {

perror(“ERROR opening socket”);

exit(1);

}

/* Initialize socket structure */

bzero((char *) &serv_addr, sizeof(serv_addr));

portno = 8266;//5001;

serv_addr.sin_family = AF_INET;

serv_addr.sin_addr.s_addr = INADDR_ANY;

serv_addr.sin_port = htons(portno);

/* Now bind the host address using bind() call.*/

if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) 《 0) {

perror(“ERROR on binding”);

exit(1);

}

/* Now start listening for the clients, here

* process will go in sleep mode and will wait

* for the incoming connection

*/

listen(sockfd,5);

clilen = sizeof(cli_addr);

while (1) {

newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);

if (newsockfd 《 0) {

perror(“ERROR on accept”);

exit(1);

}

/* Create child process */

pid = fork();

if (pid 《 0) {

perror(“ERROR on fork”);

exit(1);

}

if (pid == 0) {

/* This is the client process */

close(sockfd);

doprocessing(newsockfd);

exit(0);

}

else {

close(newsockfd);

}

} /* end of while */

}

void doprocessing (int sock) {

int n;

char buffer[256];

char cmdstr[256];

char devname[10];

int devval=0;

bzero(buffer,256);

n = read(sock,buffer,255);

if (n 《 0) {

perror(“ERROR reading from socket”);

exit(1);

}

strncpy(devname,buffer,6);

devname[6]=0;

devval=buffer[6]-‘0’;

memset(cmdstr,0,256);

sprintf(cmdstr,“。/mysqlv 15 %s %i”,devname,devval);

printf(“%s.\n”,cmdstr);

system(cmdstr);

printf(“Here is the message: %s\n”,buffer);

n = write(sock,“I got your message”,18);

if (n 《 0) {

perror(“ERROR writing to socket”);

exit(1);

}

if(buffer[0]==‘z’) exit(1);

}

client.c客户端模拟设备的完整程序:

#include 《stdio.h》

#include 《stdlib.h》

#include 《netdb.h》

#include 《netinet/in.h》

#include 《string.h》

int main(int argc, char *argv[]) {

int sockfd, portno, n;

struct sockaddr_in serv_addr;

struct hostent *server;

char buffer[256];

if (argc 《 3) {

fprintf(stderr,“usage %s hostname port devsw\n”, argv[0]);

exit(0);

}

portno = atoi(argv[2]);

/* Create a socket point */

sockfd = socket(AF_INET, SOCK_STREAM, 0);

if (sockfd 《 0) {

perror(“ERROR opening socket”);

exit(1);

}

server = gethostbyname(argv[1]);

if (server == NULL) {

fprintf(stderr,“ERROR, no such host\n”);

exit(0);

}

bzero((char *) &serv_addr, sizeof(serv_addr));

serv_addr.sin_family = AF_INET;

bcopy((char *)server-》h_addr, (char *)&serv_addr.sin_addr.s_addr, server-》h_length);

serv_addr.sin_port = htons(portno);

/* Now connect to the server */

if (connect(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) 《 0) {

perror(“ERROR connecting”);

exit(1);

}

/* Now ask for a message from the user, this message

* will be read by server

*/

printf(“Please enter the message: ”);

bzero(buffer,256);

strcpy(buffer, argv[3]);

//fgets(buffer,255,stdin);

/* Send message to the server */

n = write(sockfd, buffer, strlen(buffer));

if (n 《 0) {

perror(“ERROR writing to socket”);

exit(1);

}

/* Now read server response */

bzero(buffer,256);

n = read(sockfd, buffer, 255);

if (n 《 0) {

perror(“ERROR reading from socket”);

exit(1);

}

printf(“%s\n”,buffer);

return 0;

}

p.php脚本结果显示的完整程序;

《html》

《head》

《title》小白的智能家居《/title》

《/head》

《body》

《?php

if(!empty($results)){

// echo $results;

}

?》

《center》小白的智能家居《/center》

《form method=“post” action=“”》

《select name=“arguments”》

《option value =“17” selected=“selected”》显示客厅状态《/option》

《/select》

《input type=“submit” name=“Submit” value=“运行” /》

《/form》

《/body》

《/html》

《?php

if(!empty($_REQUEST[‘arguments’])){

exec(‘。/mysqlv ’.$_REQUEST[‘arguments’]。‘ LAMP03 1’,$result);

//print_r($result);

//echo $result[0][0]。‘《br》’;

//echo $result[0][1]。‘《br》’;

//echo $result[0][2];

if($result[0][0]==0) $s1 = ‘OFF’;

else $s1 = ‘ON’;

if($result[0][1]==0) $s2 = ‘OFF’;

else $s2 = ‘ON’;

if($result[0][2]==0) $s3 = ‘OFF’;

else $s3 = ‘ON’;

if($_REQUEST[‘arguments’]==17) echo “《center》《table border=\”1\“》

《tr》

《th》电视《/th》

《th》灯《/th》

《th》窗帘《/th》

《/tr》

《tr》

《td》”.$s1.“《/td》

《td》”.$s2.“《/td》

《td》”.$s3.“《/td》

《/tr》

《/table》《/center》”;

}

?》

作者:云栖社区 tech君

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据库
    +关注

    关注

    7

    文章

    3993

    浏览量

    67742
  • 智能家居
    +关注

    关注

    1942

    文章

    9944

    浏览量

    195549
  • 阿里云
    +关注

    关注

    3

    文章

    1028

    浏览量

    45506
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    信号发生器在智能家居设备测试中的应用

    智能家居设备的测试面临诸多挑战。信号发生器作为电子测试领域的核心工具,在智能家居设备的研发、生产及质量验证中发挥着不可替代的作用。本文将深入探讨信号发生器在
    的头像 发表于 08-18 17:13 545次阅读
    信号发生器在<b class='flag-5'>智能家居</b>设备<b class='flag-5'>测试</b>中的应用

    数据库数据恢复—服务器异常断电导致Oracle数据库故障的数据恢复案例

    Oracle数据库故障: 某公司一台服务器上部署Oracle数据库。服务器意外断电导致数据库报错,报错内容为“system01.dbf需要更多的恢复来保持一致性”。该Oracle数据库
    的头像 发表于 07-24 11:12 438次阅读
    <b class='flag-5'>数据库</b><b class='flag-5'>数据</b>恢复—服务器异常断电导致Oracle<b class='flag-5'>数据库</b>故障的<b class='flag-5'>数据</b>恢复案例

    数据库数据恢复—MongoDB数据库文件丢失的数据恢复案例

    MongoDB数据库数据恢复环境: 一台操作系统为Windows Server的虚拟机上部署MongoDB数据库。 MongoDB数据库故障: 工作人员在MongoDB服务仍
    的头像 发表于 07-01 11:13 471次阅读
    <b class='flag-5'>数据库</b><b class='flag-5'>数据</b>恢复—MongoDB<b class='flag-5'>数据库</b>文件丢失的<b class='flag-5'>数据</b>恢复案例

    数据库数据恢复—SQL Server数据库被加密如何恢复数据

    SQL Server数据库故障: SQL Server数据库被加密,无法使用。 数据库MDF、LDF、log日志文件名字被篡改。
    的头像 发表于 06-25 13:54 510次阅读
    <b class='flag-5'>数据库</b><b class='flag-5'>数据</b>恢复—SQL Server<b class='flag-5'>数据库</b>被加密如何恢复<b class='flag-5'>数据</b>?

    蓝牙语音遥控器:智能家居的智慧控制核心

    随着智能家居的蓬勃发展,蓝牙语音遥控器凭借其便捷的操作和智能交互体验,正迅速取代传统红外遥控器,成为智能电视、机顶盒等设备的首选控制工具。 相较于需对准设备的红外遥控器,蓝牙语音遥控器
    发表于 06-01 20:24

    (大赛作品)STM32F072RB NUCLEO智能家居控制实例项目

    (大赛作品)STM32F072RB NUCLEO智能家居控制实例项目文档截图
    发表于 05-28 21:06

    Matter 智能家居的通用语言

    企业正在测试 134 种独特的 Matter 产品。 在消费者对智能家居设备无缝互操作性需求的推动下,Matter的广泛采用将吸引更多的开发者。
    发表于 05-19 15:35

    明远智睿SSD2351开发板:智能家居智能核心

    1.4GHz处理器具备强大的运算能力,能够快速处理智能家居系统中的各种数据和指令。在智能家居环境中,大量的设备需要进行实时监控和控制,如智能
    发表于 05-07 18:59

    智能家居控制器:无线通讯,智能化管理家居设备

    智能家居控制器是智能家居系统的核心设备,通过集中管理和协调各类智能终端,实现家居环境的自动化、智能
    的头像 发表于 04-24 15:09 965次阅读

    智能家居Mesh组网方案:实现智能化生活的无缝连接NRF52832

    特性: 1、多语音平台接入:智能家居 Mesh 组网方案支持天猫精灵、Echo 等智能语音平台的接入,让用户可以通过语音指令控制智能家居设备,实现
    发表于 04-15 14:07

    远程智能家居控制:开启智能生活新时代

    随着物联网技术的发展,远程智能家居控制走进人们的生活,为大家开启了智能生活的全新篇章。 远程智能家居控制让生活更加便捷。用户无论身处何地,只
    的头像 发表于 01-20 13:05 1183次阅读

    Oracle数据库的多功能集成开发环境

    无需编码即可在图表上构建可视化查询 消除性能瓶颈的查询优化器 数据库管理和灵活的用户管理 带有图表和数据透视表的数据分析和报告工具 200多个真实测试数据
    的头像 发表于 01-14 13:52 701次阅读
    Oracle<b class='flag-5'>数据库</b>的多功能集成开发环境

    MySQL数据库的安装

    MySQL数据库的安装 【一】各种数据库的端口 MySQL :3306 Redis :6379 MongoDB :27017 Django :8000 flask :5000 【二】MySQL 介绍
    的头像 发表于 01-14 11:25 865次阅读
    MySQL<b class='flag-5'>数据库</b>的安装

    数据库是哪种数据库类型?

    数据库是一种部署在虚拟计算环境中的数据库,它融合了云计算的弹性和可扩展性,为用户提供高效、灵活的数据库服务。云数据库主要分为两大类:关系型数据库
    的头像 发表于 01-07 10:22 806次阅读

    数据库数据恢复—Mysql数据库表记录丢失的数据恢复流程

    Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、Mysql数据库表中无任何数据或只有部分
    的头像 发表于 12-16 11:05 1002次阅读
    <b class='flag-5'>数据库</b><b class='flag-5'>数据</b>恢复—Mysql<b class='flag-5'>数据库</b>表记录丢失的<b class='flag-5'>数据</b>恢复流程