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.166

slave:192.168.1.114

1、环境准备

# master:
[root@master ~]# vim /etc/hosts
192.168.1.114 slave # slave:
[root@slave ~]# vim /etc/hosts
192.168.1.166 master

2、修改配置文件

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

针对单个数据库配置主从

3、数据初始化一致

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

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

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

示例master上面有业务数据

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

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

5、在slave上配置同步信息

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

6、测试验证

测试一:
先查看master和slave的ceshi库中users表的信息
master:
mysql> select * from ceshi.users;
+----+-------+----------+-----------------+
| id | name | password | address |
+----+-------+----------+-----------------+
| 1 | zhang | 1234 | NULL |
| 2 | wang | 4321 | 湖北武汉 |
| 3 | li | 5678 | 北京海淀 |
| 4 | liu | 1122 | NULL |
| 5 | zou | 4311 | 湖南长沙 |
| 6 | zhou | 6789 | 北京八宝山 |
| 7 | ding | 7891 | 深圳西丽 |
+----+-------+----------+-----------------+
7 rows in set (0.00 sec) slave:
mysql> select * from ceshi.users;
+----+-------+----------+-----------------+
| id | name | password | address |
+----+-------+----------+-----------------+
| 1 | zhang | 1234 | NULL |
| 2 | wang | 4321 | 湖北武汉 |
| 3 | li | 5678 | 北京海淀 |
| 4 | liu | 1122 | NULL |
| 5 | zou | 4311 | 湖南长沙 |
| 6 | zhou | 6789 | 北京八宝山 |
| 7 | ding | 7891 | 深圳西丽 |
+----+-------+----------+-----------------+
7 rows in set (0.11 sec) 在master上面删除数据,然后回到slave上面查看
master:
mysql> delete from ceshi.users where id>=3;
mysql> select * from ceshi.users;
+----+-------+----------+--------------+
| id | name | password | address |
+----+-------+----------+--------------+
| 1 | zhang | 1234 | NULL |
| 2 | wang | 4321 | 湖北武汉 |
+----+-------+----------+--------------+
2 rows in set (0.00 sec) slave:
mysql> select * from ceshi.users;
+----+-------+----------+--------------+
| id | name | password | address |
+----+-------+----------+--------------+
| 1 | zhang | 1234 | NULL |
| 2 | wang | 4321 | 湖北武汉 |
+----+-------+----------+--------------+
2 rows in set (0.00 sec) 测试二:
停止slave上的服务
[root@slave ~]# /etc/init.d/mysqld stop 在master上面插入数据并查看
mysql> insert into ceshi.users(name, password, address) values("ceshi","666666","广东深圳");
Query OK, 1 row affected (0.04 sec) mysql> select * from ceshi.users;
+----+-------+----------+--------------+
| id | name | password | address |
+----+-------+----------+--------------+
| 1 | zhang | 1234 | NULL |
| 2 | wang | 4321 | 湖北武汉 |
| 8 | ceshi | 666666 | 广东深圳 |
+----+-------+----------+--------------+
3 rows in set (0.00 sec) 再次启动slave并查看是否有更新
[root@slave ~]# /etc/init.d/mysqld start
mysql> select * from ceshi.users;
+----+-------+----------+--------------+
| id | name | password | address |
+----+-------+----------+--------------+
| 1 | zhang | 1234 | NULL |
| 2 | wang | 4321 | 湖北武汉 |
| 8 | ceshi | 666666 | 广东深圳 |
+----+-------+----------+--------------+
3 rows in set (0.00 sec)

测试验证

总结:

1、测试表明只能在master端上面进行写然后再同步到slave端。

2、如果slave服务关闭后可以不用管理,然后再在master端可以继续写入,等到slave服务启动后,会自动同步到slave端。

