mysql主从复制

本文详细阐述了MySQL主从复制的重要性,包括备份热备、架构扩展和读写分离。介绍了主从复制原理,以及如何在开发环境中搭建和配置主从复制,包括设置log-bin、授权和启动从服务器。最后展示了如何测试数据库操作以确保复制功能正常。

MySql主从复制

为什么需要主从复制?
原因有三:
  • 做数据的备份 热备份(冷备份,手动备份保存,复制粘贴,热备:一个数据据发生变化,另一个数据库同步发生变化),作为备份的数据库,当主服务器一旦发生故障后,可切换到从服务器中继续工作,避免数据的丢失。
  • 架构的扩展。业务量越来越大,IO访问频率也越来越高,单机已经无法满足我们的需求,此时需要做多库的存储,降低磁盘的IO访问的频率,提高单个机器的IO性能。
  • 读写分离(前提条件是有主从复制环境),使数据库支持更大的并发量,尤其是在报表操作中尤为突出,由于部分报表sql语句执行较慢,导致锁表现象,影响前台服务。如果前台使用master,报表使用的是slave,那么报表中的sql语句就不会对前台造成锁表,保证前台的效率。
主从复制原理
  1. 至少需要两台及两台以上数据库服务器,master一台,slave可以有n多台

  2. mysql主从复制采用异步机制。

  3. master需要bin-log功能,日志文件用于记录数据库的读写操作,同时授权slave从服务器有权限访问master的信息,

  4. 同时需要开启三个线程,master的IO线程,slave中的IO线程、SQL线程

  5. slave从服务器通过IO连接master,并且请求某个bin-log,position之后的内容。

  6. master主服务器收到salve的IO线程发来的日志请求信息,master IO线程会将bin-log,position之后的内容返回给slave IO线程

  7. slave从服务器收到bin-loig日志内容,将bin-log日志内容写入到relay-log中继日志文件中,同时创建一个master.info文件,该文件记录了master的IP、用户名、密码 、master bin-log名称、bin-log,position之后的内容

  8. slave端开启SQL线程,实时监控relay-log日志记录内容是否有更新,如果更新,解析文件中的sql语句,在slave数据库中执行操作。

搭建Mysql主从复制

开发步骤:

  • 第一步:准备两台及两台以上的mysql服务器,保证mysql服务器支持远程访问(开启远程访问权限)

  • 第二步:首先先配置主服务器 master

    • 切换到 etc目录中

      cd /etc

      在该目录下有一个文件 my.cnf

      vim my.cnf

    • 有两处需要配置 配置到 [mysqld]的下面

      第一处: 配置master-bin 主服务器 log-bin=master-bin

      第二处: 配置主服务器的id值 id值要求不能重复 server-id=1

    • 登录主服务器 给从服务器授权

      mysql -uroot -pMyNewPass4!

      授权

      grant replication slave on *.* to root@‘192.168.68.130’ identified by ‘MyNewPass4!’ ;

      grant replication slave on *.*  to root@'192.168.68.130' identified by  'MyNewPass4!';
      
    • 退出主服务器 quit/exit

    • 重启master主服务器的mysql

    • 再次登录进入

      mysql -uroot -pMyNewPass4!
      

      查看主服务器中的bin-log日志文件中的偏移量信息

      show master status;
      
      +-------------------+----------+--------------+------------------+-------------------+
      | File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
      +-------------------+----------+--------------+------------------+-------------------+
      | master-bin.000002 |      154 |              |                  |                   |
      +-------------------+----------+--------------+------------------+-------------------+
      1 row in set (0.01 sec)
      
      
    • 说明:从服务器访问的就是master-bin.000002和position中的值154

  • 配置从服务器 slave

    • 切换到etc目录下

      cd /etc

      编辑my.cnf文件

      vim my.cnf

    • 有两处地方需要配置:

      第一处: log-bin=mysql-bin # 配置 mysql-bin 从服务器

      第二处: server-id=2 #配置 第二台从服务器id值 id值不能重复

    • 重启从服务器 slave

      service mysqld restart ---->Centos6.x

      systemctl restart mysqld.service ---->Centos7.x

    • 登录从服务器中

      mysql -uroot -pMyNewPass4!

      连接主服务器master

      change master to master_host='192.168.68.129',master_user='root',master_password='MyNewPass4!',master_log_file='master-bin.000002',master_log_pos=154;
      
    • 开启从服务器 slave

      start slave;

    • 查看从服务器的sql线程

      show slave status\G;

      检查发现 从服务器的IO线程没有开启,原因是因为 从服务器的mysql是从master克隆过来的

    • 解决办法有两种:第一种卸载从服务器的mysql;第二种:删除从服务器记录mysql_ids文件

      删除从服务器中的auto.cnf文件

      采用第二种:删除 /var/lib/mysql/auto.cnf文件

      rm -rf /var/lib/mysql/auto.cnf

    • 重启从服务器的mysql 重新生成一个auto.cnf文件

    • 再次进入从服务器

    • 启动slave

    • 查看slave从服务器的IO和SQL线程 ,如果都是yes,代表安装成功。

  • 测试 创建数据库、新建表、新增数据、删除数据、删除表、删除库

卸载mysql服务器
  • 查看mysql内容在虚拟机中的信息

    rpm -qa | grep -i mysql

  • 卸载mysql安装的应用

    yum remove mysql-community mysql-community-server mysql-community-libs mysql-community-common mysql80-community mysql-community-client

    前输入Y/N 输入Y

  • 再次查看mysql剩余的应用

    rpm -qa | grep -i mysql

  • 如果还有,再次卸载mysql应用

    yum remove mysql80-ommunity-release

    输入 Y/N 输入Y

  • 终极检查

    rpm -qa | grep -i mysql

  • 查看mysql文件目录

    find / -name mysql

  • 删除所有包含mysql的文件

    rm -rf /usr/share/mysql

    如果有多个,全部删除

    /etc/logrotate.d/mysql
    /etc/selinux/targeted/active/modules/100/mysql
    /etc/selinux/targeted/tmp/modules/100/mysql
    /var/lib/mysql
    /var/lib/mysql/mysql
    /usr/bin/mysql
    /usr/lib64/mysql
    /usr/share/mysql

  • 卸载成功。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值