此需求的可能性:

做所有的数据库同步需要很多无用的空间,如果仅仅用到其中一个数据库,那就做一个数据库的同步就足够了。

步骤一 主数据库开通replication用户

按需求不一样名称和密码以及IP不同:
CREATE USER 'slave'@'192.168.1.2' IDENTIFIED BY '***';
GRANT REPLICATION SLAVE ON * . * TO 'slave'@'192.168.1.2' IDENTIFIED BY '***' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;


步骤二 取得当前数据备份,备份mysql库和你要的database2

方式1 从master取得

FLUSH TABLES WITH READ LOCK; //锁定所有表
show master status; //取得当前日志点
//打包文件或者是直接导出数据,比停止服务好的地方就是有一段读数据库的时间
unlock tables; //解锁


方式2 从只读的slave取得(假设可以暂停同步一些时间)
slave stop; //先停止同步
show slave status; //取得当前日志点
//打包文件或者是直接导出数据
slave start; //解锁


注:日志点要拿到如下信息:
Master_Log_File: mysql-bin.000019
Read_Master_Log_Pos: 154055761

注:全部是MyISAM的表,可以直接打包
如果不需要同步用户权限,那mysql库可以忽略了

tar cfz tmp.tgz /path/to/mysql /path/to/database2


步骤三 安装好mysql,覆盖此两份数据库文件到var目录

步骤四 配置mysql

比普通的slave配置多写两行,意为同步database2,其它都忽略

replicate-do-db=database2
replicate_wild_ignore_table=%.%


如果没有加上忽略的表,那会导致类似的错误发生,即当前处于'database2',而操作'database1'的数据会出错,因为没有该数据库:
引用
100831 11:07:49 [ERROR] Slave SQL: Error 'Table 'database1.feed' doesn't exist' on query. Default database: 'database2'. Query: 'insert into database1.feed set appid=1,url='http://www.aslibra.com/'', Error_code: 1146


步骤五 开始同步

CHANGE MASTER TO
MASTER_HOST='192.168.1.4',
MASTER_PORT=3306,
MASTER_USER='slave',
MASTER_PASSWORD='slave',
MASTER_LOG_FILE='mysql-bin.000019',
MASTER_LOG_POS=154055761;
slave start;


参考阅读:

1 关于没有忽略别的表而产生的问题 小心使用replicate_do_db和replicate_ignore_db
2 关于同步的忽略表的检查顺序 mysql数据库镜像配置


原创内容如转载请注明:来自 阿权的书房
收藏本文到网摘
Tags: ,
发表评论
AD
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML 打开UBB 打开表情 隐藏
昵称   密码   游客无需密码
网址   电邮   [注册]
               

验证码 不区分大小写
 

阅读推荐

服务器相关推荐

开发相关推荐

应用软件推荐