开发者社区> 余二五> 正文

MariaDB(mysql)之主从同步

简介:
+关注继续查看

一、主从同步的作用

   1、数据分布

   2、负载均衡(load balancing)

   4、高可用性(high availability)和容错

二、主从同步原理

   mysql(MariaDB)的主从复制其实很简单,只要搞懂了原理,配置一个主从复制就是三下五除二的工夫

1、二进制日志

   想要做主从复制必须得有这个二进制日志,那二进制日志记录的是什么呢?二进制日志中保存的只是跟服务器修改相关的操作,也叫复制日志

   二进制日志为了避免日志文件过大,要进行不停地滚动,其主要有两个功能:

   (1)即时点恢复

   (2)复制

   因为二进制日志有即时点恢复功能,所以万一某天一个不小心失误把数据库删了,只要二进制日志文件保存完好,就可以把我们的数据恢复回来。可见二进制日志是非常重要的,因此二进制日志千万不要和你的数据库目录放到一起,而要另找一个位置保存

   今天我们要做的是利用他的第二个功能完成主从复制

2、中继日志

   中继日志和复制相关,中继日志是从服务器从主服务器上读取主服务器上二进制日志中的事件,每读一个过来,并保存到本地。

3、主从同步原理

wKiom1NL6CuzBZn2AAF0SQq6SYk430.jpg

   原理详解:

   1)主服务器发生数据更改操作,数据写入到数据文件和二进制文件中,然后去唤醒从服务器的I/O线程(IO thread)

   2)从服务器的IO thread来请求主服务器并把从主服务器的binlog dump线程返回结果写入到本地中继日志中

   3)从服务器的SQL thread每读一条中继日志,然后写一条到本地数据文件中

   4)此过程中,从服务器只是同步主服务器的数据,所以他无需开启二进制日志,而且从服务器最好设为只读模式

   5)主从复制并不是一个备份的过程,它只是一个数据同步的过程,因为,如果你在主服务器上删除一个库,那你会发现从服务器上也没有了

   6)从服务器并不能负载主服务器的写操作,它只可以负载主服务器的读操作;因为,不管你主服务器写多少,从服务器都会通过它的中继日志和主服务器的二进制日志同步到它本地的

三、主从同步的实现

1、修改主服务器的配置文件,我这里的数据目录在/mydata/data下,为了安全,我把二进制日志放到了/mydata/binlogs下,别忘了给这几个目录设置属主和属组为mysql用户,mysql组

wKioL1NL5tPhDZQhAACGNoQylJA433.png

2、在从服务器上修改主配置文件,方法同上一步

wKioL1NL523Q60FnAACpJeMS5uo355.png

3、查看从服务器的中继日志是否启动成功

wKiom1NL59qQrvfKAABSSR44tJo687.png

4、在主服务器上创建有复制权限的账号

1
2
grant replication slave  on *.* to 'moba'@'192.168.100.137' identified by 'moba2015';
flush privileges;


wKiom1NL6GWDCPnsAAAq6ksFitA533.png

5、在主服务器上查看其状态信息

wKioL1NL6GniGkKvAAAxheGBB2A943.png

6、从服务器连接主服务器

wKioL1NL6KKjOnMMAAA9x71JKVg434.png

7、查看从服务器的状态信息,检查是否连接主服务器成功

wKioL1NL6Qbj2ibwAABmkca4J0A693.png

   这里的Slave_IO_Running和Slave_SQL_Running两个线程必须都为Yes才是正确的,出现了什么connecting啊还是no什么的都是没连接成功的。IO thread是去请求主服务器的二进制日志并写入到本地中继日志的,SQL thread是从中继日志写入到本地数据文件的。

8、在主服务器上创建一个数据库

wKioL1NL6ejA7IShAABNlcLvfgA495.png

9、在从服务器上启动复制线程,测试hlbrc这个库是否同步成功

1
mysql>start slave;

wKioL1NL6kax7-PJAABzjio32Vs192.png

四、主从同步配置过程总结

1、主服务器

   1)修改server-id

   2)启用二进制日志

   3)创建有复制权限的账号

2、从服务器

   1)修改server-id

   2)启用中继日志

   3)连接主服务器

   4)启程复制线程  










本文转自 nmshuishui 51CTO博客,原文链接:http://blog.51cto.com/nmshuishui/1395587,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
迁移MariaDB审计插件(Audit Plugin)到MySQL 5.7---发表到爱可生开源社区
Oracle的MySQL社区版本不带审计插件(Audit Plugin),要想使用审计功能,你可以用Enterprise的版本,不过这需要银子。业界还有一些GPL协议的审计插件,这里我们选择MariaDB的审计插件。
6 0
Online DDL MySQL&MariaDB
本文主要对Mariadb和MySQL对Online DDL的支持情况做一个对比,方便读者随时参考。MariaDB 10.8引入了Lag Free Alter这个新特性,该特性主要是为了降低DDL引起的复制延迟,本文也给出了MariaDB 对不同DDL,lag free alter的支持情况。Mariadb Online DDL当用户通过ALGORITHM 参数为DDL指定执行算法时,如果用户指定算
16 0
Python使用MySQLConnector/Python操作MySQL、MariaDB数据库
Python使用MySQLConnector/Python操作MySQL、MariaDB数据库
33 0
MySQL、Mariadb中GROUP_CONCAT 函数使用介绍
MySQL、Mariadb中GROUP_CONCAT 函数使用介绍
12 0
MariaDB MySQL变量取值避免四舍五入的方法
MariaDB MySQL变量取值避免四舍五入的方法
22 0
MariaDB、MySQL存储过程、游标基础应用举例说明
MariaDB、MySQL存储过程、游标基础应用举例说明
20 0
mysql/mariadb 实现全文检索
mysql/mariadb 实现全文检索
92 0
MySQL集群升级从5.5版本升级到10.*以上版本(CentOS7.5 MariaDB集群升级)
MySQL集群升级从5.5版本升级到10.*以上版本(CentOS7.5 MariaDB集群升级)
84 0
ECS配置mySQL\MariaDB和PHP环境
ECS配置mySQL\MariaDB和PHP环境
51 0
Python 连接MariaDB的一些小问题Cant connect to MySQL server
Python 连接MariaDB的一些小问题Cant connect to MySQL server
122 0
+关注
余二五
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
高效MySQL的N个习惯
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关镜像