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

MySQL双机热备+ 可  案 mysql双机热备方案比较_数据

MySQL双机热备+ 可  案 mysql双机热备方案比较_数据_02

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主从复制参数大全 

单数据库的组从配置

3、数据初始化一致

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

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

MySQL双机热备+ 可  案 mysql双机热备方案比较_数据

MySQL双机热备+ 可  案 mysql双机热备方案比较_数据_02

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 status\G
 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


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