Mysql主从复制

发布时间 2023-03-26 20:54:37作者: twistfate123

一、主从复制

1、主从复制作用

主从复制:主设备通过二进制日志传输到从设备,从设备通过二进制日志和主同步数据。

作用:负载均衡读操作,备份(实时备份,不能替换手动的备份),高可用和故障切换,数据分布,Mysql升级。

2、主从复制原理

 

1主节点负责用户的写操作,用户发起写操作后,会修改数据库
2.数据库修改后,会更新主节点上的二进制日志
3.主服务器会产生一个 dump线程, 一边读取二进制日志
一边将二进制日志通过 网络传给从服务器
4.从服务器会开启io线程,接收主服务器的二进制日志
5 如果数据量较大,不会存在内存中 ,会写入中继日志,这时只是生成
了一个文件,并没有同步
6.从服务器再开启 sql线程将 中继日志中 操作写入数据库完成更新

 

MySQL主从复制实战

master:192.168.10.136 server_id=120

slave:192.168.10.135 server_id=130

实验之前得保证两台机器能够通过ssh远程连接

关闭2台服务器的firewalld以及selinux,重置mysql密码为Admin@123

[root@localhost ~]#vim  /etc/my.cnf
#修改文件
[mysqld]
server_id=100
log-bin=/data/mysql/mysql-bin

[root@localhost ~]#mkdir /data/mysql/   -p
#建立文件夹
[root@localhost ~]#chown mysql.mysql /data/ -R
#注意修改权限
[root@localhost ~]#systemctl restart mysqld


mysql -uroot -p'Admin@123' 

  

主节点配置

vim  /etc/my.cnf
[mysqld]下一行添加内容:
server_id=11
#serverid建议配置为ip地址最后8位
log-bin=/data/mysql/mysql-bin
#指定二进制日志文件保存位置为/data/mysql/,保存后退出
mkdir  -p /data/mysql
#创建保存二进制文件的目录
chown mysql:mysql -R /data/
#目录的属主属组都给到mysql用户
systemctl restart mysqld
#重启数据库
mysql -uroot -p'Admin@123'
#登录数据库
grant replication slave on *.* to test@'192.168.30.%' identified by 'Admin@123';
#创建复制用户只要是192.168.30开头的地址都可使用用户名test密码Admimin@123登录数据库。
show  master status;
#查看主从复制从那个二进制日志的那个初始节点开始,从服务器配置需要依赖此条查看结果,如下图

  

从节点配置

vim  /etc/my.cnf
[mysqld]下一行添加内容:
server_id=12
#serverid建议配置为ip地址最后8位
log-bin=/data/mysql/mysql-bin
#指定二进制日志文件保存位置为/data/mysql/
relay-log=relay-log-bin#开启中继日志
relay-log-index=slave-relay-bin.index#添加,定义中继日志文件的位置和名称,保存后退出
mkdir  -p /data/mysql
#创建保存二进制文件的目录
chown mysql:mysql -R /data/
#目录的属主属组都给到mysql用户
systemctl restart mysqld
#重启数据库
mysql -uroot -p'Admin@123'
#登录数据库
help change master to
#可以查看配置帮助复制出来修改,或直接复制下面模板
CHANGE MASTER TO
  MASTER_HOST='192.168.30.11', 
#主服务器主机ip
  MASTER_USER='test',
#主从复制登录用户名
  MASTER_PASSWORD='Admin@123',
#主从复制登录用户名的密码
  MASTER_PORT=3306,
#主服务器数据库端口
  MASTER_LOG_FILE='mysql-bin.000001',
#从那个二进制日志开始复制,show master status;看到的结果
  MASTER_LOG_POS=448;
#从二进制日志的那个at节点开始复制,show master status;看到的结果
start slave;
#开启主从复制
show  slave status\G
#查看主从复制状态,找到Slave_IO_Running: Yes    Slave_SQL_Running: Yes 此2个参数为yes则主从复制开启完成。
 

  

实验结果

主数据库:
create  databases   test1;
#创建一个test1测试库
备数据库:
show  databases;
#查看是否同步到test1库