MySQL

Connect & Ingest data from / to a MySQL database

Setup

The following credentials keys are accepted:

  • host (required) -> The hostname / ip of the instance

  • user (required) -> The username to access the instance

  • database (required) -> The database name of the instance

  • schema (optional) -> The default schema to use

  • password (optional) -> The password to access the instance. If you're having issues with a special character in the password, try using the url by encoding the special character.

  • port (optional) -> The port of the instance. Default is 3306.

  • ssh_tunnel (optional) -> The URL of the SSH server you would like to use as a tunnel (example ssh://user:[email protected]:22)

  • ssh_private_key (optional) -> The private key to use to access a SSH server (raw string or path to file).

  • ssh_passphrase (optional) -> The passphrase to use to access a SSH server.

  • innodb_lock_wait_timeout -> The timeout in seconds for InnoDB row lock waits (integer, default: 50). Increase this value if you encounter Lock wait timeout exceeded errors during upsert/merge operations with concurrent writes.

Google Cloud SQL IAM Authentication (v1.4.25+)

For Google Cloud SQL MySQL instances with IAM authentication enabled, you can use the following properties:

  • gcp_instance (required) -> The Cloud SQL instance name

  • gcp_project (required) -> The GCP project ID

  • gcp_region (required) -> The GCP region (e.g., us-central1)

  • user (required) -> The IAM user or service account name (short format, e.g., my-sa)

  • gcp_key_file (optional) -> Path to the GCP service account credentials JSON file

  • gcp_key_body (optional) -> The GCP service account credentials JSON content as a string

  • gcp_use_iam_auth (required) -> Must be set to true to enable IAM authentication

  • gcp_lazy_refresh (optional) -> Enable lazy refresh for serverless environments (true or false). Default is false.

  • gcp_use_private_ip (optional) -> Use private IP for the connection (true or false). Default is false.

Authentication Methods (in priority order):

  1. If gcp_key_body is provided, uses the JSON credentials directly

  2. If gcp_key_file is provided, uses the credentials file

  3. Otherwise, uses Application Default Credentials (ADC)

Important Notes:

  • When using IAM authentication, do NOT provide a password - authentication is handled via IAM tokens

  • The user field should be the short format (e.g., my-sa, not [email protected])

  • MySQL has a 32-character username limit

  • The service account must have the Cloud SQL Client role

Additional Parameters. See here for more details:

  • allow_all_files -> Allows using LOCAL DATA INFILE without restrictions (true or false)

  • allow_cleartext_passwords -> Permits sending passwords in clear text (true or false)

  • allow_fallback_to_plaintext -> Allows fallback to unencrypted connection if server doesn't support TLS (true or false)

  • allow_native_passwords -> Enables the native password authentication method (true or false)

  • allow_old_passwords -> Allows the old insecure password method (true or false)

  • charset -> Sets the charset for server-side prepared statements (e.g., utf8mb4)

  • check_conn_liveness -> Checks connection liveness before using it (true or false)

  • collation -> Sets the collation for server-side prepared statements (e.g., utf8mb4_general_ci)

  • client_found_rows -> Returns number of matching rows instead of rows changed (true or false)

  • columns_with_alias -> Prepares result columns as if they have an alias (true or false)

  • interpolate_params -> Interpolates placeholders instead of using prepared statements (true or false)

  • loc -> Sets the location for time.Time values (e.g., Local, UTC, or a time zone name)

  • time_truncate -> Truncates time values to the given precision (true or false)

  • max_allowed_packet -> Max packet size allowed (integer value in bytes)

  • multi_statements -> Allows multiple statements in one query (true or false)

  • parse_time -> Converts TIME/DATE/DATETIME to time.Time (true or false)

  • read_timeout -> I/O read timeout (duration string, e.g., 30s, 0.5m, 1h)

  • reject_read_only -> Rejects read-only connections (true or false)

  • server_pub_key -> Server public key name (string)

  • timeout -> Timeout for establishing connections (duration string, e.g., 30s, 0.5m, 1h)

  • write_timeout -> I/O write timeout (duration string, e.g., 30s, 0.5m, 1h)

  • connection_attributes -> Connection attributes to send to MySQL (comma-separated list of key-value pairs)

  • tls -> TLS configuration name (true, false, skip-verify, or custom when providing cert_* keys below)

Custom TLS Certificates:

  • cert_file (optional) -> the client certificate to use to access the instance via TLS (file path or raw)

  • cert_key_file (optional) -> the client key to use to access the instance via TLS (file path or raw)

  • cert_ca_file (optional) -> the client CA certificate to use to access the instance via TLS (file path or raw)

Using sling conns

Here are examples of setting a connection named MYSQL. We must provide the type=mysql property:

Environment Variable

Sling Env File YAML

See here to learn more about the sling env.yaml file.

Database user creation

To allow Sling to access your database, we need to create a user with the proper privileges. Please follow the steps below:

  1. First you'll need to login as a user with CREATE USER and GRANT OPTION privileges. Create a user sling (or whatever you prefer) by running :

  2. If you are planning to load data into this connection, you need to grant the following privileges to that user so we can create tables in schema sling:

  3. If you are planning to extract data from this connection, you need to give permission to read the tables you'd like Sling to extract.

If you are facing issues connecting, please reach out to us at [email protected], on discord or open a Github Issue here.

Last updated

Was this helpful?