zoukankan      html  css  js  c++  java
  • MySQL集群主从复制搭建

    准备知识:

    MySQL主从复制(Master-Slave) 原理

    即是通俗的讲,主从服务器通过I/O线程通讯。二进制日志记录了数据的变动情况,从节点 就是通过读取 主节点 的 二进制日志 来进行数据复制的,如果没有启动 二进制日志 ,复制将无法进行。

    在主节点中,必须开启二进制日志 (binlog) 并设定一个唯一的 Server ID。如果没有这样,需要配置好了后重启MySQL服务。

    注意:

    Replication方案只能在Master数据库进行写操作,在Slave数据库进行读操作。如果在Slave数据库中写入数据,Master数据库是不能知道的(单向同步的)。

    允许将来自一个MySQL数据库服务器(主服务器)的数据复制到一个或多个MySQL数据库服务器(从服务器)。

    复制组中的每个服务器必须配置一个唯一的服务器ID,用于标识组中的不同服务器。

    MySQL的复制有如下优点:

    • 扩展解决方案 - 在多个Slaves(从节点)中传播负载以提高性能。在此环境中,所有的写和更新在主服务器中进行。然后,读操作可以在一个或多个Slave节点中进行。此模型可以提高写的性能(因为主节点专用于更新),同时,在越来越多的从节点上提高读取速度。
    • 数据安全 - 因为数据复制到了从节点,从节点可以暂停复制进程,才有可能在不影响主节点数据的情况下启动数据备份服务。
    • 分析 - 在主节点上创建实时数据,从而在不影响主节点性能的情况下进行信息分析。
    • 远程数据分布 - 如果分支机构希望使用主数据副本,则可以使用复制功能创建数据的本地副本以供其使用,而无需永久访问主数据。

     

    主-从搭建的步骤:

    一、准备的环境:(自行选择)

    1. OS:   Master:使用centos6.5.  slave:使用windows server 2012 (64位).

    2. 软件:  MySQL。(此处使用的版本为5.1.7.3)。

    二、软件的安装。(自行安装),安装都不会那就算了。

    Linux自己使用yum 源或者下源码编译安装Windows执行可执行文件。这里安装不是重点)

    三、节点的配置

    3.1 主节点先配置

      在my.cnf 中新增如下配置:

    [mysqld] 
    log-bin = mysql-bin 
    server-id = 1

      注意:主节点是Linux配置文件是my.cnf,通常在/etc/my.cnf。主节点是Windows在my.ini中新增配置。

    3.2 从节点的配置

      在从节点上,必须指定唯一 Server ID。可以不为从节点开启二进制日志,如果开启了,也可以用于数据备份和恢复。

      在my.ini文件中配置如下:

    [mysqld] 
    server-id = 2

       注意:主节点是Linux配置文件是my.cnf,通常在/etc/my.cnf。主节点是Windows在my.ini中新增配置。

    3.3 创建复制用户

      从节点需要有一个主节点上的用户来连接主节点,任何一个有 REPLICATION SLAVE 权限的用户都可以用户复制操作。登录到主节点,执行如下命令:

    mysql> CREATE USER ‘test’@’%’ IDENTIFIED BY ‘test’;
    mysql> GRANT REPLICATION SLAVE ON *.* TO ‘test’@’%’;

    3.4 备份主节点已经有的数据

      登录在主节点:

    mysql> mysqldump -p –all-databases  > /tmp/dbdump.db

    3.5 在从节点同步已经有的数据

      登录在从节点。提前把主节点的备份文件复制过来。如使用 scp远程登录复制。   

    mysql> source /tmp/dbdump.db

    3.6 查询主节点的BinLog坐标

    mysql> SHOW MASTER STATUSG; (注意是大写)

      

      记录下File,Position冒号后的值。留待下一步使用。

    3.7 为从节点指定复制主节点

    change master to master_host='X.X.X.X',master_user='test',master_password='test',master_log_file='mysql-bin.000004',master_log_pos=1827695;

      注意:X.X.X.X为你的主节点的IP。后面的是之前配置的复制用户和密码,以及取得的主节点的文件名和BinLog坐标

    3.8 启动以及验证。

      登录到从节点的MySQL:

    mysql> START SLAVE;

    mysql> show slave statusG;

       

      没有报错则说明成功。

      

    我遇到的错误:

    【MySQL】Got fatal error 1236,仔细看了一下。是提示max_allowed_packet 大小。

    原因:

    首先max_allowed_packet控制着主从复制过程中,一个语句产生的二进制binlog event大小,它的值必须是1024的倍数 。出现此类错误的常见原因是
     1 该参数在主备库的配置大小不一样,主库的配置值大于从库的配置值。 从主库传递到备库的binlog event大小超过了主库或者备库的max_allowed_packet大小。
     2 主库有大量数据写入时,比如在主库上执行 laod data,insert into .... select 语句,产生大事务。
    当主库向从库传递一个比从库的max_allowed_packet 大的packet ,从库接收该packet失败,并报 “log event entry exceeded max_allowed_packet“。

    解决方法1:

    1. set global max_allowed_packet =1*1024*1024*1024;
    2. stop slave;
    3. start slave

    解决方法2:

    重新执行3.6,3.7,3.8。

    如:

    登录mysql>

    stop slave;(必须先停止才能执行下个命令)。

    change master to master_log_file='mysql-bin.000004', master_log_pos=215987;

    start slave;

     完。

  • 相关阅读:
    错误
    分页查询
    异步请求jquery
    深入理解C/C++ [Deep C (and C++)]
    C语言经典算法100例(三)
    《Python》 计算机基础
    Python程序员的进化史
    以前没有写笔记的习惯,现在慢慢的发现及时总结是多么的重要。 这一篇文章主要关于java多线程一些常见的疑惑点。因为讲解多线程的书籍和文章已经很多了,所以我也不好意思多说,嘻嘻嘻、大家可以去参考一些那些书籍。我这个文章主要关于实际的一些问题。同时也算是我以后复习的资料吧,。还请大家多多指教。 同时希望多结交一些技术上的朋友。谢谢。
    快速读入函数
    一元二次方程公式
  • 原文地址:https://www.cnblogs.com/joeone/p/10072622.html
Copyright © 2011-2022 走看看