Mysql(非容器安装)主从复制(一)

一.简介

     场景:为了防止数据节点宕机或者节点损坏,都要用副本机制来实现。MySQL 数据库同样可以集群部署,有了多个节点之后,节点之间数据就需要同步

     形式: 1)一主一从/多从      2)互为主从       3)级联复制

     用途:1)数据备份:把数据复制到不同的机器上,以免单台服务器发生故障时数据丢失。
                2)负载均衡:结合负载的机制,均摊所有的应用访问请求,降低单机 IO。
                3)高可用 HA:当节点故障时,自动转移到其他节点,提高可用性

二.实现

   基本原理:客户端对 MySQL 数据库进行操作的时候,包括 DDL 和 DML 语句,服务端会在binlog 日志文件中用事件的形式记录所有的操作记录,基于 binlog,我们可以实现主从复制和数据恢复。
                        binlog 默认是不开启的,需要在服务端手动配置。注意有一定的性能损耗

   配置流程:  1.配置binlog

                         a.编辑 /etc/my.cnf: 

 [mysqld]
 server-id=1
 log-bin=/var/lib/mysql/mysql-bin   

                        b.重启MySQL服务

                         c.查看是否开启:  show variables like 'log_bin%';

                                                

                        d.查看binlog格式:show global variables like '%binlog_format%';
                             

                            STATEMENT:记录每一条修改数据的 SQL 语句(减少日志量,节约 IO)。
                            ROW:记录哪条数据被修改了,修改成什么样子了(5.7 以后默认)。
                            MIXED:结合两种方式,一般的语句用 STATEMENT,函数之类的用 ROW

                        e:其它binlog相关命令

                            show binary logs;   //查看 binlog 列表(Binlog 文件超过一定大小就会产生一个新的)

                            show binlog events in 'mysql-bin.000001';   //查看binlog内容

                      2.在主库创建具有复制权限的用户,并授权     

                          GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '用户名'@'Ip' IDENTIFIED BY '密码'; FLUSH PRIVILEGES;

                      3.从库/etc/my.cnf 配置,重启数据库

[mysqld]
server-id=2
log-bin=mysql-bin
relay-log=mysql-relay-bin
read-only=1
log-slave-updates=1

                       开启 log-slave-updates 参数后,从库从主库复制的数据会写入 log-bin 日志文件里,这样可以实现互为主备或者级联复制(它自己也可以作为一个 master 节点)

                    4.在主库执行:show master status

                         

                    5.在从库执行

                        master_log_file:指定 Slave 从哪个日志文件开始复制数据,即 show master status 中的 File 字段的值

                        master_log_pos:从哪个 Position 开始读,即 show master status 中的 Position 字段的值

                        master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

stop slave;
change master to master_host='主机Ip',master_user='账户',master_password='密码',master_log_file='mysql-bin.000001', master_log_pos=4,master_connect_retry=30;
start slave;

                   6. 在从库执行SHOW SLAVE STATUS \G  查看同步状态

                       Slave_IO_Running 和 Slave SQL Running 都为 yes 为正常
 
 同步流程:

                   1、slave 服务器执行 start slave,开启主从复制开关, slave 服务器的 IO 线程请求从 master 服务器读取 binlog(如果该线程追赶上了主库,会进入睡眠状态)。
                   2、master 服务器创建 Log Dump 线程,把 binlog 发送给 slave 服务器。slave 服务器把读取到的 binlog 日志内容写入中继日志 relay log(会记录位置信息,以便下次继续读取)。
                   3、slave 服务器的 SQL 线程会实时检测 relay log 中新增的日志内容,把 relay log解析成 SQL 语句,并执行。
                         为什么需要 relay log?为什么不把接收到的 binlog 数据直接写入从库?
                         Relay log 相当于一个中转站,也记录了 master 和 slave 的同步信息


 

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值