因为是在同一服务器上配置并且没有使用虚拟机,所以在网上找资料是找到的写的不全,写的好的又没百度到,你说配置难么其实也跟学自行车一样!
准备环境
Windows10
主库 Mysql 5.6.21
从库 Mysql 5.6.28
一般情况从库是要比主库版本高的,因为考虑到mysql版本向后兼容性!
安装
首先要在本地建立两个mysql服务(参考这里),指定不同的端口。我这里一个主(3306),一个从(3309)。
配置文件
一般是把配置参数[mysqld]放在这个下面,有博客说要不容易出错
注:
可以用参数指定只复制一张表,如:#只复制某个表replicate-do-table=tablename#只复制某些表(可用匹配符)replicate-wild-do-table=tablename%#只复制某个库replicate-do-db=dbname#只复制某些库replicte-wild-do-db=dbname%#不复制某个表replicate-ignore-table=tablename
主库配置:
[mysqld]
server-id = 1
binlog-do-db=test #要同步的数据库
#binlog-ignore-db=mysql #不同步的数据库,如果指定了binlog-do-db这里应该可以不用指定的
log-bin=mysql-bin #要生成的二进制日记文件名称
从库配置
[mysqld]
server-id = 2
log-bin = mysql-bin
replicate-do-db=test
以上两步配置完成重启,主库和从库
配置账户
1.在主库添加一个用户 repl 并指定replication权限
create user 'repl'@'127.0.0.1' identified by 'asdf';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'127.0.0.1'; -- 这里我指定数据库(test.*)时报错,而指定全库(*.*)时会成功。
2.保持主从mysql的test数据库初始状态一致。
一般是先将所有的表加读锁,然后copy磁盘上的数据库文件夹。我这里直接停止服务,然后将数据文件拷贝过去。
在主数据库里面运行show master status;记下file和position字段对应的参数。
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 107 | test | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
3.在从库设置它的master:
mysql> change master to master_host='127.0.0.1',master_port=3306,master_user='repl',master_password='asdf',master_log_file='mysql-bin.000001',master_log_pos=107;
Query OK, 0 rows affected (0.19 sec)
这里的master_log_file和master_log_pos对应刚才show master status记下的参数。
4.在从库开启从数据库复制功能。
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
在从库可以通过show slave status来查看一些参数。
测试
此时在主库创建表或插入数据,在从库就会很快也能看到了。
注:要指定好数据库,use 数据库名;
-- 主库
mysql> create table tianyc_02(b int);
Query OK, 0 rows affected (0.16 sec)
mysql> insert into tianyc_02 values(2013);
Query OK, 1 row affected (0.13 sec)
-- 从库
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| tianyc_01 |
| tianyc_02 |
+----------------+
2 rows in set (0.00 sec)
mysql> select * from tianyc_02;
+------+
| b |
+------+
| 2013 |
+------+
1 row in set (0.00 sec)
同理,可以搭建第二、第三个从节点。
大部分转载于此:http://www.cnblogs.com/yuechaotian/archive/2013/05/15/3080056.html
备注:两个服务的serve_id必须不同,否则在开启复制功能时会提示错误
mysql> start slave;
ERROR 1200 (HY000): The server is not configured as slave; fix in config file or with CHANGE MASTER TO
我这里设置的主节点id为1,从节点id为2。也可以按照ip或端口进行设置,好用来区分。参考这里。
想法:
按照现在配置好之后。
备库关闭了(stop slave) ,这时候主库有数据写入,等到下次备库开启(start slave)主库写入的数据也会同步到备库上。
如果在备库上A表写入一条数据,之后主库A表写入一条和备库不同的数据,造成的结果就是,主库A表这一条数据是没有写入到备库的。紧接着主库再添加一条数据,这条数据会同步到备库!
主库的删除修改不会影响备库!
错误问题:
原因:检查my.cnf,原来没指定relay_log,mysql默认产生的relay_log名被该server上的另一个mysql slave占用了。
[ERROR] Slave SQL: Slave failed to initialize relay log info structure from the repository, Error_code: 1872
mysql>reset slave
然后接着往下执行就可以了。