MySQL5.6主从复制搭建基于日志(binlog)

什么是MySQL主从复制

简单来说,就是保证主SQL(Master)和从SQL(Slave)的数据是一致性的,向Master插入数据后,Slave会自动从Master把修改的数据同步过来(有一定的延迟),通过这种方式来保证数据的一致性,就是主从复制。

MySQL主从能解决什么问题

一、高可用

因为数据都是相同的,所以当Master挂掉后,可以指定一台Slave充当Master继续保证服务运行,因为数据是一致性的(如果当插入Master就挂掉,可能不一致,因为同步也需要时间),当然这种配置不是简单的把一台Slave充当Master,毕竟还要考虑后续的Salve同步Master,当然本文并不是将高可用的配置,所以这里就不多讲了。

二、负载均衡

因为读写分离也算是负载均衡的一种,所以就不单独写了,因为一般都是有多台Slave的,所以可以将读操作指定到Slave服务器上(需要代码控制),然后再用负载均衡来选择那台Slave来提供服务,同时也可以吧一些大量计算的查询指定到某台Slave,这样就不会影响Master的写入以及其他查询.

三、数据备份

一般我们都会做数据备份,可能是写定时任务,一些特殊行业可能还需要手动备份,有些行业要求备份和原数据不能在同一个地方,所以主从就能很好的解决这个问题,不仅备份及时,而且还可以多地备份,保证数据的安全

四、业务模块化

可以一个业务模块读取一个Slave,再针对不同的业务场景进行数据库的索引创建和根据业务选择MySQL存储引擎

五、高扩展(硬件扩展)

主从复制支持2种扩展方式

1、scale-up

向上扩展或者纵向扩展,主要是提供比现在服务器更好性能的服务器,比如增加CPU和内存以及磁盘阵列等,因为有多台服务器,所以可扩展性比单台更大

2、scale-out

向外扩展或者横向扩展,是指增加服务器数量的扩展,这样主要能分散各个服务器的压力

主从复制的缺点

一、成本增加

无可厚非的是搭建主从肯定会增加成本,毕竟一台服务器和两台服务器的成本完全不同,另外由于主从必须要开启二进制日志,所以也会造成额外的性能消耗

二、数据延迟

Slave从Master复制过来肯定是会有一定的数据延迟的,所以当刚插入就出现查询的情况,可能查询不出来,当然如果是插入者自己查询,那么可以直接从Master中查询出来,当然这个也是需要用代码来控制的

三、写入更慢

主从复制主要是针对读远大于写或者对数据备份实时性要求较高的系统中,因为Master在写中需要更多操作,而且只有一台写入的Master(因为我目前只会配置一台写入Master,最多就是有从Master的Slave,用来在Master挂掉后替换成Master,平时不对外进行服务),所以写入的压力并不能被分散,当然如果直接怎么解决这个问题的话,欢迎留言指教

复制方式

MySQL5.6开始主从复制有两种方式:基于日志(binlog)、基于GTID(全局事务标示符)。

本文只涉及基于日志binlog的主从配置

复制原理

1、Master将数据改变记录到二进制日志(binary log)中,也就是配置文件log-bin指定的文件,这些记录叫做二进制日志事件(binary log events)

2、Slave通过I/O线程读取Master中的binary log events并写入到它的中继日志(relay log)

3、Slave重做中继日志中的事件,把中继日志中的事件信息一条一条的在本地执行一次,完成数据在本地的存储,从而实现将改变反映到它自己的数据(数据重放)

要求

1、主从服务器操作系统版本和位数一致

2、Master和Slave数据库的版本要一致

3、Master和Slave数据库中的数据要一致

4、Master开启二进制日志,Master和Slave的server_id在局域网内必须唯一

具体配置

硬件需求

台或两台以上安装了相同版本的MySQL

master 192.168.100.70

salve    192.168.100.71

配置Master

一、安装数据库

二、配置my.cnf

不同的系统my.cnf路径不同,所以我们只讲解牵扯修改的地方。添加配置

[mysqld]
#设置server_id,一般设置为IP,注意要唯一
server_id=100  
#复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
binlog-ignore-db=mysql  
#开启二进制日志功能,可以随便取,最好有含义(关键就是这里了)
log-bin=edu-mysql-bin  
#为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M  
#从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed  
#二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days=7  
#跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
#如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

配置完成后重启mysql

关于复制过滤:
复制过滤可以让你只复制服务器中的一部分数据,有两种复制过滤:
1、在Master上过滤二进制日志中的事件
2、在Slave上过滤中继日志中的事件。
复制类型:
1、基于语句的复制
在Master上执行的SQL语句,在Slave上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。一旦发现没法精确复制时,会自动选着基于行的复制
2、基于行的复制
把改变的内容复制到Slave,而不是把命令在Slave上执行一遍。从MySQL5.0开始支持
3、混合类型的复制
默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制

