Ejemplo n.º 1
0
def destroy_slave_host_info(argv):
    '''
	dest = slave only
	'''

    myIP = network.getMyIPAddr()

    db = MySQLdb.connect("localhost", "root", setting.DB_ROOT_PASSWORD)
    cursor = db.cursor()
    cursor.execute("SLAVE STOP;")

    cursor.execute("DROP DATABASE IF EXISTS %s" %
                   (setting.DB_NAME))  #this line was added later

    db.close()
    dbController.stop()

    infoHost = cacheFile.getDatabaseIP()
    db = MySQLdb.connect(infoHost, setting.DB_USERNAME, setting.DB_PASSWORD,
                         setting.DB_NAME)
    cursor = db.cursor()
    cursor.execute(
        "UPDATE `hosts` SET `isInformationServer`=0 WHERE `IPAddress`='%s'" %
        (str(myIP)))
    db.close()

    dbController.broadcastNewSlaveInformationServer('-')

    return 'OK'
Ejemplo n.º 2
0
def you_are_information_server(argv):
    '''
	dest = master only
	start up database service, create table
	'''
    conn = argv[0][0]
    s = argv[0][1]
    #get parameter
    #rootpassword=argv[1]
    #dbname=argv[2]

    dbController.setMasterConfig(
    )  #very important for make it can be connected via remote host
    dbController.stop()
    dbController.start(setting.DB_ROOT_PASSWORD, conn, s)
    dbController.createDB(setting.DB_ROOT_PASSWORD, setting.DB_NAME)

    print dbController.createInitialTables('root', setting.DB_ROOT_PASSWORD,
                                           setting.DB_NAME)

    #This line allow robot user to connect to database
    dbController.createUser(setting.DB_ROOT_PASSWORD, setting.DB_USERNAME,
                            setting.DB_PASSWORD)

    return 'OK'
Ejemplo n.º 3
0
def wake_up_database(argv):
    '''
	check that this is real database or not (and start it if it is real)
	'''
    conn = argv[0][0]
    s = argv[0][1]

    myMAC = network.getMyMACAddr()
    dbMAC = cacheFile.getDatabaseMAC()
    if str(dbMAC) != str(myMAC):
        return str(dbMAC)  #recomendation

    dbController.start(setting.DB_ROOT_PASSWORD, conn, s)

    try:
        db = MySQLdb.connect("localhost", "root", setting.DB_ROOT_PASSWORD,
                             setting.DB_NAME)
        cursor = db.cursor()

        cursor.execute(
            "SELECT `MACAddress` FROM `hosts` WHERE `isInformationServer`=1")
        ans = cursor.fetchone()[0]
        if ans == str(myMAC):
            #yes this is real
            return "OK"
        else:
            return ans  #recomendation
    except:
        dbController.stop()
        return "Sorry, this is not a real database"
Ejemplo n.º 4
0
def you_are_slave_db(argv):
    '''
	dest = slave only
	'''
    conn = argv[0][0]
    s = argv[0][1]

    masterHost = argv[1]
    fileData = argv[2]
    positionData = argv[3]

    dumpString = argv[4]
    dumpFile = open(setting.DB_DUMP_FILE, 'w')
    dumpFile.write(dumpString)
    dumpFile.close()

    dbController.setSlaveConfig(
        str(masterHost
            ))  #very important for make it can be connected via remote host
    dbController.stop()
    dbController.start(setting.DB_ROOT_PASSWORD, conn, s)
    dbController.createDB(setting.DB_ROOT_PASSWORD, setting.DB_NAME,
                          True)  #drop and create new database
    print "before runSQL"
    dumpResult = dbController.runSQL(setting.DB_DUMP_FILE, "root",
                                     setting.DB_ROOT_PASSWORD, setting.DB_NAME,
                                     "localhost")
    if dumpResult == False:
        return "runSQL error, please check .sql file"

    db = MySQLdb.connect("localhost", "root", setting.DB_ROOT_PASSWORD)
    cursor = db.cursor()
    cursor.execute("SLAVE STOP;")
    cursor.execute(
        "CHANGE MASTER TO MASTER_HOST='%s', MASTER_USER='******', MASTER_PASSWORD='******', MASTER_LOG_FILE='%s', MASTER_LOG_POS=%s;"
        % (str(masterHost), setting.DB_USERNAME, setting.DB_PASSWORD, fileData,
           positionData))
    print "before slave start"
    cursor.execute("SLAVE START;")

    db.close()

    print "after slave start"

    os.remove(setting.DB_DUMP_FILE)

    return 'OK'
