Introduction

RDS instances can become unavailable due to storage exhaustion, hardware failures, maintenance operations, or network issues. When unavailable, applications can't connect to the database, causing service outages.

Symptoms

Connection refused:

```bash $ psql -h my-db.xyz.region.rds.amazonaws.com -U admin -d mydb

psql: could not connect to server: Connection refused ```

Instance status not available:

```bash $ aws rds describe-db-instances --db-instance-identifier my-db \ --query 'DBInstances[*].[DBInstanceStatus,StatusInfos]'

[["stopped", null]] # Or "creating", "deleting", "modifying", "upgrading" ```

Storage full error:

bash
ERROR: database is not accepting commands to avoid versioning conflicts
HINT: Stop the postmaster and vacuum in read-only mode.

Application connection error:

bash
FATAL: the database system is starting up
FATAL: remaining connection slots are reserved

Common Causes

  1. 1.Storage full - No space for operations, database goes read-only or stops
  2. 2.Instance stopped - Manually stopped or stopped due to inactivity
  3. 3.Maintenance in progress - Upgrade or patching operation
  4. 4.Failover in progress - Multi-AZ failover happening
  5. 5.Hardware failure - Underlying hardware issue
  6. 6.Network connectivity - VPC, subnet, or security group issues
  7. 7.Parameter group issues - Invalid configuration preventing startup

Step-by-Step Fix

  1. 1.Check logs for specific error messages
  2. 2.Verify configuration settings
  3. 3.Test network connectivity
  4. 4.Review recent changes
  5. 5.Apply corrective action
  6. 6.Verify the fix

Step 1: Check Instance Status

```bash # Get current status aws rds describe-db-instances --db-instance-identifier my-db \ --query 'DBInstances[*].[DBInstanceStatus,DBInstanceClass,Engine,EngineVersion]'

# Status values: # - available: Normal operation # - creating: Instance being created # - modifying: Configuration change in progress # - upgrading: Engine upgrade in progress # - rebooting: Instance rebooting # - stopped: Instance stopped # - stopping: Instance being stopped # - deleting: Instance being deleted ```

Step 2: Check for Storage Issues

```bash # Check storage usage aws rds describe-db-instances --db-instance-identifier my-db \ --query 'DBInstances[*].[AllocatedStorage,MaxAllocatedStorage]'

# Check CloudWatch for storage metrics aws cloudwatch get-metric-statistics \ --namespace AWS/RDS \ --metric-name FreeStorageSpace \ --dimensions Name=DBInstanceIdentifier,Value=my-db \ --statistics Minimum \ --period 300

# If FreeStorageSpace < 5GB, instance may have issues ```

Increase storage if needed:

bash
aws rds modify-db-instance \
  --db-instance-identifier my-db \
  --allocated-storage 100 \
  --apply-immediately

Step 3: Start Stopped Instance

```bash # If instance is stopped aws rds start-db-instance --db-instance-identifier my-db

# Wait for it to become available aws rds wait db-instance-available --db-instance-identifier my-db ```

Step 4: Check for Pending Maintenance

```bash # Check pending maintenance actions aws rds describe-db-instances --db-instance-identifier my-db \ --query 'DBInstances[*].PendingModifiedValues'

# Check maintenance window aws rds describe-db-instances --db-instance-identifier my-db \ --query 'DBInstances[*].[PreferredMaintenanceWindow,PendingMaintenanceActions]'

# Apply pending maintenance aws rds apply-pending-maintenance-action \ --resource-identifier arn:aws:rds:region:account:db:my-db \ --apply-action system-update \ --opt-in-type immediate ```

Step 5: Check for Multi-AZ Failover

```bash # Check if Multi-AZ aws rds describe-db-instances --db-instance-identifier my-db \ --query 'DBInstances[*].MultiAZ'

# Check events for failover aws rds describe-events \ --source-identifier my-db \ --source-type db-instance \ --start-time $(date -d '1 hour ago' -u +%Y-%m-%dT%H:%M:%SZ)

# Look for "Multi-AZ instance failover" events ```

Step 6: Check Error Logs

```bash # Download error log aws rds download-db-log-file-portion \ --db-instance-identifier my-db \ --log-file-name error/postgresql.log \ --output text | tail -100

# Or for MySQL aws rds download-db-log-file-portion \ --db-instance-identifier my-db \ --log-file-name error/mysql-error-running.log \ --output text | tail -100

# Common errors: # - "disk full": Storage exhausted # - "too many connections": Connection limit # - "out of memory": Memory exhaustion ```

Step 7: Verify Network Connectivity

