unsigned long long DbUtil::selectCountTable(const char * table) { BaseString query; SqlResultSet result; query.assfmt("select count(*) as count from %s", table); if (!doQuery(query, result)) { printError("select count(*) failed"); return -1; } return result.columnAsLong("count"); }
bool syncSlaveWithMaster() { /* We need to look at the MAX epoch of the mysql.ndb_binlog_index table so we will know when the slave has caught up */ SqlResultSet result; unsigned long long masterEpoch = 0; unsigned long long slaveEpoch = 0; unsigned long long slaveEpochOld = 0; int maxLoops = 100; int loopCnt = 0; //Create a DbUtil object for the master DbUtil master("mysql"); //Login to Master if (!master.connect()) { g_err << "sync connect to master failed" << endl; return false; } //Get max epoch from master if(!master.doQuery("SELECT MAX(epoch) FROM mysql.ndb_binlog_index", result)) { g_err << "Select max(epoch) SQL failed" << endl; return false; } masterEpoch = result.columnAsLong("epoch"); /* Now we will pull current epoch from slave. If not the same as master, we will continue to retrieve the epoch and compare until it matches or we reach the max loops allowed. */ //Create a dbutil object for the slave DbUtil slave("mysql", ".1.slave"); //Login to slave if (!slave.connect()) { g_err << "sync connect to slave failed" << endl; return false; } while(slaveEpoch != masterEpoch && loopCnt < maxLoops) { if(!slave.doQuery("SELECT epoch FROM mysql.ndb_apply_status",result)) { g_err << "Select epoch SQL on slave failed" << endl; return false; } result.print(); if (result.numRows() > 0) slaveEpoch = result.columnAsLong("epoch"); if(slaveEpoch != slaveEpochOld) { slaveEpochOld = slaveEpoch; if(loopCnt > 0) loopCnt--; sleep(3); } else { sleep(1); loopCnt++; } } if(slaveEpoch != masterEpoch) { g_err << "Slave not in sync with master!" << endl; return false; } return true; }