DriversRecommendedOutdated drivers can make a good PC feel brokenScan driver issues before chasing fixes manually.Scan NowHalloween DealsAmazon USHalloween week deals: useful picks before month-endAmazon US: current deals, useful picks and tech finds.Check DealsWindows FixRecommendedWindows errors stealing your time? Find the fix fastScan stability, cleanup and performance issues.Fix Now×
FREEDOM251

Freedom251 › Blog › bind_address

How to Allow MySQL Remote Connections in 2026: Listener, Network, Account, and TLS

By Freedom251 Team · · 8 min read

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

To let another machine connect to a MySQL server, four things have to line up: the server must listen on an address that other machines can reach, the network must pass the traffic to the MySQL port, the MySQL account must match the connecting host, and the connection should be encrypted with TLS. Missing any one of these produces a failure that looks similar from the client side, which is why the usual fix of opening port 3306 to every address is both unnecessary and risky. This guide walks through each layer in order, using the MySQL 8.4 Reference Manual as the technical baseline. Where behavior depends on your operating system or hosting provider, the steps say so rather than assuming a single setup.

Start by identifying where MySQL runs

The first decision is whether you control the database server or use a managed database service. On a self-managed server, you edit the MySQL configuration, the host firewall, and the account definitions yourself. On a managed service, the provider usually controls the listener and the network perimeter through its own console or API, and the MySQL-level steps (creating accounts, grants, and TLS requirements) still apply. Check your provider’s current documentation before following any listener or firewall instructions, because those controls are not the same across providers.

As an Amazon Associate I earn from qualifying purchases.

Confirm the client connects over TCP/IP

Remote MySQL connections use the TCP/IP transport. The MySQL 8.4 manual on connection transport protocols states that “TCP/IP transport supports connections to local or remote MySQL servers.” A Unix domain socket is only usable on the same machine.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

On Unix-like systems, a client that specifies localhost normally uses the socket file rather than the network, so a test that appears to work locally may prove nothing about remote access. Use the server’s hostname or IP address, and when diagnosing, force TCP explicitly with --protocol=TCP, as documented in the MySQL 8.4 connection options reference.

Set the server listener with bind_address

The bind_address system variable controls which address or addresses the server listens on for TCP/IP connections. It is read at server startup and is not changed on a running server in the MySQL 8.4 variable reference, so any change requires a restart. Details are in the MySQL 8.4 server system variables reference.

Choosing a bind value

  • A specific server IP address (for example, the address of a private network interface) limits the listener to that interface. This is the narrowest option that still allows remote clients on that network.
  • * listens on all server IPv4 interfaces and, where available, IPv6 interfaces.
  • 0.0.0.0 listens on all IPv4 interfaces.
  • :: covers IPv4 and IPv6 interfaces under the documented behavior.

A broad bind value makes the listener reachable on every interface the host has, including any public one. That is not automatically unsafe, but it means the firewall and network policy become the only thing limiting exposure. Choose the narrowest address that serves your clients, and keep administrative access (SSH, console, or a local socket connection) working before you restart with a narrower bind.

Making and checking the change

  1. Open the MySQL configuration file your installation uses. The file location and section name vary by distribution and packaging, so confirm them against your platform’s MySQL installation documentation.
  2. Under the server section, set bind-address to the address you chose, for example bind-address = 10.0.0.15. Use the value that is appropriate for your host; the example address is only illustrative.
  3. Restart the MySQL service using your platform’s service manager.
  4. From an administrative session, run SHOW VARIABLES LIKE 'bind_address'; and confirm the value you set.
  5. Confirm that the server is listening on the expected address and port 3306, using a socket-listing tool available on your platform (on many Linux systems, ss -ltn).

Allow only the intended network sources

A listener that accepts connections is not enough: every network device between the client and the server must allow the traffic. That includes the host firewall, any network security group or access-control list at the cloud or data-center layer, routing, and any upstream firewall. The rule should name the source that actually needs access, such as an application server’s private IP or a specific subnet, and the destination port (3306 unless you changed it).

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The exact commands and console steps depend on your operating system, firewall tool, and hosting provider, and the MySQL manual does not prescribe one. Do not treat a rule that allows every source address as the standard fix for a connection timeout. A timeout usually means the traffic is being dropped somewhere in the path, and the fix is to find that point and add a rule for the specific source, not to remove the restriction altogether.

Create a host-qualified MySQL account

Why the host part matters

MySQL identifies an account by both a username and a host. An account named 'app_user'@'203.0.113.25' is a different account from 'app_user'@'localhost', and the server accepts a login only when the connecting client’s host matches a defined account. The account-management model is described in the MySQL 8.4 access control reference. The host the server sees is the address of the connecting client, which may differ from what you expect if network address translation or a proxy sits in between.

Create the account and grant only what it needs

Use CREATE USER to define the account and GRANT to give it privileges. A newly created account has no privileges, so a login may succeed while every query fails until you grant access. The CREATE USER statement reference and the GRANT statement reference cover the full syntax. A representative pattern, using placeholder values you should replace, looks like this:

CREATE USER 'app_user'@'203.0.113.25'
  IDENTIFIED BY 'use-a-secret-from-your-secret-manager'
  REQUIRE SSL;