Ejemplo n.º 5
0
def turn_slave_to_master_db(argv):
    '''
	dest = slave only
	1. turn
	2. update db
	3. tell every host
	'''
    conn = argv[0][0]
    s = argv[0][1]

    myIP = network.getMyIPAddr()
    myMAC = network.getMyMACAddr()

    db = MySQLdb.connect("localhost", "root", setting.DB_ROOT_PASSWORD)
    cursor = db.cursor()
    cursor.execute("SLAVE STOP;")
    db.close()

    dbController.setMasterConfig()
    dbController.stop()
    dbController.start(setting.DB_ROOT_PASSWORD, conn, s)

    dbController.createUser(setting.DB_ROOT_PASSWORD, setting.DB_USERNAME,
                            setting.DB_PASSWORD)

    db = MySQLdb.connect("localhost", "root", setting.DB_ROOT_PASSWORD)
    cursor = db.cursor()
    cursor.execute(
        "UPDATE `hosts` SET `isInformationServer`=1 WHERE `IPAddress`='%s'" %
        (str(myIP)))
    db.close()

    dbController.broadcastNewMasterInformationServer(str(myIP), str(myMAC))

    #should create new slave if there is another active host

    return 'OK'
Ejemplo n.º 6
0
def stop_database_server(argv):
    '''
	nothing more than stop mysqld
	'''
    dbController.stop()
    return 'OK'
Ejemplo n.º 7
0
def migrate_database_to(argv):
    '''
	this method must be called at master database only
	and should be call after finish NFS system
	1. destroy slave
	2. dump and send to targetHost to create new master
	3. stop mysqld service
	'''
    targetHostIP = argv[0]

    #find slave to destroy from my database
    db = MySQLdb.connect("localhost", "root", setting.DB_ROOT_PASSWORD,
                         setting.DB_NAME)
    cursor = db.cursor()
    cursor.execute(
        "SELECT `IPAddress` FROM `hosts` WHERE `isInformationServer`=2")
    activeSlave = cursor.fetchone()
    if activeSlave != None:
        slaveIP = activeSlave[0]
        connection.socketCall(targetHostIP, setting.LOCAL_PORT,
                              'destroy_slave_host_info')

    myIP = network.getMyIPAddr()

    cursor.execute("FLUSH TABLES WITH READ LOCK;")

    result = subprocess.Popen(
        shlex.split("mysqldump %s -u root --password='******'" %
                    (setting.DB_NAME, setting.DB_ROOT_PASSWORD)),
        stdout=subprocess.PIPE)
    #result.wait()
    output = result.communicate()[0]

    #dumpFile=open(setting.DB_NFS_DUMP_FILE,'w')
    #dumpFile.write(output)
    #dumpFile.close()

    result = connection.socketCall(targetHostIP, setting.LOCAL_PORT,
                                   'you_are_db_migration_destination',
                                   ['{socket_connection}', output])
    cursor.execute("UNLOCK TABLES;")

    cursor.execute("DROP DATABASE IF EXISTS %s" %
                   (setting.DB_NAME))  #this line was added later

    db.close()

    if result == 'OK':
        dbController.stop()

        db = MySQLdb.connect(targetHostIP, setting.DB_USERNAME,
                             setting.DB_PASSWORD, setting.DB_NAME)
        cursor = db.cursor()
        cursor.execute(
            "UPDATE `hosts` SET `isInformationServer`=0 WHERE `IPAddress`='%s'"
            % (str(myIP)))
        db.close()

        dbController.broadcastNewMasterInformationServer(targetHostIP)

        return 'OK'
    else:
        return result