对于我的Flask应用程序,我想使用Flask-SQLAlchemy扩展来连接我在AWS RDS上创建的数据库实例.
当我尝试连接时,应用程序超时,我收到以下错误:
sqlalchemy.exc.OperationalError :( OperationalError)(2003,"无法连接到MySQL服务器'xxxxxxxxxxxxxxx.xxxxxxxxxxxx.us-east-1.rds.amazonaws.com'(60")
我的代码看起来像这样:
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
application = Flask(__name__)
application.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://{master username}:{db password}@{endpoint}/{db instance name}'
db = SQLAlchemy(application)
@application.route('/')
def hello_world():
return 'Hello World'
if __name__ == '__main__':
application.run()
Run Code Online (Sandbox Code Playgroud)
该瓶-SQLAlchemy的文档说,SQLALCHEMY_DATABASE_URI对mysql数据库连接的格式应该是这样的:
mysql://username:password@server/db
Run Code Online (Sandbox Code Playgroud)
此外,我可以检查AWS RDS控制台以获取有关我的数据库实例的信息.控制台看起来像这样.
现在我假设SQLAlchemy中的"用户名"是指AWS RDS控制台中的"主用户名",SQLAlchemy中的"server"是指AWS RDS控制台中的"端点","db"是指"数据库"实例名称"
我究竟做错了什么??
如果有人可以使用AWS RDS控制台术语为我描述SQLALCHEMY_DATABASE_URI,那么这将完全解决问题.
我正在使用云形成来创建包含RDS实例的设置.
由于以下错误,我在创建RDS实例时遇到一些困难:
数据库子网组不符合可用区域覆盖要求.请添加子网以覆盖至少2个可用区域.目前的报道:1
问题是整个设置都在一个AZ上......我该怎么做?只是在不同的AZ中创建一个额外的子网,其中没有任何内容只适用于RDS?
也许AWS可以通过某种方式自动创建该子网,让我摆脱困境.我不想要那个额外的子网,我不想让我的用户为此选择另一个AZ负担.
我们正在使用Amazon RDS,我们有一个MASTER复制到SLAVE.
我们想要创建一个新的slave,它只能从master中复制特定的数据库或表.
默认情况下,RDS只是将整个主数据库复制到从属数据库.但我们只想做特定的表格.我知道这在MySQL中是可能的,但我不确定RDS,我无法在任何地方找到答案.
这些设置存在于MySQL中,我没有在RDS的自定义参数设置中看到它们,除非我遗漏了什么.
--replicate-ignore-db=db_name
--replicate-ignore-table=db_name.tbl_name
Run Code Online (Sandbox Code Playgroud) 我正在尝试在AWS外部设置副本服务器,并且主服务器正在AWS RDS上运行.而且我不想让我的主人停机.所以我设置了我的从节点,现在我想备份我在AWS的当前数据库.
mysqldump -h RDS ENDPOINT -u root -p --skip-lock-tables --single-transaction --flush-logs --hex-blob --master-data=2 --all-databases > /root/dump.sql
我在我的VM上测试了它并且工作正常但是当它与RDS捆绑时它给了我错误
mysqldump: Couldn't execute 'FLUSH TABLES WITH READ LOCK': Access denied for user 'root'@'%' (using password: YES) (1045)
是因为我没有超级用户权限或者我如何解决这个问题?请有人建议我.
在数据库连接闲置一段时间后,我的应用程序中出现以下异常:
... An I/O error occured while sending to the backend.; nested exception is org.postgresql.util.PSQLException: An I/O error occured while sending to the backend.] with root cause
java.net.SocketException: Operation timed out
at java.net.SocketInputStream.socketRead0(Native Method)
Run Code Online (Sandbox Code Playgroud)
在psql中发生同样的问题我没有连接到本地数据库的问题,所以我很确定问题出在RDS上.
psql=> select 'ok';
SSL SYSCALL error: Operation timed out
psql=> select 'ok';
SSL SYSCALL error: EOF detected
The connection to the server was lost. Attempting reset: Succeeded.
Run Code Online (Sandbox Code Playgroud)
我发现了另一个问题,这个问题表明可以改善这种情况的工作(超时现在需要更长时间),但没有解决它.
我正在使用Spring Boot with JDBC(tomcat连接池)和JDBCTemplate.
有解决方法还是修复?也许强制连接池测试和重新连接?我如何在这种环境下做到这一点?
编辑:这是我的连接字符串
jdbc:postgresql://myhost.c2estvxozjm3.eu-west-1.rds.amazonaws.com/dashboard?tcpKeepAlive=true
Run Code Online (Sandbox Code Playgroud)
解:
根据所选答案中的建议编辑RDS服务器端TCP_KeepAlive参数.我正在使用的参数是:
tcp_keepalives_count 5
tcp_keepalives_idle 200 …Run Code Online (Sandbox Code Playgroud) 我想在亚马逊的服务器上发布一个网站:
我是否需要亚马逊的EC2用于网站,RDS用于MySQL数据库,CloudFront用于FMS?我真的很喜欢我应该使用哪些服务的演练.
谢谢.
我最近设置了一个只读副本,以便从我的Amazon多可用区RDS实例中获取一些读取负载.亚马逊文档明确指出,"由您的应用程序决定如何在您的只读副本中分配读取流量".
有没有人想出一种可管理的方式来扩展只读副本?将我的应用程序的不同部分硬编码为从特定副本读取,似乎不是一个非常可扩展的解决方案.有没有办法设置它类似于将EC2实例放在负载均衡器后面?
在仪表板中,我看到数据库实例当前有22个打开的连接,阻止了与错误的新连接:
剩余的连接槽保留用于非复制超级用户连接.
我正在从EC2实例上运行的Web服务API访问数据库,并始终保持最佳实践:
Connection connection = DriverManager.getConnection(URL, USER_NAME, PASSWORD);
Class.forName(DB_CLASS);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(SQL_Query_String);
...
resultSet.close();
statement.close();
connection.close();
Run Code Online (Sandbox Code Playgroud)
我可以在代码中做些其他事情吗?
我应该在数据库管理中做些什么吗?
有没有办法定期关闭连接?
sql postgresql database-connection amazon-web-services amazon-rds
我正在尝试将我的RDS实例从9.5.4升级到9.6.1,并且我因为需要首先升级的PostGIS版本的错误而被阻止.
数据库实例处于无法升级的状态:PreUpgrade检查失败:无法升级实例,因为有一个或多个数据库安装了旧版本的PostGIS.请升级PostGIS的所有安装,然后重试.
RDS 9.5.4支持的PostGIS的最高版本是2.2.2
alter extension postgis update
产量
注意:已经安装了扩展名为"postgis"的版本"2.2.2"
我尝试明确升级到9.6.1中的版本
将扩展postgis更新为'2.3.0'
入门
[错误]错误:扩展名"postgis"没有从版本"2.2.2"到版本"2.3.0"的更新路径
所以我的问题是:我该如何升级?我怀疑我可以在升级之前删除扩展并在之后安装新版本,但我不知道这将对我的数据做什么,或者是否能正确升级我的空间结构或功能.
我已经检查了文档中提到的这种情况
amazon-rds ×10
mysql ×5
postgresql ×3
replication ×2
amazon-ec2 ×1
mysqldump ×1
postgis ×1
spring-boot ×1
spring-jdbc ×1
sql ×1