MySQL?配置主从复制实践分享 |
一、检测通信查看主库(master)和从库(slave)的ip地址,并检测是否可以通信 保证master和slave之间网络是互通的,用ping命令检测 到这里我们知道,master的ip为192.168.131.129,slave的ip为192.168.0.6,并且可以相互通信 。保证3306端口开放 查看防火墙状态 临时手动启动防火墙 持久打开防火墙(重启服务生效) 查看当前开放的端口列表 二、master配置1. 开启二进制日志配置log_bin和全局唯一的server-id,和slave区分开,不能配置成一样的(如果是my.cnf新添加配置,一定要重启MySQL服务)
2. 创建一个用于主从库通信用的账号即在master中创建一个账号,用于slave登录master读取binlog 虽然我们在Linux上查看的ip地址是192.168.131.129,但我们创建账户登录时不写这个ip,写的是192.168.131.1 。因为我这里虚拟机用的是NAT模式(如果是桥接模式就可以直接用了),虚拟机(master)和物理机(slave)通信的时候,虚拟机先把数据发送到网关192.168.131.1(默认与VMnet8通信),192.168.131.1再转发到物理机,所以物理机接收到的是192.168.131.1的数据,故我们在master上为slave创建账户的时候,应该写192.168.131.1 如果给slave配置的不是网关192.168.131.1地址, 这说的就是从192.168.131.1的mslave权限不够,那是因为我们在master配置的是允许从其他地方登录,并不允许从192.168.131.1地址登录,导致权限不够 。 由于master这边收到的是来自192.168.131.1的请求,所以错误日志显示的是192.168.131.1 创建用户的命令: //如果嫌麻烦可以用%代替192.168.131.1,,它就可以匹配任何ip mysql> CREATE USER 'mslave'@'192.168.131.1' IDENTIFIED BY '1qaz@WSX'; //启动主从,在主库上给当前的mslave用户开启REPLICATION SLAVE主从复制的权限,从库就可以通过1qaz@WSX账户密码 //从192.168.131.1 IP地址来请求访问这台主库上的任意库里面的任意表*.*,同步这个主库的任意库里的任意表 mysql> GRANT REPLICATION SLAVE ON *.* to 'mslave'@'192.168.131.1' IDENTIFIED BY '1qaz@WSX'; mysql> FLUSH PRIVILEGES; 3. 获取binlog的日志文件名和position
三、slave配置1. 配置全局唯一的server-id配置全局唯一的server-id 涉及修改配置文件,需要重启MySQL服务 2. 使用master创建的账户读取binlog同步数据这一步配置主要是给IO线程读取binlog使用: mysql> CHANGE MASTER TO MASTER_HOST='192.168.131.129', MASTER_PORT=3306, MASTER_USER='mslave', MASTER_PASSWORD='1qaz@WSX', MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=1262;
3. 开启slave服务通过 四、配置中可能出现的问题1. 网络连接问题通过show slave status命令查看主从复制状态 连接connection错粗,先考虑网络是否互通,ping一下: 然后再检查从库里面的配置信息是否正确 如果都正确,检查主库所在机器的3306端口是否正常 telnet xxx.xxx.xxx.xxx 3306 如果发现3306端口不能连通,就需要怀疑主库对端口有限制吗,也就是防火墙限制,就需要在防火墙把3306端口开放出来 。 如果这个错误还没解决,就查看一个主库的错误日志 这说的就是从192.168.131.1的mslave权限不够,自己玩的时候,如果虚拟机是NAT模式,则需要写成VMnet8网关ip 。如果都是物理机通信,那直接写正确的ip即可 可以在MySQL数据库下的mysql库的user表中更改允许登录的ip 然后重新赋予权限: mysql> GRANT REPLICATION SLAVE ON *.* to 'mslave'@'xxx.xxx.xxx.xxx' IDENTIFIED BY '1qaz@WSX'; 2. binlog的position问题在master中查看show master status一下binlog日志文件名以及position,然后用命令重新配置slave,比如: mysql> CHANGE MASTER TO MASTER_HOST='192.168.131.129',MASTER_PORT=3306,MASTER_USER='mslave',MASTER_PASSWORD='1qaz@WSX', MASTER_LOG_FILE='mysql-bin.000006',MASTER_LOG_POS=1262; 配置slave前需要stop slave,配置完成再start slave 3. SQL线程出错错误原因:首先配置主从复制的时候,slave的mytest库中没有user表,而master的mytest库已经有user表了 。配置好主从复制后直接drop table mytest.user,这就会写到binlog里面,然后在通过dump线程和IO线程将这个操作发送到从库的relay log,然后从库的SQL线程从relay log里把drop table mytest.user捞出来在从库执行这个SQL,可从库的mytest根本就没有user表,这就是删除一个不存在的表,于是出现错误了 。 一般我们是不会做这样的操作的,我们一般都是主库配置以后,slave从数据开始增量进行同步,不会同步以后一开始就删主库里的东西,如果真的出现这样的问题了,随时可以通过 可以通过show slave status查看以下标识,IO线程出错一般是网络问题,SQL线程出错一般是SQL在slave库执行出现了问题 到此这篇关于MySQL 配置主从复制实践分享的文章就介绍到这了,更多相关MySQL 配置主从复制 内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持! |