主从复制简单概要:
主数据库的DDL和DML操作通过二进制日志传到从数据库上,然后再从数据库上对这些日志进行重新执行,从而使得从数据库和主数据库的数据保持一致。
一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据自动复制到从服务器之中。
或者更加直白的讲就是主数据库做什么,从数据库就跟着做什么。
理论原理:
1.Master数据库只要发生变化,会有记录到Binary log日志里面
2.Slave数据库启动一个I/O thread连接Master数据库,请求Master变化的进制日志
3.Slave I/O获取到的二进制日志,保存到自己的Relaylog日志文件中
4.Slave有一个SQL thread定时检查Realy log是否变化,会保持同步更新变化
基本环境准备:
我是用的2台CentOS 8.3,
主服务器master为10.0.0.145
从服务器slave为10.0.0.146
两台服务器都已经安装过MySQL,并且启动。
具体步骤:
1、配置主服务器 master节点上配置, 10.0.0.145 ,修改配置文件/etc/my.cnf
启用binlog ,master节点一般设置为1,每个节点的序号是唯一的
然后重启数据库服务, 进入数据库查看主服务器是否配置成功
create user 'tom'@'10.0.0.%' identified by '123456'; ##创建用户,可以使用此用户远程登录数据库
GRANT REPLICATION SLAVE ON *.* TO 'tom'@'10.0.0.%'; ##授权为可以复制master节点数据的slave节点
flush privileges; ##刷新权限
show master status; ## 查看master节点的状态
#若执行结果为Empty set (0.00 sec) ,说明log-bin配置项有问题。查看Position 为383。 主从复制就是基于 position
2、然后从服务器(slave节点)上配置 IP :10.0.0.146
vim /etc/my.cnf 节点数据库 写入: server-id=2
设置mysql的主从复制:
mysql> change master to master_host='10.0.0.145', #主库的ip地址
-> master_user='tom', #主库的用户
-> master_password='123456', #主库的密码
-> master_log_file='mysql-bin.000001', #主库的日志文件
-> master_log_pos=2043; #主库的状态码
start slave; 开启本节点的slave
show slave status\G;查看slave节点的状态
3、最后就可以测试验证效果,在主数据库上操作,从库也可以正常查询到,数据库一主一从配置成功。