三、创建数据同步用户

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

这里主要是要授予用户REPLICATION SLAVE权限和REPLICATION CLIENT权限

配置Slave

一、安装数据库

二、配置my.cnf

[mysqld]
#设置server_id,一般设置为IP,注意要唯一
server_id=101  
#复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
binlog-ignore-db=mysql  
#开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=edu-mysql-slave1-bin  
#为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M  
#主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed  
#二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days=7  
#跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
#如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062  
#relay_log配置中继日志
relay_log=edu-mysql-relay-bin  
#log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1  
#防止改变数据(除了特殊的线程)
read_only=1

如果Slave为其它Slave的Master时,必须设置bin_log.配置完成后重启mysql.

完成Master和Slave链接

一、初始化数据
保证Master和Slave除不同步的数据库,其他库的数据一致
二、查询Master状态
在Master中执行

mysql> show master status\G
*************************** 1. row ***************************File: edu-mysql-bin.000001Position: 120Binlog_Do_DB: Binlog_Ignore_DB: mysql
Executed_Gtid_Set: 
1 row in set (0.00 sec)

记录下返回结果的File列和Position列的值

三、Slave中设置Master信息

在Slave中执行

change master to master_host='192.168.100.70', master_user='slave', master_password='123456', master_port=3306, \
master_log_file='edu-mysql-bin.000001', master_log_pos=120, master_connect_retry=30;#命令解释:
#Master的IP地址
master_host=’192.168.100.70′ #用于同步数据的用户(在Master中授权的用户)
master_user=’slave’ #同步数据用户的密码
master_password=’123456′ #Master数据库服务的端口
master_port=3306 #指定Slave从哪个日志文件开始读复制数据(Master上执行命令的结果的File字段)
master_log_file=’edu-mysql-bin.000001′ #从哪个POSITION号开始读(Master上执行命令的结果的Position字段)
master_log_pos=120#当重新建立主从连接时,如果连接建立失败,间隔多久后重试。单位为秒,默认设置为60秒,同步延迟调优参数。
master_connect_retry=30 

四、查看主从同步状态

在Slave中执行命令

show slave status;  

可看到SlaveIOState为空, SlaveIORunning和SlaveSQLRunning是No,表明Slave还没有开始复制过程。相反SlaveIORunning和SlaveSQLRunning是Yes表明已经开始工作了.

五、开启主从同步

在Slave中执行命令

start slave;  

查询查看主从同步状态,会发现SlaveIORunning和SlaveSQLRunning是Yes了,表明开启成功。

参考文档:

             http://mp.weixin.qq.com/s/yuVNWcs8xeGqDRrFnIyugQ

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259123.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

opengl 如何加阴影_动漫嘴唇厚涂如何绘制?厚涂嘴唇正确画法

动漫嘴唇厚涂如何绘制?厚涂嘴唇正确画法!嘴巴怎么画?画嘴巴真的很考验一个画师功力,好看的嘴巴生动而丰满,可以给整幅画作添上亮点,而画的不好的嘴巴呢,就容易把画面整体的风格打破。那么零基础…

位运算

我们复习一下位运算,这里介绍一下(& ,|, ^)的用途。 按位与 ------------& 规则: 0&00 0&10 1&0 0 1&11 ( 两位为1,才是1)作用: 清零与保位。通常用来将特定的位清零&…

详解JMeter函数和变量

详解JMeter函数和变量(1) JMeter函数可以被认为是某种特殊的变量,它们可以被采样器或者其他测试元件所引用。函数调用的语法如下: ${__functionName(var1,var2,var3)} 其中,__functionName匹配被调用的函数名称。用圆括…

信号反射

突然想起来前几天调试CAN通讯的时候出现的BUG,那就是传说中的“信号反射”,也有称“振铃”的。错误刚出现的时候没有意识过来,还说怎么出现重复出现这么多条消息呢?光在书本上看到过这个概念,没有“实物”与之对应起来…

hdu 5199 map或二分或哈希

