因为业务需要,主从复制时,只须复制主服务器上某个库的数据,此时设置replicate-do-db=db_name,就可以了.不过在校验数据的时候发现漏掉N多数据....
检查主库binlog文件,发现很多写操作都不是在本库执行的,比如我只复制主服务器上的A库,可是有很多写入操作都是在B库上执行的,这样这些写入操作全部都丢失了.....
查看dev.mysql.com找到replicate-wild-do-table=db_name.%,将它添加到从库mysql.cnf,重启,问题依旧....
最后,将replicate-do-db=db_name注释掉,再次测试成功.
下面是测试代码:
package com.gyyx.service;
import java.sql.Connection;
import java.sql.SQLException;
import com.gyyx.commons.Log;
import com.gyyx.dbutility.Ibatis;
/**
* only for test
* @author tudou@gyyx
* 2012-02-21
*/
public class TestService {
/**
* @param args
* @throws
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Connection conn = null;
Connection testconn = null;
try {
conn = Ibatis.getConn("161repl");
testconn = Ibatis.getConn("161test");
for(int i=0;i<10*10000;i++){
String sql="insert into test.ibdtest (fid,content,mark) values ("+i+",'sldkjfdsrtytpoytryitryxcvbvcbvcb','sdfhwefeiouhskjdfkdsjfsdf')";
String repsql="insert into reptest.ibdtest (fid,content,mark) values ("+i+",'sldkjfdsrtytpoytryitryxcvbvcbvcb','sdfhwefeiouhskjdfkdsjfsdf')";
Ibatis.executeNonQuery(conn, sql);
Ibatis.executeNonQuery(conn, repsql);
sql="insert into ibdtest (fid,content,mark) values ("+i+",'sldkjfdsrtytpoytryitryxcvbvcbvcb','sdfhwefeiouhskjdfkdsjfsdf')";
repsql="insert into ibdtest1 (fid,content,mark) values ("+i+",'sldkjfdsrtytpoytryitryxcvbvcbvcb','sdfhwefeiouhskjdfkdsjfsdf')";
Ibatis.executeNonQuery(testconn, sql);
Ibatis.executeNonQuery(testconn, repsql);
}
} catch (SQLException e) {
Log.logError(e);
}finally{
try {
conn.close();
testconn.close();
} catch (SQLException e) {
Log.logError(e);
}
}
}
}
最后的测试图:
主库数据
从库数据