mysql主从复制

前提:我做的实验,是使用阿里云来做主库,本机做从库的。

 

一,什么是主从复制?

mysql从3.23版本提供复制的功能。复制是指将主数据库的DDL和DML操作通过二进制日志传到复制服务器上(也叫从库),然后在从库上对这些日志重新执行(重做),从而使得主从数据库的数据一致。注意,mysql实现的是异步复制,所以主从库之间的数据会有一些差异的。一般都是把实时性较高的数据从主库中获取,实时性不高的数据就在从库中获取。

 

二,优缺点

优点:

        如果主库出现问题,可以快速切换到从库提供服务

        在从库上可以执行查询操作,减轻主库的压力

        在从库上执行备份,避免备份期间影响主库的服务

缺点:

       下边主要针对三种架构来说。

 

三,大概流程

       首先,主库在提交事务的时候会把数据变更作为时间记录在二进制日志文件binlog中,然后推送二进制日志文件binlog中的时间到从库的中继日志RelayLog中,之后从库根据中继日志文件来重做变更操作,通过逻辑复制来达到数据库的一致性。

       mysql通过三个线程来完成主从库之间的数据复制:BinlogDump线程,I/O线程,SQL线程。BinlogDump线程是运行在主库上的,I/O线程和SQL线程是 运行在从库上。当启动主从复制的时候,从库首先创建I/O线程连接主库,然后主库会创建BinlogDump线程读取数据库时间并发送给I/O线程,I/O线程获取时间后就更新到从库的中继日志RelayLog中,之后从库的sql线程就读取中继日志中的时间,更新数据并应用。

      为了保证从库在重启之后还应该知道从哪里开始复制,从库上默认会创建两个文件:master.info 和relay-log.info来保存复制的进度,这两个文件分别记录了从库的I/O线程读取主库的二进制文件的进度和SQL线程读取中继日志的进度。

 

四,二进制文件和中继日志文件

       1.由此可见,二进制日志文件和中继日志日志文件是非常重要的。二进制日志文件记录了所有数据操作(Create,Drop,Insert,Update...)等操作(不包括select,因为select不改变数据)。二进制日志文件有三种格式:statement,row,mixed。

        statement:基于sql语句级别的Binlog,每条修改数据的sql都会保存到binlog里。

        row:基于行级别,记录每一行数据的变化,也就是将每行数据的变化都会记录大奥binlog里边,但是不会记录原始sql,因为记录的信息详细,所以记录量比statement要大得多。

        mixed:这个是混合statement和row模式。默认情况下采用statement模式,某些情况下会切换成row:sql中包含时间,用户相关的函数等。

       这三种格式也对应着复制的三种模式,可以通过这条指令查看当前的复制模式:show variables like '%binlog%format';

     可以通过这个指令来修改值:set binlog_format = 'Row';

     2.中继日志文件和二进制日志文件一样,只不过从库上的sql线程在执行完中继日志文件之后会自动删除中继日志文件,避免中继日志文件占用过多的磁盘空间。

 

 五,主从复制常见的三种架构

    1.一主多从:可以通过此配置实现读写分离,在主库出现问题的时候,把一个从库切换成主库继续提供服务。

    2.多级复制:考虑到主库是推送binlog日志到从库的,所以当从库多了的时候,主库上的IO压力和网络压力也会很大(因为每一个从库都会在主库上有一个线程),多级复制架构就解决了这个问题,前边的master用来处理写请求,然后把二进制日志给后边的master,后边的master就专门用来推送二进制日志文件。这个情况下,由于又经过了一个数据库的中转,所以这个架构缺点是延时比其他架构要大。

    3.双主复制:主库master1和master2互为主从,这种架构方式,可以避免了重复搭建从库,维护等问题。

 

 

六,实战

   master:阿里云centos  slave:本机

   1.修改master机上的配置文件  vim /etc/my.cnf

    添加一下内容:  

    bind-address = 0.0.0.0

    server-id = 105

   这个server-id可以随便填,只是后边要作为一个从库找到主库的一个参数,bind-address是远程登录mysql的ip限制,此处的0.0.0.0是表示所有ip地址都可以远程登录mysql

  2.创建用于slave机器获取master机器上binlog文件的账号

   grant replication slave on *.* to 'zhu'@'%' identified by 'xxxx';(这个的密码按个人来设置,用于后边从库链接的验证)

  zhu是一个 用户名,用于后边链接主机用到。

   @'%'  这里是使用了通配的主机地址,也可以写成master机的ip地址

  *.*  表示所有的库和表,也可以自己制定,比如:aa.bb  就表示这个账号只允许访问aa库的bb表

  3. flush privileges;  #刷新数据库

  4.show master status; #查看master状态,并记录下binlog日志文件名以及position

   

   5.配置slave机上的数据库配置文件,加上bind-address和server-id

      bind-address = 0.0.0.0

       server-id = 106

  6.在slave机上登录数据库,输入这个指令:

  change master to master_host='主机ip地址', master_port=3306, master_user='zhu', master_password='密码',   master_log_file=' mysql-bin.000003', master_log_pos=902;

  master_host就是你主机的ip地址,master_user就是上边你刚刚创建的用户名,master_password就是上边创建用户的密码

 7.开启从库   

    在slave机上输入   start slave;

 

 8.查看slave状态  

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL主从复制MySQL内建的复制功能,用于构建基于MySQL的大规模、高性能应用。它的主要目的是实现高性能、高可用性、可扩展性、灾难恢复、备份以及数据仓库等功能。主从复制的常见用途包括以下几种: 1. 数据备份和灾难恢复:通过将主服务器上的数据复制到一个或多个从服务器上,可以实现数据的备份和灾难恢复。当主服务器发生故障时,可以快速切换到从服务器来保证系统的可用性。 2. 负载均衡:通过将读操作分发到多个从服务器上,可以减轻主服务器的负载,提高系统的性能和可扩展性。 3. 数据分析和报表生成:通过将主服务器上的数据复制到一个或多个从服务器上,可以在从服务器上进行数据分析和报表生成,而不会影响主服务器的性能。 4. 数据分发:通过将主服务器上的数据复制到多个从服务器上,可以将数据分发到不同的地理位置或不同的应用程序中,以满足不同的需求。 在MySQL主从复制中,可以使用一些工具来简化配置和管理,比如MySQL-Proxy。MySQL-Proxy是MySQL官方开源项目,通过其自带的lua脚本进行SQL判断,但MySQL官方并不建议将MySQL-Proxy用于生产环境。此外,还需要在主服务器和从服务器上进行一些配置,如设置server-id、开启二进制日志、允许从服务器更新二进制日志等。还需要为从服务器授权复制权限,并通过show master status命令查看主服务器的状态信息。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [MySQL主从复制详细介绍](https://blog.csdn.net/qq_44590469/article/details/126340217)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [MySQL主从复制](https://blog.csdn.net/m0_62473957/article/details/124140928)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值