MySQL 主从复制学习

xu.wang

发布于 2019.04.25 22:36 阅读 2570 评论 0

1. 首先在虚拟机中创建了两个服务器,系统为CentOS7,安装了MySQL5.6、宝塔运维。
vm1 :192.168.123.204
vm2:192.168.123.45
本次用vm1做主数据库,vm2做从数据库进行学习。
 
2. 修改主数据库的配置文件
[mysqld] log-bin=mysql-bin #开启二进制日志
server-id=1 #设置server-id,此处id不应该设置成1,因为server-id默认为1,设置为1时会发生从数据库与主数据库id相同的问题。
binlog_format=mixed //二进制日志的格式,有三种:statement/row/mixed, 模式参考链接:http://www.cnblogs.com/langtianya/p/5504774.html
 
3. 修改主数据库的slave用来连master的账号密码
 
进入主数据库然后输入下面命令:
 
GRANT replication slave ON *.* TO 'slave'@'%' IDENTIFIED BY '123456.a';
解析:
replication slave : 修改从数据库连接配置
on *.* :配置了操作的数据,此处的意思为所有数据库
to ‘slave’@'%' : ‘slave‘ 表示登录账号,
@'%' : 表示所有ip都可连接
by '123456.a' : 此处为连接密码
 
4. 查看主数据库BIN日志信息
show master status ;
此时需要记录下来显示内容:(注意每次修改主数据库配置都需要重新查看master status,因为修改配置后file 和 position会改变)
(第一次执行时,显示的为 file:mysql-bin.000015 ;position:1550)
 
 
5. 设置从数据库
进入数据库
mysql - u root -p
enter password
 
change master to
master_host="192.168.123.204",
master_user="slave",
master_password="123456.a",
master_log_file="mysql-bin.000011",
master_log_pos=1550;
 
MASTER_HOST  :  设置要连接的主服务器的ip地址
       MASTER_USER  :  设置要连接的主服务器的用户名
       MASTER_PASSWORD  :  设置要连接的主服务器的密码
       MASTER_LOG_FILE  :  设置要连接的主服务器的bin日志的日志名称,即第3步得到的信息
       MASTER_LOG_POS  :  设置要连接的主服务器的bin日志的记录位置,即第3步得到的信息,(这里注意,最后一项不需要加引号。否则配置失败)
 
6. 启动从数据库服务
start slave;
 
7. 查看是否成功
show slave status;
若出现下面配置表明开启成功。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
 
但是根据当前步骤然后发现:
 
主从数据库id相同,这个是因为我们在设置主数据配置文件时设置的server-id=1 ,因为id默认都是1所以出现重复问题,
下面我们把主数据库id修改为204
 
修改之后发现,server-id还是1(查看命令为:show variables like 'server_id';)
然后再配置配置文件中进行查找,发现在设置server-id = 204 的下面还有一个 server-id = 1
的配置,所以导致配置不生效。删除多余配置然后重启服务即可。
 
然后在重启从数据库的slaver服务
stop slave;
start slave;
 
 
8. 测试
在vm1 :192.168.123.204 中创建有个数据库dbtest,并将表结构复制到vm2中。
例如: 创建“user”表,字段为id、int
然后在vm1中添加记录,id = 1
然后在vm2中(注意主从数据库名,表名必须相同)查询‘user’表记录,发先也插入了一个记录id=1、
但是,显示发现主数据库增加数据时,从服务器为更新数据,这个是为什么呢?
因为每次修改主数据库时,主数据库的position和file都会修改;所以修改从服务器的这两个配置:
首先,查看主数据库的show master status ;
发现file 和 position发生改变。
然后,修改从数据库配置
change master to
master_host="192.168.123.204",
master_user="slave",
master_password="123456.a",
master_log_file="mysql-bin.000015",
master_log_pos=621;
然后重启slave:
stop slave;
start slave;
 
测试主数据库修改数据,从数据库数据也随之改动。
 
大功告成