mysql的复制详解

Wesley13
• 阅读 335

复制线程

  复制线程主要包括三个线程:

master转储线程:在master出现数据更新时,会生成一个转储线程将二进制日志中的语句发送到slave

slaveI/O线程:在master生成转储线程的同时,slave同时会生成一个I/O线程将从master读取的语句,写入中继日志。

slave的SQL线程:slave的I/O线程在写入中继日志后,SQL线程会串行读取中继日志中的事件进行数据更新。

Slave线程的启动和停止

  通过START  SLAVE指令可以开启I/O和SQL线程,如果在启动服务器时存在master.info文件,I/O线程可以从该文件中获取同步master的位置,从master中继续获取数据更新操作到中继日志。SQL线程用来获取replay-log.info文件中获取需要从中继日志恢复数据。

  slave的线程启动指令:

  START  SLAVE  IO_THREAD和STOP  SLAVE  IO_THREAD        //启动和停止IO线程

  START  SLAVE  SQL_THREAD 和 STOP  SLAVE  SQL_THREAD    //启动和停止SQL线程

通过Internet运行复制

  SSL建立主从安全连接

    在使用SSL进行安全连接时,需要在主从服务器上配置CA证书,使master的加密可用,slave进行加密复制。

master的my.conf配置

ssl-capath=/etc/ssl/certs
ssl-cert=/etc/ssl/certs/master.pem
ssl-key=/etc/ssl/private/master.key

slave同步master

    SLAVE > CHANGE MASTER  TO                           

         MASTER_HOST="hostname",

        MASTER_PORT="port",

        MASTER_USER="username",

        MASTER_PASSWORD="password",

        MASTER_LOG_FILE="binglogname",

        MASTER_LOG_POS="postion",

        MASTER_SSL_CAPATH="/etc/ssl/certs",

        MASTER_SSL_CERT="/etc/ssl/certs/slave.pem",

        MASTER_SSL_KEY="/etc/ssl/private/slave.key"

  stunnel安全复制

    stunnel的安全连接是在SSL服务器的基础上实现的,需要CA证书,同时服务器需要公有证书和私有密钥。stunnel的安全连接如下图:

    mysql的复制详解

master服务器监听的ssl套接字为3508,slave服务器监听的ssl套接字为3408。

master的my.conf配置

CApath=/etc/ssl/certs
cert=/etc/ssl/certs/master.pem
key=/etc/ssl/private/master.key
[mysqlrepl]
accept=3508
connect=3306

slave的my.conf配置

CApath=/etc/ssl/certs
cert=/etc/ssl/certs/slave.pem
key=/etc/ssl/private/slave.key
[mysqlrepl]
accept=3408
connect=masterip:3508

slave同步master

slave > change master  to  master_host="hostname",master_port="port",master_user="username",master_password="password",master_log_file="binglogname",master_log_pos="postion"

处理断开连接的参数

slave-net-timeout       #slave连接master时,如果在该时间段内无法连接,slave认为已经断开,需要尝试连接。默认值为3600秒
master-connect-retry  #两次连接之间间隔的时间段,默认60秒
master-retry-count     #最大尝试连接次数,默认值为86400
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Easter79 Easter79
2年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
4、jstack查看线程栈信息
1、介绍利用jps、top、jstack命令找到进程中耗时最大的线程,以及线程状态等等,同时最后还可以显示出死锁的线程查找:FoundoneJavaleveldeadlock即可1、jps获得进程号!(https://oscimg.oschina.net/oscnet/da00a309fa6
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
mysql主从复制原理及实现
一.主从复制原理利用MySQL提供的Replication,其实就是Slave从Master获取Binarylog文件,然后再本地镜像的执行日志中记录的操作。由于主从复制的过程是异步的,因此Slave和Master之间的数据有可能存在延迟的现象,此时只能保证数据最终的一致性。在master与slave之间实现整个复制过程主要由三个线程来完成
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Wesley13 Wesley13
2年前
Java多线程:线程属性
\线程属性id:线程唯一标识。自动生成。不允许修改。name:线程的名字,可以自定义成有具体含义的名字,便于识别不同作用的线程。(可同名)isDaemon:是否是守护线程。true守护线程,false用
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这