一、主从复制原理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-p
