主从复制原理:
1 master开启bin-log功能,日志文件用于记录数据库的读写增删
2 需要开启3个线程,master IO线程,slave开启 IO线程 SQL线程,
3 Slave 通过IO线程连接master,并且请求某个bin-log,position之后的内容。
4 master服务器收到slave IO线程发来的日志请求信息,io线程去将bin-log内容,position返回给slave IO线程。
5 slave服务器收到bin-log日志内容,将bin-log日志内容写入relay-log中继日志,创建一个master.info的文件,该文件记录了master ip 用户名 密码 master bin-log名称,bin-log position。
6 slave端开启SQL线程,实时监控relay-log日志内容是否有更新,解析文件中的SQL语句,在slave数据库中去执行。
主从复制步骤:
1.当Master节点进行insert、update、delete操作时,会按顺序写入到binlog中。
2.salve从库连接master主库。
3.当Master节点的binlog发生变化时,binlog dump 线程会通知所有的salve节点,并将相应的binlog内容推送给slave节点。
4.I/O线程接收到 binlog 内容后,将内容写入到本地的 relay-log。
5.SQL线程读取I/O线程写入的relay-log,并且根据 relay-log 的内容对从数据库做对应的操作
主从复制配置:
主库配置:
1.server_id设置并开启binlog参数
[root@localhost ~]# vim /etc/my.cnf
server_id=1
log_bin=mysql_bin
2.重启mysql服务
[root@localhost ~]# systemctl restart mysqld
3.登录MySQL 授权用户
mysql> grant replication slave on *.* to 'rep1'@'192.168.244.%' ide
Query OK, 0 rows affected, 1 warning (0.00 sec)
查看主库信息:
mysql> mysql> show master status;
从库配置
1.设置server_id值,并重启mysql服务
[root@localhost ~]# vim /etc/my.cnf
server_id=2
[root@localhost ~]# systemctl restart mysqld
2.设置主从库同步
mysql> change master to
MASTER_HOST='192.168.244.146',
MASTER_PORT=3306,
MASTER_USER='rep1',
MASTER_PASSWORD='RedHat@123',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=154;
3.启动从库同步开关
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
检查状态
mysql> show slave status;