什么是MySQL主从复制
通俗的讲,就是主库发生增删改的变化时,从库会跟着发生变化,从库内数据保持和主库一样
MySQL的复制原理以及流程
3个线程以及之间的关联;
(1)主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中;
(2)从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进自己的relay log中;
(3)从:sql执行线程——执行relay log中的语句;
Mysql主从复制原理过程详细描述
1、在Slave服务器上执行start slave命令开启主从复制开关,开始进行主从同步。
2、此时,Slave服务器I/O线程为通过Master上已经授权的复制用户权限请求连接Master服务器,并请求从指定binlog日志文件的指定位置(日志文件名和位置就是在配置主从复制服务时执行change master命令指定的)之后开始发送binlog日志内容。
3、Master服务器接收到来自Slave服务器的I/O线程请求后,其上负责复制的I/O线程会根据Slave服务器的I/O线程请求的信息分批读取指定binlog日志文件指定位置之后的binlog日志信息,然后返回给Slave端的I/O线程。返回的信息中除了binlog日志内容外,还有在Master服务器端记录的新的binlog文件名称,以及在新的binlog中的下一个执行更新位置。
4、当Slave服务器的I/O线程获取到Master服务器上I/O线程发送的日志内容,日志文件及位置点后,会将binlog日志内容依次写到Slave端自身Relay Log(中继日志)文件(MySQL-relay-bin.xxxx)的最末端,并将新的binlog文件名和位置记录到master-info文件中,以便下一次读取Master端新binlog日志时能够告诉Master服务器从新binlog日志的指定文件及位置开始请求新的binlog日志文件。
5、Slave服务器端的SQL线程会实时检测本地Relay Log中I/O线程新增加的日志内容,然后及时地把Relay Log文件中内容解析成SQL语句,并在自身Slave服务器上按解析SQL语句的位置顺序执行应用这些SQL语句,并在relay-log.info中记录当前应用中继日志的文件名及位置点。 经过上面的过程,就可以确保在Master端和Slave端执行了同样的SQL语句。当复制状态正常时,Master端和Slave端的数据是完全一样的。
说了这么多废话,实际操作一下!
一、准备两台机器,一台做主库,一台做从库,两台均安装了mariadb代替mysql用,并且需要互相ping通
二、主库操作
1.前面讲到需要用到binlog日志,所以需要配置一下主库的mysql数据库的配置文件my.cnf

配置server_id,这里只是机器代号,所以根据自己的习惯来,log_bin这个是配置binlog日志的文件名,其实也可以随意,binlog_format是配置binlog日志的记录方式,这里必须配置mixed,是记录binlog日志的方法,混合记录的意思
然后重启mysql数据库 systemctl restart mariadb
进入mysql数据库授权一个作为同步数据的一个账号

replication slave是只能作为从库同步账号的一个权限,kenji@'%'这里也可以设置需要同步的从库Ip地址,如果有多个从库,则为%最方便
再查看一下binlog日志 show master status;

2.从库,只需要配置一个server_id即可

同样,重启mysql systemctl restart mariadb
这里可以测试一下刚刚主库授权的账号是否可以登录

很不幸,登录不上,排查一下原因,1.能不能ping通,2.能不能telnet通3306,最后发现需要在主库上添加一个iptable

经过测试在从库的机器上能登录上主库了,然后配置同步,先用root登录上从库的mysql查看一下slave配置
这个就表示还没有配置slave,接下来就是配置slave

然后启动同步 start slave
查看同步 show slave status\G; //\G是为了方便阅读

出现这两个yes就标明配置没有问题,然后就可以在主库上随便建一个数据库,然后去从库上看看有没有啦!
以上就是配置主从
当然这就是最简单的主从复制的模式
还有另外的一主多从,互为主从,一主一从(主)一从(主)一从等等
未经允许不得转载:天府数据港官方信息博客 » Mysql主从复制
客官点个赞呗! (0)