1、简介

写这篇文章是网上找到的相关主从同步的都不够完全,本人第一次搭建主从同步,完全看着网上的文章来搭建的,结果你懂的,踩了很多坑。所以特地把踩到的坑写出来,新手切勿直接布置到正式环境,请于测试环境测试完成再布置与正式环境。本文仅供自己或者有需要的参考,仅供参考。

2、环境说明

为了更贴切于实际环境,本人直接采用的真机,壕吧,这里不采用真实IP。下文全部采用IPXXX代替。

 一台阿里云ECS(1G1核):IPC193

 一台阿里云轻量应用服务器(2G1核): IPC248

 系统全装的CentOS 7.4 64位

3、数据库版本

  安装包下载地址:http://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.26-linux-glibc2.5-x86_64.tar.gz

4、数据库的安装就不再本文说了,开始搞事情吧。

  4.1  安装

    安装数据库,我这里是安装在/usr/local/mysql的

   4.2  配置  

    注意:二进制日志必须开启,因为数据的同步实质上就是其他的MySQL数据库服务器将这个数据变更的二进制日志在本机上再执行一遍。

    vim /usr/local/mysql/my.cnf

    在页面最下方添加 log-bin=mysql-bin 开启二进制日志

    C248  为主数据库服务器 

    C129  为从数据库服务器

   4.3  开始搭建主从复制
      主数据库C248需要做的操作

    在主数据库创建一个从数据库能够登录的账号

    #创建具有复制权限的用户

    mysql>GRANT REPLICATION SLAVE ON *.* TO '账号名'@'从服务器IP地址' IDENTIFIED BY '密码';

    #mysql 新设置用户或更改密码后需用flush privileges刷新MySQL的系统权限相关表,否则会出现拒绝访问

    mysql>FLUSH PRIVILEGES;

    创建测试账号:c193slave ,测试密码是c193slave@123456

    查看主数据库保存的二进制文件名与位置

    mysql>SHOW MASTER STATUS;

     

      上图显示的File 对应的binlog.000004 跟Position对应的102219就是从服务器需要用到的,

      我这个数据库并不是新数据库,所以Position不是从0开始的,默认File是从000001开始。

       从数据库C129需要做的操作

         #####CHANGE MASTER TO MASTER_HOST='主数据库IP地址',

          MASTER_USER='刚才在主数据库添加的账号',

          MASTER_PASSWORD='数据库密码',

          MASTER_LOG_FILE='上图对应的File下面的文件名字',

          MASTER_LOG_POS=上图图片对应的Position下面数字;

         mysql>CHANGE MASTER TO MASTER_HOST='C248',

          MASTER_USER='c193slave',

          MASTER_PASSWORD='c193slave@123456',

          MASTER_LOG_FILE='binlog.000004',

          MASTER_LOG_POS=102219;

        

           mysql>START SLAVE;   #开启复制

            mysql>SHOW SLAVE STATUS\G   #查看主从复制是否配置成功

        

         如上图的主数据库IP,账号,等等如果都对应着说明配置成功

5、查看主从复制执行进程

(从服务器)mysql> show processlist; #查看正在执行中的进程,如果出现下图两条则说明从数据库正常

  (主服务器)mysql> show processlist; #查看正在执行中的进程,如果出现下图一条则说明主服务器正常

  主从复制到此就完成了。

6、在这说一下遇到的坑

  白天主从是正常的,但是第二天发现从服务器的position与主服务器并不一致,手动修改了下主服务器数据库,发现从服务器并没有更新,说明主从不正常了。

  使用show processlist;查看从数据库线程时,从数据库线程还在,查看主数据库线程时,进程已丢失。反正不知道啥原因丢失了。

  经检查,知道了一个叫心跳的东西

  

在 MySQL 主从复制时,有时候会碰到这样的故障:

在 Slave 上 Slave_IO_Running 和 Slave_SQL_Running 都是 Yes,

Slave_SQL_Running_State 显示 Slave has read all relay log; waiting for the slave I/O thread to update it ,看起来状态都正常,但实际却滞后于主,Master_Log_File 和 Read_Master_Log_Pos 也不是实际主上最新的位置。

一种可能是 Master 上的 binlog dump 线程挂了(我就是线程挂了)。但有时候,在 Master 上检查也是完全正常的。那 Slave 的延误又是怎么造成的呢?

在 MySQL 的复制协议里,由 Slave 发送一个 COM_BINLOG_DUMP 命令后,就完全由 Master 来推送数据,Master、Slave 之间不再需要交互。如果 Master 没有更新,也就不会有数据流,Slave 就不会收到任何数据包。但是如果由于某种原因造成 Master 无法把数据发送到 Slave ,比如发生过网络故障或其他原因导致 Master 上的 TCP 连接丢失,由于 TCP 协议的特性,Slave 没有机会得到通知,所以也没法知道收不到数据是因为 Master 本来就没有更新呢还是由于出了故障。

好在 MySQL 5.5 开始增加了一个复制心跳的功能。

 (C129)mysql> stop slave; #关闭主从

 (C129)mysql> change master to master_heartbeat_period = 10; #修改心跳为10秒一次

 (C129)mysql> set global slave_net_timeout = 25; #修改超时时间

 (C129)mysql> start slave; #再次开启主从复制

 (C129)mysql> show status like 'slave%';

  再次测试主从,数据同步在正常。

    

    

 

 