题目描述:给出n棵树的高度,每棵树上都站着一只鸟,枪手Jack站在最左边那棵树的左边对鸟进行射击,当Jack在高度为H的地方向右发射一颗子弹的时候,高度为H的树上的鸟儿就会掉落(注:其他树上的鸟儿不…

数字电路实验怎么接线视频讲解_家庭影院中音箱、功放、投影机、4K播放机不知道怎么连接?手把手教你...

家庭影院中音箱、功放、投影机、4K播放机不知道怎么连接?手把手教你有不少用户收到从家庭影院器材之后,表示完全不会连接。翻看说明书也觉得头大,知识太多,然而却很难找到要点。今天主要跟大家讲讲如何连接音箱、功放、投影机和影…

.NET开发过程中的全文索引使用技巧之Solr

前言:相信许多人都听说过.net开发过程中基于Lucene.net实现的全文索引,而Solr是一个高性能,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能…

关于字符的读入与输出

在笔试中,经常见到字符的读入与输出的题目。逆序打印输入时最常见、最基本的考题,复杂点的就是统计单词、逆序打印单词之类的。难点是如何判断输入的结束,如果用getchar函数,其输入结束符为EOF(其打印值为-1&#xff0…

修正discuz发帖首次换行无效的问题

找遍了百度和google都没有解决方案,连discuz官方都没有出来解决,至今其官网仍有这个问题。 那就自己动手解决吧,顺手打个补丁。虽然走了小路,但是能解决问题。 解决方案:修改static/js/bbcode.js 找到 html2bbcode()方…

auto.js停止所有线程_Java线程与并发编程实践:深入理解volatile和final变量

同步有两种属性:互斥性和可见性。synchronized关键字与两者都有关系。Java同时也提供了一种更弱的、仅仅包含可见性的同步形式,并且只以volatile关键字关联。假设你自己设计了一个停止线程的机制(因为无法使用Thread不安全的stop()方法))。清单1中Thread…

项目实例改编:利用structs2的action 实时显示图片、pdf和其他内容的框架抽取。(转)...

转自:http://www.verydemo.com/demo_c167_i1382.html 针对:预览文件(图片,PDF)文件来源为action中的inputStream 重点: structs2的action的配置 action的写法和结果类型 resulttype的写法 网页上实…

零碎的小知识点 ----------C# ToString()函数注意事项

C#中存在着大量的字符串操作,有专门的string类,各种各种的方法,其中使用最为频繁的方法为ToString(),用起来很是顺手,但是这里存在一个很大的问题,空字符是不能用ToString方法转换的,不然就会报…

ios越狱系统UIGestureRecognizer事件截获问题

越狱的机器给self.view设置一个UITapGestureRecognizer,这货就把所有的点击事件全截获了,比如某个按钮,点击就没效果.普通系统是没有问题的. 因此要给UIGestureRecognizer设置delegate并且在其中对touch的view进行分别处理 比如要让按钮功能正常使用: 1 #pragma mark - UIGestu…

开始Go开发之旅-Golang架构师之路系列实战

2019独角兽企业重金招聘Python工程师标准>>> 作者: gomaster.me(冯琪超) 系列:Golang架构师之路 巧妇难做无米之炊,golang sdk就是gopher的大米 下载golang 点击 官网下载golang sdk 根据不同系统,官网下载链接会选择相应的平台进行链接跳转&…

delete与delete[]的区别

一直对C中的delete和delete[]的区别不甚了解,今天遇到了,上网查了一下,得出了结论。做个备份,以免丢失。 C告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时…

event对应的各种坐标

IE8不支持的PageXY 相对于整个页面鼠标的位置 包括溢出的部分 event.pageX; event.pageY; 所有浏览器支持的: 相对于当前浏览器窗口可视区域的坐标event.clientX;event.clientY; 相对于当前屏幕(和浏览器窗口大小无关)的坐标event.screenX;…

安卓9.0官方系统升级包_华为、荣耀公布可升级安卓10.0机型,你的手机在名单之内吗?...

在近两个月以前,美方将华为关进了小黑屋,随后谷歌也将华为旗下的机型移出了安卓10.0升级名单,这一波操作之后,引起了不小的“恐慌”,许多华为用户也在担心是否还能正常使用安卓系统服务,不过,让…

2. Mysql数据库的入门知识

2. Mysql数据库的入门知识 (1)打开Windows系统提供的服务查看相应的服务。 (2)在Windows任务管理器的进程中查看 (3)使用命令行管理windows的Mysql数据库服务。 Net start 服务名 Net stop 服务名 mysql -h…

十月读书心得

1.sizeof与strlen的区别。 #include <iostream> using namespace std; void main() {cout << sizeof("hello") << endl;}答案&#xff1a; 6原因&#xff1a; “hello”{‘h’,e,l,l,o,\0};共六个字节。 那么sizeof与strlen有什么区别呢&#xff…

nginx php-fpm 输出php错误日志(转)

nginx是一个web服务器&#xff0c;因此nginx的access日志只有对访问页面的记录&#xff0c;不会有php 的 error log信息。 nginx把对php的请求发给php-fpm fastcgi进程来处理&#xff0c;默认的php-fpm只会输出php-fpm的错误信息&#xff0c;在php-fpm的errors log里也看不到ph…