MySQL架构备份之双机热备的更多相关文章

  1. MySQL主从复制,以及双机热备

    MySQL数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展.多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升数据库的负载性能. 下图就描述了一个多个数 ...

  2. Mysql主从分离与双机热备超详细配置

    一.概述 本例是在Windows环境,基于一台已经安装好的Mysql57,在本机安装第二台Mysql57服务. 读完本篇内容,你可以了解到Mysql的主从分离与双机热备的知识,以及配置期间问题的解决方 ...

  3. Mycat+Mysql主从复制实现双机热备

    Mycat+Mysql主从复制实现双机热备 一.mysql主从配置原理 双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步.对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据 ...

  4. CentOS系统MySQL双机热备配置

    1  概述 在集成项目中需要应对不同环境下的安装配置,主流操作系统大致可以分为三种:Linux.Windows以及UNIX.其中Linux备受青睐的主要原因有两个: 首先,Linux作为自由软件有两个 ...

  5. Keepalived双机热备

    一,Keepalived双机热备的应用场景 1,网站流量不高,压力不大,但是对服务器的可靠性要求极其高,例如实时在线OA系统,政府部门网站系统,医院实时报医系统,公安局在线报案系统,股市后台网站系统等 ...

  6. MySQL架构备份

    MySQL Replication 概述 集群的主要类型? 高可用集群(High Available Cluster, HA) 高可用集群是指通过特殊的软件把独立的服务器连接起来,组成一个能够提供故障 ...

  7. MySQL7.5.15数据库配置主从服务器实现双机热备实例教程

    环境说明 程序在:Web服务器192.168.0.57上面 数据库在:MySQL服务器192.168.0.67上面 实现目的:增加一台MySQL备份服务器(192.168.0.68),做为MySQL服 ...

  8. MySQL5.7.15数据库配置主从服务器实现双机热备实例教程

    环境说明 程序在:Web服务器192.168.0.57上面 数据库在:MySQL服务器192.168.0.67上面 实现目的:增加一台MySQL备份服务器(192.168.0.68),做为MySQL服 ...

  9. MySQL数据库双机热备------主-主备份配置

    MySQL数据库双机热备------主-主备份配置 实验环境: 主1数据库 192.168.1.1 centos6.5 x86_64 +MySQL5.5.35 主2数据库192.168.1.2  Wi ...

随机推荐

  1. 【Redis】LRU算法和Redis的LRU实现

    LRU原理 在一般标准的操作系统教材里,会用下面的方式来演示 LRU 原理,假设内存只能容纳3个页大小,按照 7 0 1 2 0 3 0 4 的次序访问页.假设内存按照栈的方式来描述访问时间,在上面的 ...

  2. 命令行操作mysql 未完待续......

    复制数据表 create table 新表 like 旧表: 删除表中某个字段 alter table 表名 drop column 字段; 例子: alter table news_apply_lo ...

  3. Servlet--创建和配置Servlet

    在web开发中,一般由Servlet进行数据流的控制,并通过HttpServletResponse对象对请求做出响应.创建的Servlet必须继承HttpServlet类,并实现doGet()和doP ...

  4. 通过JS动态的修改HTML元素的样式和增添标签元素等

    一. 通过JS动态的修改HTML元素的样式   1. 要想在js中动态的修改HTML元素的样式,首先需要写document,    document我们称之为文档对象,这个对象中保存了当前网页中所有的 ...

  5. arcgis api 3.x for js 入门开发系列十七在线天地图、百度地图、高德地图(附源码下载)

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  6. 性能测试 基于Python结合InfluxDB及Grafana图表实时监控Android系统和应用进程

    基于Python结合InfluxDB及Grafana图表实时监控Android系统和应用进程   By: 授客 QQ:1033553122     1. 测试环境 2. 实现功能 3. 使用前提 4. ...

  7. Android MVP

    大家先看看目录结构 先看V层 View里面我写了一个接口LoginView 然后,在登录这个Activity 去实现这个接口,并实现其抽象方法.即看LoginActivity onCreate中引用了 ...

  8. EF Code First 连接MySql

    看了很多文章,尝试了很多次总是进行不下去,整理一下,以便日后查看. 1.创建ASP.NET MVC项目(EFCodeFirst) 1.1.右键点击引用选择管理NuGet程序包下载MySql.Data. ...

  9. torm入门(三)HelloWorld示例

    一.配置开发环境 storm有两种操作模式: 本地模式和远程模式.使用本地模式的时候,你可以在你的本地机器上开发测试你的topology, 一切都在你的本地机器上模拟出来; 用远程模式的时候你提交的t ...

  10. Django ORM 使用原生 SQL

    使用原生sql的 方法 : raw # row方法:(掺杂着原生sql和orm来执行的操作) res = CookBook.objects.raw('select id as nid from epo ...