• Mysql双机热备配置(超详细多图版)


    一、双击热备介绍

    1.基本概念

    双机热备特指基于高可用系统中的两台服务器的热备(或高可用),双机高可用按工作中的切换方式分为:主-备方式(Active-Standby方式)和双主机方式(Active-Active方式),主-备方式即指的是一台服务器处于某种业务的激活状态(即Active状态),另一台服务器处于该业务的备用状态(即Standby状态)。而双主机方式即指两种不同业务分别在两台服务器上互为主备状态(即Active-Standby和Standby-Active状态)。

    2.实现方式

    a.基于共享存储(磁盘阵列)的方式

    共享存储方式主要通过磁盘阵列提供切换后,对数据完整性和连续性的保障。用户数据一般会放在磁盘阵列上,当主机宕机后,备机继续从磁盘阵列上取得原有数据

    b.全冗余方式

    全冗余方式就是双机双存储

    MySQL热备原理

    双机热备就是使用MySQL提供的一种主从备份机制实现。所谓双机热备其实是一个复制的过程,复制过程中一个服务器充当主服务器,一个或多个服务器充当从服务。这个复制的过程实质上是从服务器复制主服务器上MySQL的二进制日志(bin-log),并在从服务器上还原主服务器上的sql语句操作,这样只要两个数据库的初态是一样的,就能一直同步。

    双机热备的实现需要MySQL的版本高于3.2.。另外由于这种备份是基于MySQL二进制日志实现,所以主从服务器上的MySQL版本最好能够一样,至少从服务器的MySQL版本不可以低于主服务器的数据库版本。因为MySQL不同的版本之间二进制日志可能不一样。

    当然这种复制和重复都是MySQL自动实现的,我们只需要配置即可。

    如下图所示:

    上图中有两个服务器, 演示了从一个主服务器(master) 把数据同步到从服务器(slave)的过程。

    这是一个主-从复制的例子。 主-主互相复制只是把上面的例子反过来再做一遍。 所以我们以这个例子介绍原理。

    对于一个mysql服务器, 一般有两个线程来负责复制和被复制。当开启复制之后。作为主服务器Master,会把自己的每一次改动都记录到 二进制日志 Binarylog 中。 (从服务器会负责来读取这个log, 然后在自己那里再执行一遍。)

    作为从服务器Slave, 会用master上的账号登陆到 master上, 读取master的Binarylog,  写入到自己的中继日志 Relaylog, 然后自己的sql线程会负责读取这个中继日志,并执行一遍。  到这里主服务器上的更改就同步到从服务器上了。

    配置步骤

    第一步环境搭建:

    现在有两个服务器,分别为A(主服务器),B(从服务器)。

    • 为A和B分别分配静态IP地址。我采用的是dhcp自动分配方式,A的ip地址为192.168.119.128,B的ip地址为192.168.119.130。
    • 保证A和B能够ping通,在B上输入命令

    ,如果出现以下结果:

    ,则说明A和B是能够通信的,如果不能,则查看是否A和B是否在同一个局域网中,或者关闭linux系统的防火墙 命令为 : /etc/init.d/iptables stop。

    • 分别为A和B安装mysql,client和server都需要安装。

    第二步 A(主服务器配置)配置

    1.

    进入mysql数据库。输入命令:

    ,然后根据提示输入密码。在A上面创建专门用于备份的用户。命令如下:

    grant replication slave on *.* to 'username'@'192.168.119.130' identified by '123456';

    其中username是用户名,192.168.119.130是B(从服务器)的ip地址,密码为’123456’;这个等会在B上要用;

    2.

    创建数据库。

    我这里用的sql语句创建的 create database test;(具体实施的时候应该是直接导入数据库,数据库已经提前创建好了)。这个数据库是来测试的。

    3.

    开启A的binarylog

    这里输入命令:

    ,就会打开MySQL的配置文件。修改MySQL绑定的IP地址:

    这个是MySQL默认的ip,这里修改成A的ip:192.168.119.128.

    继续修改如下配置

    • server-id =1 表示A的id(之前是被#注释掉的)
    • Long_bin = mysql-bin.log 表示log日志,如果采用mysql之前默认的/var/log/mysql/mysql-bin.log会导致MySQL服务无法启动。
    • binlog-do-db =test用来表示,只把哪些数据库的改动记录到binary日志中。 可以写上关注test数据库(这句话最关键)。
    • auto-increment-increment = 10和auto-increment-offset = 1用于在 双主(多主循环)互相备份。 因为每台数据库服务器都可能在同一个表中插入数据,如果表有一个自动增长的主键,那么就会在多服务器上出现主键冲突。  解决这个问题的办法就是让每个数据库的自增主键不连续。  上图说是, 我假设需要将来可能需要10台服务器做备份, 所以auto-increment-increment 设为10.   而 auto-increment-offset=1 表示这台服务器的序号。 从1开始, 不超过auto-increment-increment。
    • 所有设置完成之后,退出文本编辑,按ESC,再按shift+;键,然后输入wq,就能保存当前设置,并退出。
    • 最后:重启MySQL服务,输入命令: service mysql restart。

    4.

    获取主服务器状态和同步状态。

    注:因为数据库库是已经提前创建好的,所以以下步骤可以省略

    现在我有数据库在A上面;

    输入命令 :use test 进入到test数据库,

    然后锁定test,输入命令:FLUSH TABLES WITH READ LOCK;

    然后导出数据库。

    注:以下这一步骤需要进行!

    查看A服务器的binary日志位置:

    输入命令:show master statusG

    记住File和Position,接下来再设置从服务器的时候需要用到。

    主服务器的全部做完,可以解除锁定:

    第三步:B(从服务器)配置

    1.

    设置从服务器的文件配置。

    输入命令:

    ,打开MySQL的配置文件。修改文件如下:

    server-id 必须保证每个服务器不一样。 这可能和循环同步有关。 防止进入死循环。

    replicate-do-db 可以指定需要复制的数据库, 这里是test。

    relay_log 中继日志的名字。 log-slave-updates 意思是,中继日志执行之后,这些变化是否需要计入自己的binarylog。 当你的B服务器需要作为另外一个服务器的主服务器的时候需要打开。  就是双主互相备份,或者多主循环备份。 我们这里需要, 所以打开。

    修改完成之后,保存,重启MySQL;

    2.

    导入数据库,开始同步。

    实施人员将数据库导入到B中的MySQL。这里我就不详细了。

    我导入的是test数据库。

    进入MySQL,输入命令:mysql -uroot -p 输入密码后进入。

    在mysql中输入:

    CHANGE MASTER TO

           MASTER_HOST='192.168.119.128',

           MASTER_USER='username',

           MASTER_PASSWORD='123456',

           MASTER_LOG_FILE='mysql-bin.000003',

           MASTER_LOG_POS=510;

    执行此语句,会出现

    重启MySQL, 然后查看slave线程开启了没。

    注意图中的红框, 两个都是Yes, 说明开启成功。

    Slave_IO_Running: Yes

    Slave_SQL_Running: Yes

    如果其中一个是No, 那就说明不成功。需要查看mysql的错误日志。。有时候密码填错了, 有时候防火墙的3306没有打开。ip地址不对,等等。 都会导致失败。

    到这里就全部配置完成了。

    第四步 测试

    1.在A服务器的test的数据库中的mytable表(这个是用来测试的,其他数据库不一定有),添加一条数据。

    A:未添加前的状态:

    B的数据库

    现在A和B的初态是一样的。现在我往A里面插入一条数据,输入命令:

    insert into mytable values(‘test’,’f’,’1900-01-01’,’china’);

    插入成功,现在A的状态更新为:

    与此同时B的数据库也更新为:

    这个动作是同时的,几乎没有什么间隔。

    好了,MySQL的双机热备数据同步就完成了。

    from:https://cloud.tencent.com/developer/article/1088706

  • 相关阅读:
    Java实现 蓝桥杯 算法提高 特等奖学金(暴力)
    Java实现 蓝桥杯 算法提高 特等奖学金(暴力)
    Java实现 蓝桥杯 算法提高 GPA(暴力)
    Java实现 蓝桥杯 算法提高 GPA(暴力)
    Java实现 蓝桥杯 算法提高 GPA(暴力)
    Java实现 蓝桥杯 算法提高 套正方形(暴力)
    Java实现 蓝桥杯 算法提高 套正方形(暴力)
    第一届云原生应用大赛火热报名中! helm install “一键安装”应用触手可及!
    云原生时代,2个方案轻松加速百万级镜像
    Knative 基本功能深入剖析:Knative Serving 自动扩缩容 Autoscaler
  • 原文地址:https://www.cnblogs.com/lidabo/p/14268920.html
Copyright © 2020-2023  润新知