diff --git a/database/mysql_replication b/database/mysql_replication index 68357e3755e..f3345595ec8 100644 --- a/database/mysql_replication +++ b/database/mysql_replication @@ -13,7 +13,7 @@ Ansible is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - + Ansible is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -27,14 +27,14 @@ DOCUMENTATION = ''' module: mysql_replication short_description: Manage MySQL replication -description: - - Manages MySQL server replication, slave, master status get and change master host. +description: + - Manages MySQL server replication, slave, master status get and change master host. options: mode: description: - module operating mode. Could be getslave (SHOW SLAVE STATUS), getmaster (SHOW MASTER STATUS), changemaster (CHANGE MASTER TO), startslave (START SLAVE), stopslave (STOP SLAVE) required: False - choices: + choices: - getslave - getmaster - changemaster @@ -105,6 +105,17 @@ options: ''' +EXAMPLES = ''' +# Stop mysql slave thread +- mysql_replication: mode=stopslave + +# Get master binlog file name and binlog position +- mysql_replication: mode=getmaster + +# Change master to master server 192.168.1.1 and use binary log 'mysql-bin.000009' with position 4578 +- mysql_replication: mode=changemaster master_host=192.168.1.1 master_log_file=mysql-bin.000009 master_log_pos=4578 +''' + import ConfigParser import os import warnings @@ -139,7 +150,7 @@ def stop_slave(cursor): def start_slave(cursor): - try: + try: cursor.execute("START SLAVE") started = True except: @@ -281,7 +292,7 @@ def main(): if module.params["login_unix_socket"]: db_connection = MySQLdb.connect(host=module.params["login_host"], unix_socket=module.params["login_unix_socket"], user=login_user, passwd=login_password, db="mysql") else: - db_connection = MySQLdb.connect(host=module.params["login_host"], user=login_user, passwd=login_password, db="mysql") + db_connection = MySQLdb.connect(host=module.params["login_host"], user=login_user, passwd=login_password, db="mysql") cursor = db_connection.cursor() except Exception, e: module.fail_json(msg="unable to connect to database, check login_user and login_password are correct or ~/.my.cnf has the credentials") @@ -289,67 +300,67 @@ def main(): if mode in "getmaster": masterstatus = get_master_status(cursor) try: - module.exit_json( - File=masterstatus[0], - Position=masterstatus[1], - Binlog_Do_DB=masterstatus[2], - Binlog_Ignore_DB=masterstatus[3] - ) + module.exit_json( + File=masterstatus[0], + Position=masterstatus[1], + Binlog_Do_DB=masterstatus[2], + Binlog_Ignore_DB=masterstatus[3] + ) except TypeError: module.fail_json(msg="Server is not configured as mysql master") elif mode in "getslave": slavestatus = get_slave_status(cursor) try: - module.exit_json( - Slave_IO_State=slavestatus[0], - Master_Host=slavestatus[1], - Master_User=slavestatus[2], - Master_Port=slavestatus[3], - Connect_Retry=slavestatus[4], - Master_Log_File=slavestatus[5], - Read_Master_Log_Pos=slavestatus[6], - Relay_Log_File=slavestatus[7], - Relay_Log_Pos=slavestatus[8], - Relay_Master_Log_File=slavestatus[9], - Slave_IO_Running=slavestatus[10], - Slave_SQL_Running=slavestatus[11], - Replicate_Do_DB=slavestatus[12], - Replicate_Ignore_DB=slavestatus[13], - Replicate_Do_Table=slavestatus[14], - Replicate_Ignore_Table=slavestatus[15], - Replicate_Wild_Do_Table=slavestatus[16], - Replicate_Wild_Ignore_Table=slavestatus[17], - Last_Errno=slavestatus[18], - Last_Error=slavestatus[19], - Skip_Counter=slavestatus[20], - Exec_Master_Log_Pos=slavestatus[21], - Relay_Log_Space=slavestatus[22], - Until_Condition=slavestatus[23], - Until_Log_File=slavestatus[24], - Until_Log_Pos=slavestatus[25], - Master_SSL_Allowed=slavestatus[26], - Master_SSL_CA_File=slavestatus[27], - Master_SSL_CA_Path=slavestatus[28], - Master_SSL_Cert=slavestatus[29], - Master_SSL_Cipher=slavestatus[30], - Master_SSL_Key=slavestatus[31], - Seconds_Behind_Master=slavestatus[32], - Master_SSL_Verify_Server_Cert=slavestatus[33], - Last_IO_Errno=slavestatus[34], - Last_IO_Error=slavestatus[35], - Last_SQL_Errno=slavestatus[36], - Last_SQL_Error=slavestatus[37], - Replicate_Ignore_Server_Ids=slavestatus[38], - Master_Server_Id=slavestatus[39] - ) + module.exit_json( + Slave_IO_State=slavestatus[0], + Master_Host=slavestatus[1], + Master_User=slavestatus[2], + Master_Port=slavestatus[3], + Connect_Retry=slavestatus[4], + Master_Log_File=slavestatus[5], + Read_Master_Log_Pos=slavestatus[6], + Relay_Log_File=slavestatus[7], + Relay_Log_Pos=slavestatus[8], + Relay_Master_Log_File=slavestatus[9], + Slave_IO_Running=slavestatus[10], + Slave_SQL_Running=slavestatus[11], + Replicate_Do_DB=slavestatus[12], + Replicate_Ignore_DB=slavestatus[13], + Replicate_Do_Table=slavestatus[14], + Replicate_Ignore_Table=slavestatus[15], + Replicate_Wild_Do_Table=slavestatus[16], + Replicate_Wild_Ignore_Table=slavestatus[17], + Last_Errno=slavestatus[18], + Last_Error=slavestatus[19], + Skip_Counter=slavestatus[20], + Exec_Master_Log_Pos=slavestatus[21], + Relay_Log_Space=slavestatus[22], + Until_Condition=slavestatus[23], + Until_Log_File=slavestatus[24], + Until_Log_Pos=slavestatus[25], + Master_SSL_Allowed=slavestatus[26], + Master_SSL_CA_File=slavestatus[27], + Master_SSL_CA_Path=slavestatus[28], + Master_SSL_Cert=slavestatus[29], + Master_SSL_Cipher=slavestatus[30], + Master_SSL_Key=slavestatus[31], + Seconds_Behind_Master=slavestatus[32], + Master_SSL_Verify_Server_Cert=slavestatus[33], + Last_IO_Errno=slavestatus[34], + Last_IO_Error=slavestatus[35], + Last_SQL_Errno=slavestatus[36], + Last_SQL_Error=slavestatus[37], + Replicate_Ignore_Server_Ids=slavestatus[38], + Master_Server_Id=slavestatus[39] + ) except TypeError: module.fail_json(msg="Server is not configured as mysql slave") - + elif mode in "changemaster": print "Change master" chm=[] - if master_host: + if master_host: chm.append("MASTER_HOST='" + master_host + "'") if master_user: chm.append("MASTER_USER='" + master_user + "'")