zoukankan      html  css  js  c++  java
  • Mysql主从分离与双机热备超详细配置

    一、概述

    本例是在Windows环境,基于一台已经安装好的Mysql57,在本机安装第二台Mysql57服务。

    读完本篇内容,你可以了解到Mysql的主从分离与双机热备的知识,以及配置期间问题的解决方案。

    二、过程

    1、安装第二台数据库

    复制一份mysql的安装目录,取名MySQL Server 5.7_3307(从数据库)。

     清空Data文件夹,并修改my.ini

     client>port 改成3307。

    mysqld>port  改成3307。

     

     mysqld>datadir 改为从数据库的Data文件路径。

    在C:/ProgramData/MySQL/MySQL Server 5.7_3307建一个Uploads文件夹,没有的文件需要补齐。或者自己选择文件路径。

     在从数据库的bin文件夹下打开命令行,执行mysql安装初始化命令

    mysqld -initialize -insecure -user=mysql

     此时从数据库的Data目录会增加文件。

    将主数据库的数据库文件夹复制过来(主库Data目录下,文件夹名称就是数据库名称),如果是InnoDB引擎,需要将Data下的ibdata1文件复制过来,否则不能显示表。

    此处将之前数据库的api数据库(看你需要复制哪些数据库,不复制也没问题,Mysql自身表需要复制)复制到从数据库。

    在从库bin目录下打开命令行并执行

    mysqld --install MySQL57_3307

    MySQL57_3307为服务名称,出现Service successfully installed.即为注册成功。

     使用win+r,弹出命令输入框,输入services.msc,出现服务窗口。

    注册成功。但是选中MySQL57_3307,右键属性。发现未指定mysql启动文件。

     

     win+r,输入regedit打开注册表。按照以下路径打开:

    找到MySQL57_3307,将ImagePath修改成:

    "D:MySQLMySQL Server 5.7_3307inmysqld.exe" --defaults-file="D:MySQLMySQL Server 5.7_3307my.ini" MySQL57

    刷新服务并启动。

     用HeidiSQL(与Navicat同为Mysql客户端)连接,由于复制了主库的mysql库,所以用户名和密码与主库一致,端口为从库的3307。

    连接成功:

     表文件成功复制:

     

     2、配置主从

    在my.ini里的mysqld后进行配置

    主库配置:

    # Server Id.
    server-id=1
    
    # 设置同步数据库名    
    binlog-do-db=api
    
    # 不记录日志的库,即不需要同步的库
    binlog-ignore-db=mysql
    
    # Log for sync 
    log-bin=mysql-bin 

    从库配置:

    # Server Id.
    server-id=2
    
    # 从服务器同步数据库名 
    replicate-do-db=api
    
    # 不从服务器同步数据库名
    replicate-ignore-db = mysql,information_schema,performance_schema
    
    # Log for sync 
    log-bin=mysql-bin 

    需要重启主库与从库服务,后在主库执行查询,查看主库状态:

    SHOW MASTER STATUS;

     在从库执行语句,同步数据:

    CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=3306, MASTER_USER='root', MASTER_PASSWORD='root', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;

    在从库执行开始同步:

    START SLAVE;

    执行查看从库状态:

    SHOW SLAVE STATUS;

     结果为yes,表示执行成功。

    在主库插入数据,验证从库是否同步。

    主库执行:

     主库数据:

     查看从库数据:

     数据同步成功。

    3、配置双机热备

    3306库配置:

    # Server Id.
    server-id=1
    
    # 设置同步数据库名    
    binlog-do-db=api
    
    # 不记录日志的库,即不需要同步的库
    binlog-ignore-db=mysql
    
    # 从服务器同步数据库名
    replicate-do-db=api
    
    # 不从服务器同步数据库名
    replicate-ignore-db = mysql,information_schema,performance_schema
    
    # Log for sync 
    log-bin=mysql-bin 

    3307库配置:

    # Server Id.
    server-id=2
    
    # 从服务器同步数据库名 
    replicate-do-db=api
    
    # 不从服务器同步数据库名
    replicate-ignore-db = mysql,information_schema,performance_schema
    
    # 设置同步数据库名
    binlog-do-db=api
    
    # 不记录日志的库,即不需要同步的库
    binlog-ignore-db=mysql
    
    # Log for sync 
    log-bin=mysql-bin 

    查询3306库MASTER信息:

    SHOW MASTER STATUS; 

    在3307库设置SLAVE信息:

    CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=3306, MASTER_USER='root', MASTER_PASSWORD='root', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=781;

    查询3307库MASTER信息:

    SHOW MASTER STATUS; 

    在3306库设置SLAVE信息:

    CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=3307, MASTER_USER='root', MASTER_PASSWORD='root', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=781;

    测试1:在3306库插入数据

    3306:

     3307:

     

     结果一致,正确。

    测试2:在3307插入数据

    3307:

     3306:

    结果一致,正确。 

    三、问题

    在配置主从或双机热备失败,导致数据不一致时,不要手动删除mysql-bin文件,

    可以先在数据库中停止从关系

    STOP SLAVE;

     然后重置主从关系,效果是文件夹中恢复为只有mysql-bin.000001,SHOW MASTER STATUS也是mysql-bin.000001。

    RESET SLAVE;
    RESET MASTER;

    如果是双机热备,两个数据库都应执行此操作。

  • 相关阅读:
    [Training Video
    [Training Video
    [Training Video
    [Training Video
    [Training Video
    [Training Video
    [Training Video
    [Training Video
    C++11六大函数(构造函数,移动构造函数,移动赋值操作符,复制构造函数,赋值操作符,析构函数)
    C++中virtual继承的深入理解
  • 原文地址:https://www.cnblogs.com/yl-space/p/13289422.html
Copyright © 2011-2022 走看看