设为首页 收藏本站
查看: 894|回复: 0

[经验分享] mysql主从同步以及原理

[复制链接]
YunVN网友  发表于 2018-9-27 11:25:09 |阅读模式
  mysql主从复制介绍
  当前的生产工作中,大多数应用的mysql主从同步都是异步的复制方式,即不是严格实时的数据同步。
  实时和异步:
  同步复制: 指的是客户端连接到MySQL主服务器写入一段数据, MySQL主服务器同步给MySQL从服务器需要等待从服务器发出同步完成的响应才返回客户端OK, 这其中等待同步的过程是阻塞的, 如果有N台从服务器, 效率极低
  异步复制: 指的是客户端连接到MySQL主服务器写入一段数据, MySQL主服务器将写入的数据发送给MySQL从服务器, 然后直接返回客户端OK, 可能从服务器的数据会和主服务不一致
  半同步复制:指的是客户端连接到MySQL主服务器写入一段数据, MySQL主服务器只将数据同步复制给其中一台从服务器, 半同步复制给其他的从服务器, 来达到其中一台从服务器完全同步的效果
  主从复制原理:
DSC0000.jpg

  从库需要两个线程完成,一个叫做I/O线程,一个叫做sql线程
  主库需要一个线程叫做I/O线程
  主库必须要开启binlog日志才能完成主从同步,当用户请求到主的库里面,会将增删改的东西记录到binlog日志里面,主从复制是从库去找主库的,建立时,我们在从库上使用change master指定master的ip,端口,二进制文件名称,pos,master的密码等信息。并在从库上开启start  slave就会开启同步。
  开启同步后,先是从向主发起请求。然后主库进行验证从库是否正常,验证之后,主库就会给从库按照信息发送日志,从库上存放日志的地方叫做中继日志(relay log),其实从库里面还有一个master info信息,这个里面记录的是change master的信息,每一次取日志回来都会对从库的master  info信息进行更新,接下来从库根据master  info的binlog信息去主库在取跟新的binlog信息,
  放到中继日志里面,我们如何进行更新?
  当主将binlog发送过来放到中继日志里面的时候,sql线程就会语句经过转换写到从库里面。
  注意
  1.开启binlog日志
  2.change master(在从库上)
  3.在从库开启start slave之前。这两个库的数据必须是一样的,所以讲主库的数据进行备份使用master-data=1,会记录位置的。然后从库会指定从主库备份里面找备份点。
  4.要在开关之前建立专门用于主从同步的账号
  5.从库打开开关的过程,其实就是打来从库两个线程的过程
  6.start slave
  主库返回的除了binlog日志内容外,还有本次返回日志内容后在Master服务器端的新的binlog文件名称以及在binlog中的下一个指定更新的位置。这个位置会保存在从库的master info里面。
  >flush tables  with read  lock;在主库上执行加上读锁
  然后另开一个窗口,连接到主mysql
  >show master  status;  查看主库的binlog以及pos值。
  下来是备份主库数据,将备份数据在从库上执行。目的就是让从库和主库的数据一样。
  从库将主库的备份数据导入完了以后要将锁打来:
  >unlocks  tables;
  然后在从库上执行change  master语句。这些信息会记录在从库的master.info的信息中;(如果你备份的时候指定master-data=1)
  最后一步开启start  slave;
  查看是否成功使用show slave  status; 查看两个进程是否为yes。
  从库里面的relay-log.info:记录sql线程从中继里面读取到的日志。
  描述mysql主从复制原理
  自己总结:从库的io线程会实时依据master.info信息的去主库的binlog日志里面读取更新的内容,将更新的内容取回到自己的中继日志中,同时会更新master.info信息,此时sql线程实时会从中继日志中读取并执行里面的sql语句。
  描述mysql主从同步部署
  自己总结:
  1.将主库的数据备份,备份的时候时候master-data=1指定。然后在从库上将备份数据导入
  2.在主库上给开启主库的bin-log功能,以及service-id

  mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_account'@'10.121.0.220'>  这句的意思是,允许从服务器'10.121.0.220 '使用'slave-account'及'123456'这个帐号密码对对主服务器的所有数据库(*.*)进行主从复制('REPLICATION SLAVE').
  3.在主库上执行flush  tables  with  relay  locks; 读写锁。然后领开启一个窗口
  4.然后只从库上执行change master   里面指定刚才创建的用户以及密码
  5.执行start  slave;
  6.show slave  status;看看两个线程是否启动
  7.在主库上解锁。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-602756-1-1.html 上篇帖子: 自动安装MySQL5.6 下篇帖子: mysql5.6多实例配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表