主从复制的原理
- 主服务器
- 开启二进制文件,记录操作
- 配置 唯一的 serverID
- 获得master 二进制文件位置
- 提供一个让 从服务器使用的,进行通信的账号
- 从服务器
- 配置 唯一的 serverID
- 用master 提供的账号访问二进制文件
首先master 服务器 将自己的操作数据库事件记录到二进制文件中,然后提供一个账号给从数据库,slave 从服务器会对这个二进制文件进行监听,一旦有改变,就用master提供的账号,将时间复制到自己的中继日志,然后执行操作。这个过程master 会提供一个专门的IO线程来操作,所以不会对正常的使用造成影响。
安装多个数据库
我的是在windows的,所有安装了3个服务
- localhost:3306;
- localhost:3310
- localhost:3320
具体 怎样安装多个服务,参考上一篇:
https://blog.csdn.net/houdezaiwu1/article/details/90260359
一 master 配置
1. 修改 my.ini 添加master
#=========主从复制关键配置=====================
server_id=1 #主库和从库需要不一致,配一个唯一的ID编号,1至32。 手动设定
log-bin=master-bin #二进制文件存放路径,存放在根目录data
#binlog-do-db=test #需要复制的库,多个库用逗号隔开,如果此项不配置所有主库都参与复制
#binlog-ignore-db=mysql #不需要复制的库,和上项同理
#=========主从复制关键配置=====================
保存,重启服务。net start mysql
- 登录查看状态
- show master status
file 就是保存日志的二进制文件,position
107代表操作数据库的事件位置标记。
2. 创建用于给从库使用的账号
- create user copyuser; #用户名就是 copyuser
- grant replication slave on . to ‘copyuser’@'127.0.0.1’identified by ‘123456’; # 分配权益
- flush privileges; #刷新权限
二 slave 从服务器配置
1. my.ini修改
#========主从复制关键配置======================
server_id=2 #主库和从库需要不一致
#binlog-do-db=test #和主库说明一致
#binlog-ignore-db=mysql #和主库说明一致
#========主从复制关键配置======================
2. 执行同步语句
- change master to master_host=‘127.0.0.1’,master_port=3306,master_user=‘copyuser’,master_password=‘123456’,master_log_file=‘master-bin.000001’,master_log_pos=0;
3. 启动同步进程
- start slave # 开始同步
4. 查看同步情况
- show slave status\G
可以看到: Slave_SQL_Running : NO
还有last error,写明了具体的错误。
这是没有成功的,因为执行过程报错了,
执行命令跳过这个错误继续执行:
- set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
下面就正常了
按照相同步骤,配置第二个从库,省略。。。。。
三 验证
登录sqlyong
可以看到已经同步了
略。。。。