自己测试搭建mysql数据库的主从复制,并记录下自己遇到的所有坑点。
什么是主从数据库
环境
系统:window10
mysql:5.7
主服务器:192.168.99.86
从服务器:192.168.99.181
测试主从复制的数据库名 vim
一,主数据库配置
在主服务器进行如下操作,使用mysql控制台。
- 停止mysql,在mysql安装目录下修改my.ini文件,添加如下配置
#=========主从复制关键配置=====================
#主库和从库需要不一致,配一个唯一的ID编号,1至32。 手动设定
server_id=1
#二进制文件存放路径,存放在根目录data
log-bin=mysql-bin
#需要复制的库,多个库用逗号隔开,如果此项不配置所有主库都参与复制
binlog-do-db=vim
#不需要复制的库,和上项同理
#binlog-ignore-db=mysql
#=========主从复制关键配置=====================
- 打开mysql控制台窗口执行:
windows打开mysql控制台方法链接
CREATE USER 'slave'@'192.168.99.%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.99.%';
FLUSH PRIVILEGES;
slave:给从服务器分配的登录账号
123456:给从服务器分配的登录密码
192.168.99.% :从服务器可以从哪里登录,从服务器ip限制
- 查看状态
show master status;
- 控制台窗口如下
二进制文件为mysql-bin.000007,位置为604 数据库 vim
二,从数据库配置
在从服务器进行如下操作,使用mysql控制台。
- 停止mysql,在mysql安装目录下修改my.ini文件,添加如下配置
#=========主从复制关键配置=====================
#主库和从库需要不一致,配一个唯一的ID编号,1至32。 手动设定
server_id=2
#二进制文件存放路径,存放在根目录data
log-bin=mysql-bin
#需要复制的库,多个库用逗号隔开,如果此项不配置所有主库都参与复制
binlog-do-db=vim
#不需要复制的库,和上项同理
#binlog-ignore-db=mysql
#=========主从复制关键配置=====================
- 打开mysql控制台:关闭主从复制服务
slave stop;
- 执行同步语句
change master to master_host='192.168.99.86', master_user='slave', master_password='123456', master_log_file='mysql-bin.000007', master_log_pos=604;
- 启动主从复制功能
start slave;
- 检查从服务器复制功能状态
show slave status\G
主要下面两个属性需要为yes才是开启成功。
Slave_IO_Running: Yes //此状态必须YES
Slave_SQL_Running: Yes //此状态必须YES
6. 之前控制台操作总结
测试
在主数据库的测试表添加数据,看从数据库是否更改。通常就成功了。
下面是问题总结:
我不小心在从数据库添加了一条数据导致主键约束而无法添加数据。所以在使用从表的时候。一定不要去添加,修改从表数据。不然主从复制就会停止了。
问题复盘:
我在主数据库手动添加一条数据,我看到从数据库没有更新。
先检查从服务器复制功能状态:在从服务器mysql控制台输入
show slave status\G
发现报错为主键冲突:Duplicate entry ‘1’ for key ‘PRIMARY’ on query
删除从表不小心输入的数据。
然后重启主从复制服务。运行:
start slave;
发现问题解决了。主从就配置好了。