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;

 完。

原文地址:https://www.cnblogs.com/joeone/p/10072622.html