GRANT SELECT, INSERT, UPDATE, DELETE
  ON app_db.*
  TO 'app_user'@'203.0.113.25';

Choose the host part deliberately. A single client address is the tightest match. A subnet pattern such as '10.0.1.%' covers a range but grants access to every host in it, so use it only when the range is genuinely controlled. Limit privileges to the database and operations the application needs; the example grants no administrative or schema-changing rights.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

What to avoid

  • Do not use root for application access. Routine clients should use a dedicated account with narrow grants.
  • Do not treat '%' as a harmless default. A wildcard host lets the account connect from any address that passes the network layer, which removes one of the four controls.
  • Do not run FLUSH PRIVILEGES as a routine step after CREATE USER or GRANT. Use the account-management statements instead of editing grant tables directly.
  • Be careful with cleartext passwords. The MySQL manual notes that CREATE USER statements can, in some circumstances, expose cleartext passwords in server logs or in ~/.mysql_history. Load the password from a secret store or prompt for it rather than typing it into a command line.

Require encrypted transport

A correct password does not protect the traffic itself. Without TLS, queries and result sets cross the network in a form that can be read by anyone with access to the path, so the MySQL manual recommends encrypted connections for network access. MySQL 8.4 supports TLS 1.2 and TLS 1.3 for connections; TLS 1.0 and 1.1 are not supported in this version, as described in the MySQL 8.4 TLS protocols and ciphers reference.

Choose the enforcement layer

You can require encryption at the account, the server, or the client. The configuration guide for encrypted connections describes how the server is set up for TLS. The table below compares the three layers.

Layer Where it is set What it guarantees What it does not guarantee
Account REQUIRE SSL CREATE USER or ALTER USER Logins for that account must use an encrypted connection. Other accounts are not affected, and the client’s server certificate is not verified.
Server require_secure_transport=ON Server configuration The server rejects unencrypted TCP/IP connections for all clients. Clients that cannot negotiate TLS will fail to connect, and certificate checking is not enforced by this setting alone.
Client --ssl-mode=REQUIRED Client command line or client configuration The client refuses to proceed without encryption. It protects only clients that set it, and it does not by itself check the server certificate.

Add certificate verification when you can

Encryption without verification can still be exposed to a machine-in-the-middle attack, because the client does not confirm who it is talking to. The client’s --ssl-mode option accepts VERIFY_CA, which checks the server certificate against a trusted certificate authority, and VERIFY_IDENTITY, which also checks that the certificate matches the hostname you connected to. Both require a correctly configured CA and a hostname that matches the certificate. Use them where your certificate setup supports it, and use REQUIRED only when you have confirmed that the trade-off is acceptable.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Connect and verify

  1. From the client machine, run a TCP connection with encryption required and prompt for the password:
    mysql --host=DB_HOST --port=3306 --protocol=TCP --user=app_user --ssl-mode=REQUIRED -p
  2. After login, run SELECT CURRENT_USER(); and confirm that the account and host match the account you created.
  3. Run SHOW SESSION STATUS LIKE 'Ssl_cipher';. A non-empty value confirms that the session is encrypted.
  4. Run one operation the account should be allowed to perform, then one it should not (for example, DROP DATABASE app_db;). The second should fail with a privilege error.

Verify from a client machine that is actually outside the server, not from the server itself, so that the test exercises the network path.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Troubleshoot by layer

Errors from remote clients usually look similar, so start by identifying which layer produced the failure. A timeout or refusal occurs before MySQL authenticates the client. An “Access denied” or privilege error means the server received the connection and rejected the account or the statement.

Symptom Likely layer First check
Connection times out Network path or firewall Confirm that security rules and the host firewall allow the client’s source address to reach port 3306. A TCP port test from the client (for example, nc -vz DB_HOST 3306 where nc is installed) helps separate network from MySQL problems.
Connection refused Listener Confirm that the MySQL service is running and that bind_address includes the address the client uses.
Access denied for user 'app_user'@'x.x.x.x' Account host or credentials Compare the host in the error with the host in your CREATE USER statement. A mismatch often indicates address translation or a proxy.
Login succeeds but queries fail with a privilege error Grants Run SHOW GRANTS FOR 'app_user'@'203.0.113.25'; and check the database and operations.
SSL or secure-transport errors TLS negotiation or certificate Check the client’s --ssl-mode, the account’s REQUIRE setting, and the CA and hostname if you used a verification mode.

The account-management model in the MySQL manual separates whether a connection is verified from which statements the account may run, which is why a successful login is not evidence that the grants are correct.

Scope of these steps

These instructions follow the MySQL 8.4 Reference Manual. Version-specific behavior, such as the TLS versions listed above, applies to MySQL 8.4; check the manual for your release before relying on it. Operating-system file paths, service names, firewall commands, and cloud security settings differ by platform, so verify those against your platform’s documentation.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

bind_addressdatabase securityMySQLMySQL 8.4Remote AccessTLS

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Recommended PC Tool
Recommended PC Tool
Windows Errors? Fix Them Before They SpreadFree repair scan
Crashes, No Sound, or Screen Glitches?Free driver scan

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.