主从复制

前述:
主从复制依赖于二进制日志,也就是说想要实现主从复制必须开启二进制日志功能。
原理:当主节点数据发生变化后会记录到二进制日志中,由二进制日志将写入的数据传送给slave的服务线程(dump Thread线程)其作用就是将传送过来的数据加载到内存中然后通过网络传送给slave节点。而slave节点也会开启一个接收数据线程(io Thread线程)并写入到中继日志(Relay Log),再通过sql Thread 读取Relay Log 在磁盘的数据加载到数据库中。

主从复制架构图:
原则:master不宜复制多个slave以导致复制压力过大。左2:一主一从,通过slave再复制给多个slaves以降低主的复制压力。
优势:主从复制能够实现读写分离,即master在进行写时,slave能够提供用户读服务从而实现负载。

Master节点配置:
1.在配置文件中启用二进制日志功能

2.为当前节点设置一个全局惟一的ID号,不可与slave一样否则会冲突。(这个ID号建议设置成IP的主机号)

<重启服务后进入数据库查看server_id 是否已修改>

3.创建一个拥有slave复制数据权限的用户账号,用于授权slave能够给从master拉取数据。

1)创建slave账号

create user slave1@'10.0.0.100' identified by '123453456';

2)对该账号赋予 replication slave 权限

grant replication slave on *.* to slave1@'10.0.0.100';

4.查看master节点的二进制日志偏移量位置,找到最新二进制位置记录下来。注:先创建账号再记录,这样复制时就可直接把账号复制下来。

show master logs;


slave节点配置:
1.开启二进制日志功能。

2.为当前节点设置一个全局惟一的ID号,不可与master一样否则会冲突。(这个ID号建议设置成IP的主机号)

3.将slave上的数据库设置为只读,此功能针对普通用户如果是root还是能够修改数据库数据。

4.在slave数据库中通过 change master to 命令添加master以及master的信息。
1)首先通过命令 help change master to 获取master的信息模板

help change master to

2)其次将master的信息添加进去

CHANGE MASTER TO
MASTER_HOST='10.0.0.10',                  ### master的主机号(也就是IP)
MASTER_USER='slave1',                     ### 在master数据库中所创建并授权用于连接master数据库复制数据的账号
MASTER_PASSWORD='123456',
MASTER_PORT=3306,                              
MASTER_LOG_FILE='mysql-bin.000004',       ###定义slave从master二进制日志的偏移量进行复制数据(一般为最新的偏移量),在创建slave1账号之后通过 show master status; 命令进行查看,可将slave1账号一并复制下来。

MASTER_LOG_POS=156;                       ###日志的标记结束号(slave根据这个标记结束号开始复制数据)

3)最后通过命令查看slave的状态,这里可以看到master信息虽然被添加进去了但是 IO 、SQL 线程处于NO状态(开启后才能实现主从复制)

show slave status\G;


4)最最后开启slave向master进行复制数据而IO SQL线程也将会被开启

start slave;

 
5)查看线程列表可以看到这两个线程分别为IO和SQL线程

show processlist;

6)slave中可以看到,连接已经建立

7)返回master数据库中查看发现dump线程已开启,至此实现主从复制的三线程全部开启

8)再返回slave数据库可以看到slave1账号已被复制下来

遇到的问题:
Slave_SQL_Running:NO    #SQL线程为NO
解决办法:将sql_slave_skip_counter设置为1(表示开启)

set global sql_slave_skip_counter =1;

应用场景:只适合数据库初建立时master数据库没有多少数据而选取某个二进制日志偏移量进行数据复制,但在实际生产中数据库必然运行久远(某些二进制日志偏移量不存在),如果还使用change master to (添加master信息)就会导致部分数据的丢失,解决方案:可先对master进行完全备份导入slave后再选择master最新的二进制日志偏移量后再进行 change master to

posted on 2021-06-19 16:00  1251618589  阅读(24)  评论(0编辑  收藏  举报

导航