Skip to content

MySQL Router

Chris edited this page Jul 18, 2026 · 100 revisions

MySQL Router

Tools Resources Prompts
OAuth Code Mode Rate Limiting

Value Proposition Maintain database reliability with advanced MySQL Router integrations. Gain real-time observability into InnoDB clusters, connection pools, and traffic routing to dynamically optimize performance. Read the full value proposition


Orchestrate High-Availability Prerequisites

  • A recent version of MySQL Router with REST API enabled.
  • Router REST API credentials (username/password)
  • Network access to Router REST API endpoint (default: HTTPS on port 8443)
  • For InnoDB Cluster mode: The cluster must be running for REST API authentication

Important

Router REST API typically authenticates against the InnoDB Cluster. Authentication fails with 401 errors if the cluster is down.


Leverage Advanced Router Management Capabilities

The server provides tools for MySQL Router management. Direct users to the native MCP discovery mechanism or the mysql_tool_index prompt to explore the complete list of capabilities.

Prominent Examples:

  • mysql_router_status: Get Router process status and version. ⚠️
  • mysql_router_routes: List all configured routes. ⚠️
  • mysql_router_pool_status: Connection pool statistics.

Note

⚠️ = Requires InnoDB Cluster. The mysql_router_pool_status tool requires no cluster and operates independently only when using standalone file-based authentication.

Note: All Router tools operate safely under the read OAuth scope.


Streamline Authentication Configuration

Authenticate via InnoDB Cluster (Recommended)

Bootstrapping Router against an InnoDB Cluster uses metadata_cache authentication. This authenticates API users against the metadata database.

1. Create REST API user in the cluster:

-- Connect to any cluster node
-- The user will be stored in mysql_innodb_cluster_metadata.router_rest_accounts
# Use mysqlrouter_passwd to generate the password hash
mysqlrouter_passwd set /tmp/router_admin.pwd router_admin
# Manually read the generated hash from /tmp/router_admin.pwd and replace <hash_from_mysqlrouter_passwd> below
# Insert into cluster metadata (on PRIMARY node)
# Note: The -P 3307 port example assumes a specific high-availability cluster topology
mysql -h localhost -P 3307 -u cluster_admin -p -e "INSERT INTO mysql_innodb_cluster_metadata.router_rest_accounts(cluster_id, user, authentication_method, authentication_string, description) SELECT cluster_id, 'router_admin', 'modular_crypt_format', '<hash_from_mysqlrouter_passwd>', 'REST API user' FROM mysql_innodb_cluster_metadata.clusters LIMIT 1;"

2. Router config uses metadata_cache backend:

[http_auth_backend:default_auth_backend]
backend=metadata_cache

Authenticate via File (Standalone)

For standalone Router deployments without InnoDB Cluster:

[http_server]
port=8443
ssl=1
ssl_cert=/path/to/router-cert.pem
ssl_key=/path/to/router-key.pem

[http_auth_realm:default_auth_realm]
backend=default_auth_backend
method=basic
name=default_realm

[http_auth_backend:default_auth_backend]
backend=file
filename=/path/to/mysqlrouter.pwd

[rest_router]
require_realm=default_auth_realm

[rest_routing]
require_realm=default_auth_realm
# Generate password hash (prompts for password)
mysqlrouter_passwd set /path/to/mysqlrouter.pwd router_admin

Secure with OAuth

Secure MySQL Router operations using OAuth validation. See the OAuth page for setup instructions.


Optimize Your Enterprise Environment

Variable Default Description
MYSQL_ROUTER_URL https://localhost:8443 Router REST API base URL
MYSQL_ROUTER_USER - Router API username
MYSQL_ROUTER_PASSWORD - Router API password
MYSQL_ROUTER_API_VERSION Dynamic API version path
MYSQL_ROUTER_INSECURE false Skip TLS verification (for self-signed certs)

Warning

Never commit Router credentials to version control. Use environment variables or secure secrets management.


Seamless Server Integration

{
  "mcpServers": {
    "mysql-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@neverinfamous/mysql-mcp",
        "--transport",
        "stdio",
        "--allowed-io-roots",
        "C:/temp,/tmp",
        "--mysql",
        "mysql://user:password@localhost:3306/database"
      ],
      "env": {
        "MYSQL_ROUTER_URL": "https://router.example.com:8443",
        "MYSQL_ROUTER_USER": "router_admin",
        "MYSQL_ROUTER_PASSWORD": "router_password",
        "MYSQL_ROUTER_INSECURE": "true"
      }
    }
  }
}

Note

Global install users can substitute npx -y @neverinfamous/mysql-mcp with mysql-mcp.


Architect Workload Isolation

For environments requiring workload isolation:

{
  "mcpServers": {
    "mysql-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@neverinfamous/mysql-mcp",
        "--transport",
        "stdio",
        "--allowed-io-roots",
        "C:/temp,/tmp",
        "--mysql",
        "mysql://user:password@localhost:3306/database",
        "--tool-filter",
        "router"
      ]
    }
  }
}

This exposes only the Router management tools.

Note

OAuth requires the http transport. Desktop clients (such as Claude Desktop and Cursor) using mcp.json and stdio cannot natively use OAuth. See OAuth Configuration for details.


Accelerate Troubleshooting Resolution

Resolve "fetch failed" Error

Cause: Router REST API is unreachable or TLS handshake failed.

Solutions:

  1. Verify Router is running: docker ps | grep router
  2. Check Router logs: docker logs mysql-router
  3. Test API manually: curl -k -u router_admin:router_password https://localhost:8443/api/<api-version>/router/status
  4. Ensure MYSQL_ROUTER_INSECURE=true is set for self-signed certificates

Resolve 401 Unauthorized Error

Cause: Authentication failed. This usually means the InnoDB Cluster is not running.

Solutions:

  1. Start the InnoDB Cluster: docker compose -f innodb-cluster.yml up -d
  2. Reboot cluster from outage if needed: dba.rebootClusterFromCompleteOutage()
  3. Restart Router to reconnect: docker restart mysql-router
  4. Verify credentials match the router_rest_accounts table

Resolve GR Member Error

Cause: Cluster nodes are running but Group Replication is not active.

Solution: Reboot cluster from complete outage using MySQL Shell:

mysqlsh --uri cluster_admin:password@localhost:3307 --js \
  -e "dba.rebootClusterFromCompleteOutage('clusterName', {force: true})"

Resolve 404 Not Found

Cause: The connection pool name doesn't exist or connection pooling is disabled.

Solution: This is expected if Router lacks connection pooling configuration. The tool works correctly.


Explore Related Topics

MySQL MCP Documentation

Value Proposition Enforce strict execution boundaries and maximize LLM context efficiency for secure, autonomous database interactions. Read the full value proposition

🏠 Home


Launch Your Setup


Connect Ecosystem Tools


Security & Compliance


Scale Your Operations


Explore External Links

Clone this wiki locally