def test_on_mysql_newmaster_up(self): bus.queryenv_service = _QueryEnv() bus.platform = _Platform() config = bus.config sect_name = configtool.get_behaviour_section_name(mysql.BEHAVIOUR) config.set(sect_name, mysql.OPT_REPLICATION_MASTER, '0') handler = _MysqlHandler() root_pass, repl_pass, stat_pass = handler._add_mysql_users(mysql.ROOT_USER, mysql.REPL_USER, mysql.STAT_USER) handler._update_config( {mysql.OPT_ROOT_PASSWORD : root_pass, mysql.OPT_REPL_PASSWORD : repl_pass, mysql.OPT_STAT_PASSWORD : stat_pass}) message = _Message() if linux.os.redhat_family: daemon = "/usr/libexec/mysqld" else: daemon = "/usr/sbin/mysqld" initd.stop("mysql") myd = Popen([daemon, '--defaults-file=/etc/mysql2/my.cnf', '--skip-grant-tables'], stdin=PIPE, stdout=PIPE, stderr=STDOUT) ping_service(LOCAL_IP, 3306, 5) myclient = pexpect.spawn('/usr/bin/mysql -h'+LOCAL_IP) myclient.expect('mysql>') repl_password = re.sub('[^\w]','', cryptotool.keygen(20)) sql = "update mysql.user set password = PASSWORD('"+repl_password+"') where user = '******';" myclient.sendline(sql) myclient.expect('mysql>') result = myclient.before if re.search('ERROR', result): os.kill(myd.pid, signal.SIGTERM) raise BaseException("Cannot update user", result) myclient.sendline('FLUSH TABLES WITH READ LOCK;') myclient.expect('mysql>') # system('cp -pr /var/lib/mysql /var/lib/backmysql') # system('rm -rf /var/lib/mysql && cp -pr /var/lib/mysql2 /var/lib/mysql') myclient.sendline('SHOW MASTER STATUS;') myclient.expect('mysql>') # retrieve log file and position try: master_status = myclient.before.split('\r\n')[4].split('|') except: raise BaseException("Cannot get master status") finally: myclient.sendline('UNLOCK TABLES;') os.kill(myd.pid, signal.SIGTERM) myd = Popen([daemon, '--defaults-file=/etc/mysql2/my.cnf'], stdin=PIPE, stdout=PIPE, stderr=STDOUT) ping_service(LOCAL_IP, 3306, 5) message.log_file = master_status[1].strip() message.log_pos = master_status[2].strip() message.repl_user = mysql.REPL_USER message.repl_password = repl_password message.root_password = root_pass handler.on_Mysql_NewMasterUp(message) os.kill(myd.pid, signal.SIGTERM) initd.stop("mysql") system ('rm -rf /var/lib/mysql && cp -pr /var/lib/backmysql /var/lib/mysql && rm -rf /var/lib/backmysql') config.set(sect_name, mysql.OPT_REPLICATION_MASTER, '1')
def test_on_mysql_newmaster_up(self): bus.queryenv_service = _QueryEnv() bus.platform = _Platform() config = bus.config sect_name = configtool.get_behaviour_section_name(mysql.BEHAVIOUR) config.set(sect_name, mysql.OPT_REPLICATION_MASTER, '0') handler = _MysqlHandler() root_pass, repl_pass, stat_pass = handler._add_mysql_users(mysql.ROOT_USER, mysql.REPL_USER, mysql.STAT_USER) handler._update_config( {mysql.OPT_ROOT_PASSWORD : root_pass, mysql.OPT_REPL_PASSWORD : repl_pass, mysql.OPT_STAT_PASSWORD : stat_pass}) message = _Message() if disttool.is_redhat_based(): daemon = "/usr/libexec/mysqld" else: daemon = "/usr/sbin/mysqld" initd.stop("mysql") myd = Popen([daemon, '--defaults-file=/etc/mysql2/my.cnf', '--skip-grant-tables'], stdin=PIPE, stdout=PIPE, stderr=STDOUT) ping_service(LOCAL_IP, 3306, 5) myclient = pexpect.spawn('/usr/bin/mysql -h'+LOCAL_IP) myclient.expect('mysql>') repl_password = re.sub('[^\w]','', cryptotool.keygen(20)) sql = "update mysql.user set password = PASSWORD('"+repl_password+"') where user = '******';" myclient.sendline(sql) myclient.expect('mysql>') result = myclient.before if re.search('ERROR', result): os.kill(myd.pid, signal.SIGTERM) raise BaseException("Cannot update user", result) myclient.sendline('FLUSH TABLES WITH READ LOCK;') myclient.expect('mysql>') # system('cp -pr /var/lib/mysql /var/lib/backmysql') # system('rm -rf /var/lib/mysql && cp -pr /var/lib/mysql2 /var/lib/mysql') myclient.sendline('SHOW MASTER STATUS;') myclient.expect('mysql>') # retrieve log file and position try: master_status = myclient.before.split('\r\n')[4].split('|') except: raise BaseException("Cannot get master status") finally: myclient.sendline('UNLOCK TABLES;') os.kill(myd.pid, signal.SIGTERM) myd = Popen([daemon, '--defaults-file=/etc/mysql2/my.cnf'], stdin=PIPE, stdout=PIPE, stderr=STDOUT) ping_service(LOCAL_IP, 3306, 5) message.log_file = master_status[1].strip() message.log_pos = master_status[2].strip() message.repl_user = mysql.REPL_USER message.repl_password = repl_password message.root_password = root_pass handler.on_Mysql_NewMasterUp(message) os.kill(myd.pid, signal.SIGTERM) initd.stop("mysql") system ('rm -rf /var/lib/mysql && cp -pr /var/lib/backmysql /var/lib/mysql && rm -rf /var/lib/backmysql') config.set(sect_name, mysql.OPT_REPLICATION_MASTER, '1')
def tearDown(self): initd.stop("mysql") system('cp /etc/mysql/my.cnf /tmp/etc'+time.strftime("%d%b%H%M%S", time.gmtime())) system('rm -rf /etc/mysql/') system('rm -rf /var/lib/mysql') system('cp -pr /tmp/mysqletc/ /etc/mysql/ ') system('cp -pr /tmp/mysqldata/ /var/lib/mysql ') system('rm -rf /tmp/mysql*') system('rm -rf /mnt/dbstorage/*') system('rm -rf /mnt/tmpdir/*') initd.start("mysql") config = bus.config section = configtool.get_behaviour_section_name(mysql.BEHAVIOUR) try: config.remove_option(section, mysql.OPT_ROOT_USER) config.remove_option(section, mysql.OPT_ROOT_PASSWORD) config.remove_option(section, mysql.OPT_REPL_USER) config.remove_option(section, mysql.OPT_REPL_PASSWORD) config.remove_option(section, mysql.OPT_STAT_USER) config.remove_option(section, mysql.OPT_STAT_PASSWORD) except: pass