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 tomysql_password
: the password for the connecting usermysql_host
: the hostname of the server to connect tomysql_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: str, present: bool=True, collate: str | None=None, charset: str | None=None,
user: str | None=None, user_hostname: str="localhost",
user_privileges: str | list[str]="ALL", mysql_user: str | None=None,
mysql_password: str | None=None, mysql_host: str | None=None, mysql_port: int | None=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: str, database: str | None=None, mysql_user: str | None=None,
mysql_password: str | None=None, mysql_host: str | None=None, mysql_port: int | None=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: str, database: str | None=None, mysql_user: str | None=None,
mysql_password: str | None=None, mysql_host: str | None=None, mysql_port: int | None=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: str, privileges: str | list[str] | set[str], user_hostname="localhost",
database="*", table="*", flush=True, with_grant_option=False, mysql_user: str | None=None,
mysql_password: str | None=None, mysql_host: str | None=None, mysql_port: int | None=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: str, database: str | None=None, mysql_user: str | None=None,
mysql_password: str | None=None, mysql_host: str | None=None, mysql_port: int | None=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: str, present: bool=True, user_hostname: str="localhost", password: str | None=None,
privileges: str | list[str] | None=None, require: str | None=None,
require_cipher: str | None=None, require_issuer: str | None=None,
require_subject: str | None=None, max_connections: int | None=None,
max_queries_per_hour: int | None=None, max_updates_per_hour: int | None=None,
max_connections_per_hour: int | None=None, mysql_user: str | None=None,
mysql_password: str | None=None, mysql_host: str | None=None, mysql_port: int | None=None,
)