```bash # Check VPC configuration aws rds describe-db-instances --db-instance-identifier my-db \ --query 'DBInstances[*].[DBSubnetGroup.VpcId,DBSubnetGroup.Subnets[*].SubnetIdentifier]'

# Check security groups aws rds describe-db-instances --db-instance-identifier my-db \ --query 'DBInstances[*].VpcSecurityGroups[*].[VpcSecurityGroupId,Status]'

# Verify security group allows your IP aws ec2 describe-security-groups --group-ids sg-12345 \ --query 'SecurityGroups[*].IpPermissions[*].[FromPort,IpRanges[*].CidrIp]'

# Test connectivity telnet my-db.xyz.region.rds.amazonaws.com 5432 nc -zv my-db.xyz.region.rds.amazonaws.com 5432 ```

Step 8: Check Parameter Group Issues

```bash # Check parameter group status aws rds describe-db-instances --db-instance-identifier my-db \ --query 'DBInstances[*].DBParameterGroups[*].[DBParameterGroupName,ParameterApplyStatus]'

# Status values: # - in-sync: Parameters applied # - pending-reboot: Static parameters need reboot # - applying: Parameters being applied

# Reboot to apply pending parameters aws rds reboot-db-instance --db-instance-identifier my-db ```

Step 9: Check Instance Class and Resources

```bash # Check instance class aws rds describe-db-instances --db-instance-identifier my-db \ --query 'DBInstances[*].DBInstanceClass'

# Check CPU and memory aws cloudwatch get-metric-statistics \ --namespace AWS/RDS \ --metric-name CPUUtilization \ --dimensions Name=DBInstanceIdentifier,Value=my-db \ --statistics Maximum \ --period 300

# High CPU could indicate resource exhaustion ```

Step 10: Contact AWS Support for Hardware Issues

```bash # If instance shows hardware-related status aws rds describe-db-instances --db-instance-identifier my-db \ --query 'DBInstances[*].StatusInfos[*].[Status,StatusType,Message]'

# Hardware issues show messages like: # - "Hardware failure" # - "Storage failure" # Contact AWS Support for hardware replacement ```

Recovery Actions

StatusAction
stoppedaws rds start-db-instance
storage-fullIncrease allocated storage
modifyingWait for modification to complete
upgradingWait for upgrade to complete
rebootingWait for reboot to complete
hardware failureContact AWS Support
network issueFix security groups/VPC

Verification

```bash # Check instance is available aws rds describe-db-instances --db-instance-identifier my-db \ --query 'DBInstances[*].DBInstanceStatus'

# Should return: "available"

# Test database connection psql -h my-db.xyz.region.rds.amazonaws.com -U admin -d mydb -c "SELECT 1"

# Should return: 1

# Check CloudWatch metrics aws cloudwatch get-metric-statistics \ --namespace AWS/RDS \ --metric-name DatabaseConnections \ --dimensions Name=DBInstanceIdentifier,Value=my-db \ --statistics Sum \ --period 60 ```

  • [Fix AWS RDS Connection Limit Exceeded](/articles/fix-aws-rds-connection-limit-exceeded)
  • [Fix AWS RDS Read Replica Lag High](/articles/fix-aws-rds-read-replica-lag-high)
  • [Fix AWS RDS Aurora Failover Slow](/articles/fix-aws-rds-aurora-failover-slow)
  • [AWS troubleshooting: Fix IAM Permission Denied - Complete Tro](fix-iam-permission-denied)
  • [AWS cloud troubleshooting: AWS ACM Certificate Pending Validation Because the](aws-acm-certificate-pending-validation-wrong-route53-zone)
  • [AWS cloud troubleshooting: AWS ALB Returns 502 Because the Target Closed the ](aws-alb-502-target-closed-connection-keepalive-timeout-mismatch)
  • [AWS cloud troubleshooting: Fix AWS ALB CreateListener TargetGroupNotFound Err](aws-alb-createlistener-targetgroupnotfound)
  • [AWS cloud troubleshooting: Fix Aws Alb Lambda 502 Bad Gateway Issue in AWS](aws-alb-lambda-502-bad-gateway)

<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "TechArticle", "headline": "Fix AWS RDS Instance Unavailable", "description": "Troubleshoot RDS instance unavailability. Fix storage issues, failover problems, maintenance conflicts, and connectivity.", "url": "https://www.fixwikihub.com/fix-aws-rds-instance-unavailable", "publisher": { "@type": "Organization", "name": "FixWikiHub", "url": "https://www.fixwikihub.com" }, "author": { "@type": "Person", "name": "FixWikiHub Editorial Team" }, "datePublished": "2026-04-02T01:41:22.373Z", "dateModified": "2026-04-02T01:41:22.373Z" } </script>