当前位置: 首页 > Linux

MySQL5.7主从复制配置

时间:2023-04-06 11:20:18 Linux

一、主从复制原理MySQL主从复制是一个异步复制过程。主库向从库发送更新事件,从库中读取更新记录,并执行更新记录,使从库的内容与主库保持一致。每个主从复制连接都有三个线程。一个主库有多个从库,为每个连接到主库的从库创建一个logdump输出线程,每个从库都有自己的I/O线程和SQL线程。步骤:1.主库会将所有的更新记录保存到Binarylog文件中。2、每当从库连接到主库时,主库都会创建一个日志转储线程,将Binarylog文件发送到从库。3、从库复制开始时,从库会创建2个线程进行处理,1个I/O线程,1个SQL线程。4.I/O线程请求主库的Binarylog文件,将获取到的Binarylog文件写入Relaylog文件。5、SQL线程会读取Relaylog文件中的日志,解析成具体的操作,实现主从操作一致,最终数据一致。二、工具VMware版本:12.0.0CentOS版本:7.0MySQL版本:5.7.18主服务器:192.168.78.128从服务器:192.168.78.130三、准备1、安装MySQL5.7,详见这里2、如果从服务器是aclone更改auto.cnf文件中的server-uuid值,否则主从复制会报1593错误。修改完成后,记得重启MySQL3。关闭主从服务器防火墙:$firewall-cmd--state##查看防火墙状态running##防火墙开启$systemctlstopfirewalld##关闭防火墙$firewall-cmd--statenotrunning##防火墙关闭4.修改master-slave配置文件(my.cnf):##192.168.78.128(master)bind-address=192.168.78.128#master服务器地址log_bin=mysql-binserver_id=128##192.168.78.130(slave)bind-address=192.168.78.130#从服务器地址log_bin=mysql-binserver_id=130重启主从MySQL:$systemctlrestartmysqld注意:server_id必须是唯一的。5.在master上创建一个测试数据库(test):$createdatabasetest;$使用测试;$创建表测试(idint(11),值varchar(20));$insertintotestvalues(1,'aa'),(2,'bb'),(3,'cc');四、主从复制1、Master创建授权用户:192.168.78.128(master):##创建测试用户,指定该用户只能使用MyPass1!passwordtologintomysql>createuser'test'@'192.168.78.130'identifiedby'MyPass1!';##授予REPLICATIONSLAVE权限给测试用户。mysql>grantreplicationslaveon*.*to'test'@'192.168.78.130';##查看用户mysql>selectuser,hostfrommysql.user;##查看master状态mysql>showmasterstatus;注意:这里需要用到mysql-bin.000001和slave配置的Position值。2.导出master中已有的数据信息:$mysqldump-uroot-p--all-databases--master-data>all.sql3.将all.sql发送到从服务器的tmp目录:$scpall.sqlroot@192.168.78.130:/tmp4.slave导入主数据,使主从数据一致:192.168.78.130(slave):$mysql-uroot-pchangemasterto->master_host='192.168.78.128',->master_user='test',->master_password='MyPass1!',->master_log_file='mysql-bin.000001',->master_log_pos=1244;mysql>startslave;mysql>showslavestatus\G注意:master_log_file和master_log_pos的值是在master数据库上执行showmasterstatus。如果Slave_IO_Running和Slave_SQL_Running都为Yes,则配置成功。如果其中一个不是Yes,查看Last_IO_ErrnoerrorCode和错误信息,或者查看MySQL日志信息,找到对应的问题五、主从配置检查master插入一条数据,slave检查是否成功192.168。如何解决延迟?