MySQL主从复制配置

 

 

一、总体过程
MySQL主从复制配置

 

1、Master将数据改变记录到binlog。
2、Slave将master的binlog拷贝到本地的relaylog。
3、Slave回放relaylog。

 

二、测试环境:
操作系统:Win7
数据库节点信息:
主  localhost   3308   5.5.17 
从  localhost   3306   5.5.25  

注:Master的版本不能高于Slave版本(版本向下兼容),最好主从使用相同版本的MySQL。

 

三、主库配置

1、编辑配置文件my.ini,在[mysqld]部分添加下面内容:

server-id=1 #设置服务器id,1表示Master节点,其他正整数表示slave节点。
log-bin=mysql-bin #开启binlog日志,因为MySQL的主从是通过从数据库读取主数据库的binary log来实现的
#不需要记录binlog的数据库,多个数据库时,可配置多个binlog-ignore-db。
binlog-ignore-db=mysql 
#需要记录binlog的数据库,多个数据库时,可配置多个binlog-do-db。
#binlog-do-db=test 

 
 2、启动mysql

 

3、查看主库的binlog是否成功开启

show variables like ‘log_bin’;

 
MySQL主从复制配置

 

ON  已开启

OFF   未开启

 

4、主库创建拥有replication slave权限的账号,从库使用该账号连接主库

grant replication slave on *.* to slave@'%' identified by '123456' ;
grant replication slave on *.* to slave@'localhost' identified by '123456' ;

 

5、查看主库状态

show master status;
 


    MySQL主从复制配置

 记下当前File和Position的值,后面为从库指定master时会用到。

 

四、从库配置

1、编辑配置文件my.ini:
在[mysqld]部分,添加如下配置:

server-id=2
#配置需要复制的数据库,如果有多个db,可以配置多个replicate-do-db。
#replicate-do-db=test 
#指定不需要同步的数据库,如果有多个,可以配置多个replicate-ignore-db。
replicate-ignore-db=mysql 

 

2、启动从库

 

3、查看server-id是否配置成功(未配置成功时值为0)

show variables like ‘serv%’;

 
MySQL主从复制配置

 

4、为slave指定master,通过change master命令指定:

change master to  master_host='127.0.0.1',  master_user='slave',   master_password='123456',  master_log_file='mysql-bin.000009',   master_log_pos=107, master_port=3308;

 

change master 命令执行成功后,在从节点的mysql\data\master.info文件中可以查看新设置的master信息。
MySQL主从复制配置
 

 

5、启动同步线程

start slave;

 

 注:停止同步线程命令为:stop slave;

 

6、通过 show slave status命令查看slave同步状态信息
MySQL主从复制配置
 

 Slave_IO_Running=Yes
Slave_SQL_Running=Yes
说明slave同步用的的IO和SQL线程都已经开始运行。

 

7、通过 show processlist 也可以查看slave的IO和SQL进程:


MySQL主从复制配置
 

五、测试主从同步

1、在主库上执行:create database db01;然后分别查看主库、从库,则主库、从库节点上应该都成功创建了db01数据库。
2、在主库上 use db01,然后create table创建表,然后分别查看主库、从库,则二者应该都成功创建了新表。
3、继续往新建的表中insert、update、delete 记录,则主库、从库应该同步发生相同变化。


 六、查看主库binlog

SHOW BINLOG EVENTS
   [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
-- limit与select查询中的limit使用方法相同
--from pos 类似于select查询中的 where pos>pos值

 

如:show binlog events in 'mysql-bin.000003'; 

 
MySQL主从复制配置
 
七、关于复制过滤

复制过滤可以让你只复制服务器中的一部分数据,有两种复制过滤:在master上过滤二进制日志中的事件;在slave上过滤中继日志中的事件,如下图:


MySQL主从复制配置
 

说明:
(1)binlog-ignore-db 与 binlog-do-db 数据库过滤,是根据当前使用的数据库( use db01 则当前使用的数据库就是db01)进行过滤的,比如:
如果主库ignore配置了db01,并且当前use的数据库是db01,如果执行update db02.table01 set.......,则该sql是不会记录到binlog的。
如果主库ignore配置了db01,并且当前use的数据库是db02,如果执行update db01.table01 set.......,则该sql仍然会记录到binlog的。
(2)如果未配置binlog-do-db和binlog-ignore-db,则默认所有db变更都会记录到binlog; 如果未配置binlog-do-db,但是配置了binlog-ignore-db,则除了binlog-ignore-db之外的db的变更都会记录binlog。
如果同时配置了binlog-do-db和binlog-ignore-db,则只会记录binlog-do-db的变更。

 

八、补充说明

1、当主数据库挂掉的时候,其实默认情况下从数据库会每60秒去访问主数据库进行同步,直到主数据库开启。
2、当从数据库挂掉,直接使用命令start slave开始同步功能即可。
3、mysql主从同步的速度虽然很快,但是还是存在时间的差异,所以,实时性要求高时,应使用主库查询。
4、从数据库对外暴露的账号,应该是拥有只读权限的账号,以防止误操作导致主从不一致。
5、所有节点的server-id不允许重复,并且Master节点的server-id必须配置为1.
 

你可能感兴趣的:(mysql)