zoukankan      html  css  js  c++  java
  • MySQL架构备份之双机热备

    M--S架构:实现双机热备(AB复制)

        1、可以降低master读压力

        2、可以对数据库做“热备”,热备只能解决硬件master硬件故障,软件故障等重大故障问题,但无法解决人为误操作导致的逻辑故障(列如输入错误的SQL语句把重要的记录删除了),所以常规的备份是必须。

    环境准备及要求:

        1、关闭防火墙和selinux

        2、hosts文件中两台服务器主机名和ip地址一一对应起来

        3、系统时间需要同步

        4、master和slave的数据库版本保持一致(系统版本保持一致)

      思路:

          1、master必须开启二进制日志

          2、slave必须开启中继日志

          3、master和slave的server-id必须不一样  范围(2^23-1)

          4、master和slave的初始数据一致

    M--S架构操作步骤#

    环境:

          master:192.168.1.101

          slave:192.168.1.102

    1、环境准备

      1 # master:
      2 [root@master ~]# vim /etc/hosts
      3 192.168.1.102   slave
      4 
      5 # slave:
      6 [root@slave ~]# vim /etc/hosts
      7 192.168.1.101   master

    2、修改配置文件

      1 # master:
      2 root@master ~]# vim /etc/my.cnf
      3 log-bin=mysql-bin
      4 server-id = 1
      5 
      6 # slave:
      7 [root@slave ~]# vim /etc/my.cnf
      8 server-id = 2
      9 relay-log=/data/DB/relay.log
      1 # 扩展说明:有时候,我们只是想master向slave上面同步某一个库,那么就可以使用下面的参数,同样是加在/etc/my.conf配置文件里面:
      2 binlog-do-db=需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可
      3 binlog-ignore-db=不需要复制的数据库苦命,如果复制多个数据库,重复设置这个选项即可
      4 
      5 
      6 示例:
      7 master的/etc/my.conf
      8 server-id = 1
      9 log-bin=mysql-bin     #设定生成的log文件名;
     10 binlog-do-db=demo    #需要同步的二进制数据库名;
     11 binlog-ignore-db=information_schema    #不同步的二进制数据库名,如果不设置可以将其注释掉;
     12 binlog-ignore-db=mysql
     13 binlog-ignore-db=performance_schema
     14 binlog-ignore-db=test
     15 log-slave-update    #把更新的记录写到二进制文件中;
     16 
     17 slave的/etc/my.conf
     18 server-id = 2    # 如果有多个 依次添加即可,不能相同
     19 log-bin=mysql-bin
     20 relay-log=/data/DB/relay.log
     21 # 如果想要做级联架构,也就是master复制到slave上面,slave再复制到slave2上面,同样在slave上面也可以控制需要复制的数据库,
     22 replicate-ignore-db=mysql
     23 replicate-do-db=demo
     24 log-slave-update    # 级联 中级slave必须开启此参数
     25 
     26 # MySQL主从复制参数大全 参考:https://www.cnblogs.com/qianniao12/p/8011222.html
    单数据库的组从配置

    3、数据初始化一致

    情况1:两边都没有业务数据,直接初始化master和slave的数据库

    情况2:master上面有业务数据

      1 masteer:
      2 1>停止数据库
      3 [root@master ~]# /etc/init.d/mysqld stop
      4 
      5 2>物理级别备份
      6 [root@master ~]# cd /data/DB/ && ll
      7 [root@master DB]# tar -cvzf /tmp/mysql.tar.gz *
      8 [root@master DB]# scp /tmp/mysql.tar.gz 192.168.1.114:/tmp
      9 
     10 slave:
     11 3>slave端进行数据恢复
     12 [root@slave ~]# cd /data/DB/ && ll
     13 [root@slave DB]# tar -xf /tmp/mysql.tar.gz -C .
     14 [root@slave DB]# /etc/init.d/mysqld start
     15 
     16 master和slave:
     17 4>查看slave和master上面的数据是否一样
     18 [root@master DB]# echo "show databases;" | mysql -p123
     19 [root@slave DB]# echo "show databases;" | mysql -p123
    master数据库有业务数据

    4、在master上面创建授权用户及查看binlog信息

      1 master:
      2 1>锁表,先加锁,防止两边数据不一致;如果业务还未上线,这个就没有必要了
      3 mysql> flush tables with read lock;
      4 
      5 2>创建授权用户
      6 mysql> grant replication slave on *.* to 'slave'@'192.168.1.102' identified by 'admin123';
      7 
      8 3>查看binglog信息,只有打开二进制日志,这句命令才有结果,表示当前数据库的二进制日志写到什么位置
      9 mysql> show master statusG
     10 *************************** 1. row ***************************
     11              File: mysql-bin.000003
     12          Position: 331
     13      Binlog_Do_DB:
     14  Binlog_Ignore_DB:
     15 Executed_Gtid_Set:
     16 1 row in set (0.02 sec)
     17 # 注意:此时千万不要往里面写东西

    5、在slave上配置同步信息

      1 slave:
      2 mysql> change master to master_host='192.168.1.101', master_user='slave', master_password='admin123', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos=331;
      3 参数说明:
      4     master_host:        master ip
      5     master_user:        同步用户
      6     master_password:    密码
      7     master_port:     端口
      8     master_log_file:    master上面查看到的二进制日志名
      9     master_log_pos:     master上面查看到的POS值
     10 
     11 mysql> show slave status G
     12 查看slave发现报错
     13 解决:
     14     1.检查配置文件里server-id是否不一致
     15     2.检查数据目录里的auto.cnf文件的uuid是否一样,如果一样将slave中的auto.cnf删除后将master和slave的服务重启。
     16 
     17 mysql> show slave status G;
     18     Slave_IO_Running: Yes
     19     Slave_SQL_Running: Yes




    归类: 自动化运维及服务相关

  • 相关阅读:
    闭包
    函数进阶2
    文档翻译 Python 2.7.x和Python 3.x之间的主要区别(包括示例)
    Deep Learn 关于单维度模型的多维输出
    Deep Learning 名词解释
    Deep Learning 激活函数
    Deep Learning 归一化、标准化
    Deep Learning 梯度下降
    Deep Learning 循环神经网络
    Deep Learning BP反向传播
  • 原文地址:https://www.cnblogs.com/lz1996/p/13749229.html
Copyright © 2011-2022 走看看