mysql 数据库主从同步的更多相关文章

  1. mysql数据库主从同步

    环境: Mater:   CentOS7.1  5.5.52-MariaDB  192.168.108.133 Slave:   CentOS7.1  5.5.52-MariaDB  192.168. ...

  2. mysql数据库主从同步读写分离(一)主从同步

    1.mysql数据库主从同步读写分离 1.1.主要解决的生产问题 1.2.原理 a.为什么需要读写分离? 一台服务器满足不了访问需要.数据的访问基本都是2-8原则. b.怎么做?  不往从服务器去写了 ...

  3. MySQL数据库主从同步延迟分析及解决方案

    一.MySQL的数据库主从复制原理 MySQL主从复制实际上基于二进制日志,原理可以用一张图来表示: 分为四步走: 1. 主库对所有DDL和DML产生的日志写进binlog: 2. 主库生成一个 lo ...

  4. Linux下MySQL数据库主从同步配置

    说明: 操作系统:CentOS 5.x 64位 MySQL数据库版本:mysql-5.5.35 MySQL主服务器:192.168.21.128 MySQL从服务器:192.168.21.129 准备 ...

  5. MySQL数据库主从同步实战过程

       Linux系统MySQL数据库主从同步实战过程 安装环境说明 系统环境: [root@~]# cat /etc/redhat-release CentOS release 6.5 (Final) ...

  6. 【转】MySQL数据库主从同步管理

    MYSQL主从同步架构是目前使用最多的数据库架构之一,尤其是负载比较大的网站,因此对于主从同步的管理也就显得非常重要,新手往往在出现主从同步错误的时候不知道如何入手,这篇文章就是根据自己的经验来详细叙 ...

  7. MySQL数据库主从同步安装与配置总结

    MySQL的主从同步是一个很成熟的架构,优点为: ①在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力: ②在从主服务器进行备份,避免备份期间影响主服务器服务: ③当主服务器出现问题时 ...

  8. 烂泥:学习mysql数据库主从同步复制原理

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 说明本篇文章部分转载自互联网. MySQL的Replication(英文为复制)是一个多MySQL数据库做主从同步的方案,特点是异步复制,广泛用在各种对 ...

  9. linux shell mysql 数据库主从同步状态检查告警

    需求: 1.监测数据库主从状态 2.获取数据库主要参数 3.可读取配置文件 4.部署位置自适应.   参考资料: http://blog.csdn.net/yf210yf/article/detail ...

随机推荐

  1. centos7 基础命令

    一: linux基础 (1) 查看服务器的IP信息 ip add showifconfig (2) 操作网卡命令(重启网络和启用网卡) systemctl restart networksystemc ...

  2. web.xml 设置字符编码

    个人理解  就是为了防止在前端输入的数据到了后台发生乱码 直接复制到web.xml里面就可以使用 亲测 能用!!! <!-- 前端过滤器设置字符编码 --> <filter> ...

  3. python kline

    # -*- coding: utf-8 -*- # Qt相关和十字光标 from qtpy.QtGui import * from qtpy.QtCore import * from qtpy imp ...

  4. 转载&修改:赶集mysql军规

    个人认为以下军规主要为了适应海量数据场景,对于业务复杂性系统并一定完全按照此军规   一,核心军规 不在数据库做计算,cpu计算务必移至业务层 控制单表数据量,单表记录控制在千万级 控制列数量,字段数 ...

  5. git add * 提示warning: LF will be replaced by CRLF in 解决办法

    在使用git的时候,每次执行 $ git add * 都会提示这样一个警告消息: 虽然说没有什么影响吧. 不过就是觉得太碍眼了, 按照这样设置就没有问题了: git config core.autoc ...

  6. 合并多个Excel

    合并excel分为两种情况:1.将多个excel文件合并在一个excel中的不同sheet中.2.将多个excel文件合并在一个excel文件的一个sheet中. 1.将多个excel的文件合并在一个 ...

  7. GDT与LDT

    保护模式下的段寄存器 由 16位的选择器 与 64位的段描述符寄存器 构成段描述符寄存器: 存储段描述符选择器:存储段描述符的索引 PS:原先实模式下的各个段寄存器作为保护模式下的段选择器,80486 ...

  8. DataSet结果转模型类

    引入命名空间: using System.Data; using System.Reflection; 类封装代码: public class ModelHelper { public T To< ...

  9. Windows10 下安装 Apache2.4+PHP7.1+MySQL5.7

    这个教程主要是分享如何快速组建WAMP开发环境,对于软件的详细配置,自行参考文档或搜索. Visual C++ Redistributable for Visual Studio 2015 下载地址: ...

  10. vue2.0项目 calendar.js(日历组件封装)

    最近一直闲来无事,便寻思着做一下自己的个人项目,也想说能使用现在比较流行的一些mvvm框架来做,于是就选用了这样的一个技术栈vue2.0+vue-router+vuex+webpack来做,做得也是多 ...