mysql主从复制

mysql的主从复制基于二进制日志和中继日志,所以,日志是复制的关键。

 

环境:

安装好两台mysql服务器,ip分别为192.168.0.104(slave)、192.168.0.105(master),端口默认为3306,安装路径为/usr/local/mysql,data目录为安装目录下的data目录。两台mysql都是5.5版本的。

 

master配置:

编辑master服务器的/etc/my.cnf配置文件,在[mysqld]标签下

1、启用二进制日志



 打开log-bin和binlog_format选项,默认这两项是开启的

 

2、配置服务器id,主从复制中,每台服务器的id不能一样,范围为1-2^32-1

这里master服务器的server id使用默认值1

 

3、创建具有复制权限的用户


 

配置完后启动主服务器

 

slave配置:

编辑slave服务器的/etc/my.cnf文件,在[mysqld]标签下

1、禁用二进制日志


 

2、开启中继日志


 

3、修改server id


 

启动从服务器

查看从服务器状态


 此时从服务器虽然启动了,但是还没有连接到主服务器,连接至主服务器


 

MASTER_HOST:主服务器ip

MASTER_USER:主服务器中用于复制的用户(主服务器中使用GRANT命令创建的账号)

MASTER_PASSWORD:主服务器中用于复制的用户密码

MASTER_LOG_FILE:主服务器中正在使用的二进制日志,在主服务器中使用show master status查看

MASTER_LOG_POS:当前event所在位置

 

再次查看slave服务器状态



 

其中,Slave_IO_Running和Slave_SQL_Running都显示为No

从服务器上会有IO_THREAD和SQL_THREAD两个线程,IO_THREAD负责从master服务器中复制二进制日志中的事件至slave服务器的中继日志中,SQL_THREAD负责将中继日志中的事件执行

启动这两个线程:


 或者分开启动

START SLAVE IO_THREAD;
START SLAVE SQL_THREAD;


 
先理解Slave_IO_Running 为connecting,的含义
主要有三个原因
1、网络不通
2、密码不对
3、pos不对
如果这三个都好,就会出现yes了
 
查了原因,主服务器开启了防火墙,关闭防火墙,关闭slave后重新启动
STOP SLAVE 后 START SLAVE
查看slave状态

 

数据从主服务器写入,然后同步至从服务器,因此,从服务器不能直接写,关闭从服务器写权限


 

 

此配置对于具有SUPER权限的用户没限制

修改完配置,需要重启服务

service mysqld restart

 

配置主服务器二进制日志写方式(二进制日志有缓存,宕机可能会造成日志未同步到从服务器)


 编辑my.cnf文件,配置sync-binlog = ON

 

接下来,在master服务器中修改数据,数据会被同步到slave服务器。

 

过滤

有时候只想同步某几个数据库,或某几张表,mysql服务端提供了几个变量来过滤

master端:

binlog-do-db:仅将指定数据库的修改记录二进制日志中

binlog-ignore-db:忽略指定数据库的更新

 

slave端:

replicate-do-db:仅将指定数据库的修改同步

replicate-ignore-db:忽略指定数据库的更新

replicate-do-table:仅将指定表的修改同步

replicate-ignore-table:忽略指定表的更新

replicate-wild-do-table:使用通配符指定表

replicate-wild-ignore-table:使用通配符忽略表

 

虽然在master和slave端都能过滤,建议只在slave端配置过滤规则

 

配置slave端仅同步test数据库

编辑my.cnf文件,添加如下配置


 

查看slave状态


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值