Mysql主从复制

一、主从复制

1. 主从复制作用

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

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

2. 主从复制原理

 

 

①从数据库处理用户读操作,主数据库处理用户写操作。

②用户写入数据到主数据库时,主数据库更新并写入binlog二进制日志中。

③主数据库开启dump线程一边读取binlog日志一边通过网络将日志传输给从数据库。

④从数据库通过io线程接收binlog日志并保存为中继日志(即binlog日志只是换了名称)。

⑤从数据库开启sql线程将中继日志写入从数据库主从数据库复制完成。

3. 三个重要线程

dump线程:由主数据库开启,用于读取主的二进制日志并传输给从数据库 。

io线程:由从数据库开启,用于接收二进制日志并保存为中继日志。

sql线程:由从数据库开启,用于将中继日志写入备数据库中完成主从复制。

 

4. 主从复制实验

4.1 实验环境

准备两台安装了相同版本mysql数据库的服务器

master(pc1):192.168.50.200

slave(pc2): 192.168.50.100

关闭防火墙,增强功能

4.2 重置密码

复制代码
pc1、pc2执行:
systemctl  stop  firewalld.service 
setenforce 0
systemctl start mysqld
#开启数据库
grep password /var/log/mysqld.log
#在错误日志中找到mysql初始密码,如下图
mysql -uroot  -p'初始密码' 
#登录数据库
alter user root@'localhost'  identified by 'Admin@123';
quit;
#修改root默认密码并退出
复制代码

 

 

4.3 主节点配置

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

 

 

4.4 从节点配置

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

 

4.5 实验验证

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

master:

 

 slave:

 

 

二、 级联复制

1. 级联复制原理

 

 

①一级主是二级主的主数据库,二级主是从数据库的主服务器

②配置时二级主的主服务器ip日志远程用户等配置一级主的信息,二级主将一级主的二进制日志转发给从数据库

③配置从数据库时主服务器ip日志远程用户等配置二级主的信息

2. 级联复制实验

2.1 实验环境

准备三台相同mysql数据库的服务器

master1(pc1):192.168.50.200

master2(pc2):192.168.50.100

slave(pc3) :192.168.50.150

2.2 关闭防火墙,增强功能,重置mysql密码为‘Admin@123’

2.3 master主服务器配置与主从复制master一致

2.4 二级主master2配置与主从复制从服务器配置相同,只需要在修改配置文件时多添加一条:log_slave_updates(此条为开启log转发更新即将一级主的binlog转发给从服务器)

 

 2.5 slave配置:从服务器配置:与主从复制从服务器配置相同,注意从服务器的主是二级主,所以配置主机ip,远程用户密码以及端口和日志位置时要写二级主的信息。

 

posted @   此生何必111  阅读(53)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
1
点击右上角即可分享
微信分享提示