mysql主从同步配置

主从同步原理

master_slave.jpg

执行过程如下:

 1.    master在每个事务更新数据完成之前,将该操作记录串行化的写入到`BinaryLog`文件中
 2.    slave开启一个`I/O`线程,该线程会和主库建立一个普通的客户端连接,然后在主库上启动一个特殊的二进制转储(binlog dump)线程,这个二进制转储线程会读取主库上二进制日志文件中的 事件。并将这些事件写入到从库的中继日志`RelayLog`中。需要注意的是这个二进制转储线程读取日志文件的进度如果赶上了主库,它将进入睡眠状态,知道主库发送信号量通知其有新的事件产生才会被唤醒。
 3.    `SQL Thread`会读取中继日志,并顺序执行该日志中的sql事件,从而保证和主库的数据一致。

主库配置:

修改主库的my.cnf 在[mysqld]下新增配置

#-------------------------master上配置主从------------------- 

# server-id 唯一的服务辨识号,数值位于 1 到 2^32-1之间.
# 此值在master和slave上都需要设置.
# 如果 “master-host” 没有被设置,则默认为1, 但是如果忽略此选项,MySQL不会作为master生效.

server-id = 1 #[必须]服务器唯一ID,默认是1 

#log-bin 打开二进制日志功能.                                                                               
#在复制(replication)配置中,作为MASTER主服务器必须打开此项                                                   
#如果你需要从你最后的备份中做基于时间点的恢复,你也同样需要二进制日志. 

log-bin = mysql-bin #[必须]启用二进制日志   
  
#需要开启生成二进制日志记录相关配置,配置在需要被复制的服务器上,即:master                                  
binlog-do-db = my_test1 #指定对名称为test_db的数据库记录二进制日志                                              
# binlog-ignore-db = mysql #指定不对名称为mysql的数据库记录二进制日志                                             
# binlog-ignore-db = information_schema #指定不对名称为information_schema的数据库记录二进制日志  

binlog_format = mixed #binlog日志格式,mysql默认采用,如果从服务器slave有别的slave要复制那么该slave也需要这一项 
expire_logs_days = 7 #超过7天的binlog删除 

查看主库配置状态

show master status

出现如下状态则配置成功

master.png

配置好后重启mysql

在从库中配置

修改从库的my.cnf 在[mysqld]下新增配置

# -----------------------slave上的主从配置-------------   
 
# server-id 唯一的服务辨识号,数值位于 1 到 2^32-1之间.
# 此值在master和slave上都需要设置.
# 如果 “master-host” 没有被设置,则默认为1, 但是如果忽略此选项,MySQL不会作为master生效.

server-id = 2 #[必须]服务器唯一ID,默认是1

# replicate-do-db 需要做复制的数据库,如果复制多个数据库,重复设置这选项即可master上不需要此项,slave上需要  
 
replicate-do-db = my_test1 #复制名称为test_db的数据库     

# replicate-ignore-db 不需要复制的数据库,如果要忽略复制多个数据库,重复设置这个选项即可  
# replicate-ignore-db = mysql #不需要(忽略)复制名称为mysql的数据库   

执行同步命令

在从库的客户端执行命令

# 设置主服务器ip,同步账号密码,同步位置
change master to master_host='192.168.171.123' , master_port=3001, 
                 master_user='root',master_password='123456',
                 master_log_file = 'mysql-bin.000002',master_log_pos=2170;
# 开启同步功能
start slave;

查看从服务器状态:

show slave status 

出现如下则表示成功

slave.png

配置好后就可以在主库中建表,执行插入、修改、删除操作来验证主从是否配置成功

12 声望
1 粉丝
0 条评论
推荐阅读
自定义 elementUI 描述列表组件
),后来切换到 element 发现没有这种组件,每次都需要自己编写。但是一个项目界面风格要统一,每次都复制代码很是麻烦,而且如果要改样式,那么就是一个炸弹呀,还不得累死。一咬牙,一跺脚,自己写一个吧。

大橙子5阅读 11k评论 1

分库分表的 21 条法则,hold 住!
还是不着急实战,咱们先介绍下在分库分表架构实施过程中,会接触到的一些通用概念,了解这些概念能够帮助理解市面上其他的分库分表工具,尽管它们的实现方法可能存在差异,但整体思路基本一致。因此,在开始实际...

程序员小富8阅读 967评论 3

封面图
初学后端,如何做好表结构设计?
这篇文章介绍了设计数据库表结构应该考虑的4个方面,还有优雅设计的6个原则,举了一个例子分享了我的设计思路,为了提高性能我们也要从多方面考虑缓存问题。

王中阳Go4阅读 1.8k评论 2

封面图
MySQL百万数据深度分页优化思路分析
一般在项目开发中会有很多的统计数据需要进行上报分析,一般在分析过后会在后台展示出来给运营和产品进行分页查看,最常见的一种就是根据日期进行筛选。这种统计数据随着时间的推移数据量会慢慢的变大,达到百万...

一个程序员的成长7阅读 984

封面图
Vue+Express+Mysql全栈项目之增删改查、分页排序导出表格功能
本文记录一下实现一个全栈项目,前端使用vue框架、后端使用express框架、数据库使用mysql。此项目的意义不仅仅有助于我们复习nodejs相关知识、更有助于带前端新人,使其快速从整体全局角度中,理解常规后台管理系...

水冗水孚4阅读 2.7k

深入理解MySQL索引底层数据结构
在日常工作中,我们会遇见一些慢SQL,在分析这些慢SQL时,我们通常会看下SQL的执行计划,验证SQL执行过程中有没有走索引。通常我们会调整一些查询条件,增加必要的索引,SQL执行效率就会提升几个数量级。我们有没...

京东云开发者3阅读 616

封面图
Laravel入门及实践,快速上手ThinkSNS+二次开发
【摘要】自从ThinkSNS+不使用ThinkPHP框架而使用Laravel框架之后,很多人都说技术门槛抬高了,其实你与TS+的距离仅仅只是学习一个新框架而已,所以,我们今天来说说Laravel的入门。

ThinkSNS1阅读 2.5k

12 声望
1 粉丝
宣传栏