Mysql Operations

Manage MySQL databases, users and privileges.

Requires the mysql CLI executable on the target host(s).

All operations in this module take four optional arguments:
  • mysql_user: the username to connect to mysql to
  • mysql_password: the password for the connecting user
  • mysql_host: the hostname of the server to connect to
  • mysql_port: the port of the server to connect to

See the example/mysql.py

Facts used in these operations: mysql.MysqlDatabases, mysql.MysqlUserGrants, mysql.MysqlUsers.

mysql.database

mysql.database(
    database, present=True, collate=None, charset=None, user=None, user_hostname="localhost",
    user_privileges="ALL", mysql_user=None, mysql_password=None, mysql_host=None,
    mysql_port=None,
)

mysql.dump

Stateless operation

This operation will always execute commands and is not idempotent.

Dump a MySQL database into a .sql file. Requires mysqldump.

mysql.dump(
    dest, database=None, mysql_user=None, mysql_password=None, mysql_host=None,
    mysql_port=None,
)
  • dest: name of the file to dump the SQL to
  • database: name of the database to dump
  • mysql_*: global module arguments, see above

Example:

mysql.dump(
    name="Dump the pyinfra_stuff database",
    dest="/tmp/pyinfra_stuff.dump",
    database="pyinfra_stuff",
)

mysql.load

Stateless operation

This operation will always execute commands and is not idempotent.

Load .sql file into a database.

mysql.load(src, database=None, mysql_user=None, mysql_password=None, mysql_host=None, mysql_port=None)
  • src: the filename to read from
  • database: name of the database to import into
  • mysql_*: global module arguments, see above

Example:

mysql.load(
    name="Import the pyinfra_stuff dump into pyinfra_stuff_copy",
    src="/tmp/pyinfra_stuff.dump",
    database="pyinfra_stuff_copy",
)

mysql.privileges

Add/remove MySQL privileges for a user, either global, database or table specific.

mysql.privileges(
    user, privileges, user_hostname="localhost", database="*", table="*", flush=True,
    with_grant_option=False, mysql_user=None, mysql_password=None, mysql_host=None,
    mysql_port=None,
)
  • user: name of the user to manage privileges for
  • privileges: list of privileges the user should have (see also: with_grant_option argument)
  • user_hostname: the hostname of the user
  • database: name of the database to grant privileges to (defaults to all)
  • table: name of the table to grant privileges to (defaults to all)
  • flush: whether to flush (and update) the privileges table after any changes
  • with_grant_option: whether the grant option privilege should be set
  • mysql_*: global module arguments, see above

mysql.sql

Stateless operation

This operation will always execute commands and is not idempotent.

Execute arbitrary SQL against MySQL.

mysql.sql(sql, database=None, mysql_user=None, mysql_password=None, mysql_host=None, mysql_port=None)
  • sql: SQL command(s) to execute
  • database: optional database to open the connection with
  • mysql_*: global module arguments, see above

mysql.user

mysql.user(
    user, present=True, user_hostname="localhost", password=None, privileges=None,
    require=None, require_cipher=None, require_issuer=None, require_subject=None,
    max_connections=None, max_queries_per_hour=None, max_updates_per_hour=None,
    max_connections_per_hour=None, mysql_user=None, mysql_password=None, mysql_host=None,
    mysql_port=None,
)