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

[经验分享] mysql复制的工作原理及主从复制的实现

[复制链接]

尚未签到

发表于 2018-10-7 08:30:10 | 显示全部楼层 |阅读模式
  mysql的复制功能主要有3个步骤
  主服务器将改变记录到二进制日志中,(这些记录叫做二进制日志事件)
  从服务器将主服务器的二进制日志事件拷贝到它的中继日志中
  从服务器重做中继日志中的事件。
DSC0000.jpg

  该过程的第一部分就是主服务器记录二进制日志,在每个事务更新数据完成之前,master在二进制日志记录这些改变,mysql将事务串行的写入二进制日志,在事件写入二进制日志完成后,主服务器通知存储引擎提交事务,此后可接收从服务器的请求。
  下一步就是从服务器将主服务的二进制日志拷贝到它自己的中继日志,首先,从服务器开始一个工作线程,即I/O线程,I/O线程在主服务器上打开一个普通的连接,然后开始在主节点上binlog dump process(二进制转存线程)。binlog dump process从主服务器的二进制日志中读取事件,如果已经跟上主服务器,它会睡眠并等待主服务器产生新的事件,I/O线程将这些事件写入中继日志中。
  SQL从线程处理该过程的最后一步,SQL线程从中继日志中读取事件,并重放其中的事件而更新从服务的数据,使其与主服务中的数据一致,。只要该线程与I/O线程保持一致,中继日志通常会位于Os的缓存中,所以中继日志的开销很小。
  mysql实现数据库的主从复制
  环境准备:centos系统服务器2台,一台用户做mysql主服务器,一台用于做mysql从服务器,配置好yum源,防火墙关闭,各节点时钟服务同步,各节点之间可以通过主机名互相通信。
  二:准备步骤 iptables –F && sentenforce清空防火墙策略,关闭selinux
  分别启动两台服务器mysql服务,确保服务正常。
[root@centos7 ~]# yum install -y mariadb  
[root@centos7 ~]# yum install -y mariadb-server
  
[root@centos7 ~]# systemctl restart mariadb
  
[root@centos7 ~]# iptables -F
  
[root@centos7 ~]# getenforce
DSC0001.jpg

  配置master主服务器

  包括打开二进制文件,指定唯一的server>  server-id  #配置server-id,让主服务器有唯一的ID号
  log-bin=mysql-bin  #打开mysql日志,日志格式为二进制
  skip-name-resolve #关闭名称解析(非必须)
[root@centos7 ~]# vim /etc/my.cnf  
[mysqld]
  
server-id = 1
  
log-bin = master-log
  
skip_name_resolve = ON
  
保存退出
  
[root@centos7 ~]# systemctl restart  mariadb
  查看主服务器的状态
DSC0002.jpg

  创建复制账号
  在主服务器的数据库中建立一个备份账户,每个从服务器使用标准的mysql用户名和密码连接主服务器,进行复制操作的用户
MariaDB [(none)]> grant replication slave,replication client on *.* to 'slave'@'172.17.%.%' identified by '123456';  配置从服务器

  对从服务器进行配置,打开中继日志,指定唯一的server>  server-id=2 #配置server-id,让从服务器有唯一ID号
  relay_log = mysql-relay-bin #打开Mysql日志,日志格式为二进制
  read_only = 1 #设置只读权限
  log_bin = mysql-bin #开启从服务器二进制日志
  log_slave_updates = 1 #使得更新的数据写进二进制日志中
server-id=2  
relay-log=mysql-relay-bin
  
read-only=1
  
log-bin=mysql-bin
  
log-slave-updates=1
  然后重启服务
[root@centos7 ~]# systemctl restart mariadb  启动从服务器复制线程,让从服务器连接主服务器,并开始重做主服务器
MariaDB [(none)]> change master to master_host='172.17.252.89',  
    -> master_user='slave',
  
    -> master_password='123456',
  
    -> master_log_file='master-log.000006',
  
    -> master_log_pos=245;
  然后在数据库中执行start slave; 启动复制线程
  查看从服务器的状态
  可使用SHOW SLAVE STATUS\G查看从服务器状态,如下所示,也可用show processlist \G查看当前复制状态
DSC0003.jpg

  然后我们在主服务器上建一个数据库
DSC0004.jpg

  然后在从服务器上就可以看到这个数据库,主从复制就实现成功了。
DSC0005.jpg




运维网声明 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-614149-1-1.html 上篇帖子: MySQL--引擎介绍MyISAM VS InnoDB 下篇帖子: MySQL 安全配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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