MySQL集群主从复制搭建
Posted HeFengJun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 STATUS\\G; (注意是大写)
记录下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 status\\G;
没有报错则说明成功。
我遇到的错误:
【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:
- set global max_allowed_packet =1*1024*1024*1024;
- stop slave;
- 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;
完。
以上是关于MySQL集群主从复制搭建的主要内容,如果未能解决你的问题,请参考以下文章