当前位置: 首页 > 科技观察

MySQL:第一次看到有人把MySQL主从复制解释的这么清楚

时间:2023-03-13 01:47:37 科技观察

一、基本原理MySQL的复制过程分为三步:1)master记录变化到二进制日志(binarylog).这些记录过程称为binarylogevents,二进制日志事件;2)、slave将master的二进制日志events复制到自己的中继日志(relaylog)中;3)、slave重做relaylog中的events,会把application改成自己的数据库。MySQL复制是异步和可序列化的。简单来说:slave会从master读取binlog进行数据同步MySQL的复制(replication)是一种异步复制。整个复制操作主要由三个进程完成,其中两个进程在Slave上(Sql进程和IO进程),另一个进程在Master上(IO进程)。要实现复制,必须先在Master端开启二进制日志(bin-log)功能,否则无法实现。因为整个复制过程其实就是Slave从Master那里获取日志,然后在自己身上完整的、顺序的执行日志中记录的各种操作。复制的详细过程:(1)Slave上的IO进程连接到Master,从指定日志文件的指定位置(或从初始日志)请求日志内容;(2)Master收到Slave的IO进程请求后,负责复制的IO进程根据请求信息读取日志指定位置后的日志信息,返回给Slave的IO进程.返回的信息除了日志中包含的信息外,还包括本次返回的信息到达Master的bin-log文件名和bin-log的位置;(3)Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件末尾,读取的文件名和位置Master端的bin-log都记录在master-info文件中,方便下次高速Master时清晰读取《我需要从某某bin-log日志内容从哪里开始,请发给我》";(4)Slave的Sql进程检测到relay-log中有新的内容加入后,会立即解析relay-log的内容,在Master端真正执行时成为可执行内容,并执行自己。原则:每个slave只有一个master;每个slave只能有一个唯一的serverID;每个master可以有多个slave;2、一主一从相关配置demo主机是Windows(配置文件是my.ini文件),从机是Linux(配置文件是my.自己本地路径/data/mysqlbin.log-bin=D:/devSoft/MySQLServer5.5/data/mysqlbin.3)、【可选】启用错误日志log-err=你的本地路径/data/mysqlerr。log-err=D:/devSoft/MySQLServer5.5/data/mysqlerr.4)、【可选】根目录basedir="你自己的本地路径"。basedir="D:/devSoft/MySQLServer5.5/"。5)、【可选】临时目录tmpdir="你自己的本地路径"。tmpdir="D:/devSoft/MySQLServer5.5/"。6)、【可选】数据目录datadir="你自己的本地路径/Data/"。datadir="D:/devSoft/MySQLServer5.5/Data/".7)、【可选】设置数据库binlog-ignore-db=mysql不被复制。8)、【可选】设置要复制的数据库binlog-do-db=要复制的主数据库名称。2、从机配置(linux的my.cnf)【必须】从机的唯一ID;[可选]启用二进制日志;3、由于修改了配置文件,请在master和slave上都重启后台mysql服务4、master-slave关闭所有机器上的linux防火墙,手动关闭windows;关闭虚拟机linux防火墙服务iptablesstop;5.在Windows主机上创建一个账号,从机器数据库IP'IDENTIFIEDBY'123456';授权SlaveGRANTREPLICATIONSLAVEON*.*TO'zhangsan'@'。刷新配置flushprivileges;。查询master的状态。显示主人身份;记录File和Position的值;执行此步骤后,不要再对主服务器MYSQL进行操作,以免主服务器的状态值发生变化。6、在Linux从机上配置要复制的主机配置CHANGEMASTERTOMASTER_HOST='主机IP',MASTER_USER='zhangsan',MASTER_PASSWORD='123456',MASTER_LOG_FILE='文件名',MASTER_LOG_POS=位置号;从服务器启动复制功能,启动slave;。查看配置,下面两个参数是Yes,说明主从配置成功!Slave_IO_Running:是的。Slave_SQL_Running:是的。CHANGEMASTERTOMASTER_HOST='192.168.124.3',MASTER_USER='zhangsan',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysqlbin.specificnumber',MASTER_LOG_POS=具体值;7.master键表,看有没有slave8.如何停止master从servicecopy函数中输入stopslaveunderlinux;。