如何将ShinyApps与MySQL从Localhost同步到Public

时间:2018-04-07 13:07:17

标签: mysql r shiny

我目前正在使用R Shiny开发应用程序并完成我的ShinyApps,现在我正在尝试将应用程序部署到 Shinyapps.io ,以便多个用户可以访问和使用它,但我有一个问题用于部署。

我的应用程序是关于药房管理的,它控制着CRUD操作,所以显然它使用这些选项配置与db Connection结合(在本地运行)

options(mysql = list(
"host" = "127.0.0.1",
"port" = 3306,
"user" = "root",
"password" = ""
))

还有一件事,要连接到数据库,我通常启动我的XAMPP应用程序并打开mysql管理员,以便我的应用程序可以在本地连接数据库。它在部署之前完美无缺地工作

但是当我尝试在delpoy之后在shiny.io中运行它时它会立即崩溃(我的意思是自动断开连接)。所以我确实尝试将主机ip改为公开这样,(我试图在用户本地机器上获取IP地址)

configA <- system("ipconfig", intern=TRUE)
configB <- configA[grep("IPv4", configA)]
configC <- gsub(".*? ([[:digit:]])", "\1", configB)

options(mysql = list(
"host" = configC,
"port" = 3306,
"user" = "root",
"password" = ""
))

ConfigC变量存储IPv4地址以获取本地计算机上的公共IP,但这些仍不起作用,我在下面的链接中附加了一个日志

如何在Shinyapps.io中使用MySQL连接和同步我的应用程序?我使用DBI和RMySQL包。我需要首先托管MySQL才能同步我的应用程序?谁能向我简要介绍一下如何解释?提前谢谢你

这是我的shinyapps.io错误日志 http://textuploader.com/dulzh

1 个答案:

答案 0 :(得分:3)

对于有相同问题但不知道如何解决的人们,我将分享对我有用的东西:

1)我建议将您的MySQL数据库托管到AWS(Amazon Web Service),它是免费的,并且具有出色的性能,可以在线同步任何Web Service更新,尤其是 shinyapps.io ,首先创建一个帐户

2)用包括信用卡在内的完整信息验证您的AWS账户,以便您可以访问其服务

3) 点击服务>数据库> RDS

4)然后,您将被重定向到AWS RDS Dasboard,在这里您可以管理MySQL数据库的实例,以创建一个新实例,单击Launch DB Instance

5) 这是我的实例设置:
引擎选项:MySQL

用例:生产-MySQL

数据库实例类:db.r4.large 2vCPU,15.25 GiB RAM(我相信此设置主观地取决于我们的CPU性能)

多可用区部署:否

存储类型:预置IOPS

已分配的存储空间:100 GiB

预置的IOPS:取决于您分配的存储(我使用4000)

6)然后在“设置”选项卡中,填写数据库实例标识符,主用户名和密码,然后单击“下一步”,进行高级配置,再次填写数据库名称,然后您将需要在完成>启动数据库实例

之后,检查所有日志报告,希望以后可以更轻松地维护

7)等到您的实例状态变为可用(保持刷新状态)

8)实例变为可用后,检查实例并向下滚动,直到找到“连接”部分,记住并保存端点,安全组规则,主用户名和密码实例

9)。在server.R中,编辑MySQL连接选项,从本地主机到AWS RDS。

options(mysql = list(
    "host" = "your Endpoint",
    "port" = 3306,
    "user" = "your master username of db instance",
    "password" = "your master password of db instance"
  ))

10):在将MySQL数据库从本地主机部署到AWS RDS之前,首先请转到 AWS>服务> VPC>安全组>(单击由您的实例)>入站规则

11)在入站规则中,您必须将您或其他PC访问闪亮应用http://whatsmyip.org的所有外部IP白名单,并根据此http://docs.rstudio.com/shinyapps.io/applications.html#accessing-databases-with-odbc将所有闪亮应用的IP地址白名单在3.8.4节中

12)现在,最后不能直接将MySQL数据库从localhost部署到AWS RDS,我建议安装MySQL Workbench来完成,安装完成后,启动MySQL WorkBench

13)创建新的MySQL Connection并填写连接表单: 连接名称:(任何您喜欢的名称) 连接方式:TCP / IP 主机名:(粘贴您的端点) 端口3306 用户名:(您的数据库实例的主用户名) 密码:(您的数据库实例的主密码)

14)成功连接到AWS RDS之后,打开连接,然后打开MySQL WorkBench UI,从导航器>管理>数据导入.bak文件(MySQL数据库)。导入>选择从自包含文件导入>浏览文件>,然后启动导入

15)您已成功将数据库部署到AWS RDS!您可以在WorkBench中使用查询来查看所有表/数据库信息

16)运行您的ShinyApps并对其进行测试,然后完成!

(如果您从未发现消息无法连接到您的AWS RDS主机,可能是您的外部IP已更改为新的IP,要解决该问题,您需要在步骤10中再次将IP列入AWS VPC白名单)

希望这些对您有所帮助!