mysql集群配置在网站负载均衡中是必不可少的;

首先说下我个人准备的负载均衡方式;

  1、通过nginx方向代理来将服务器压力分散到各个服务器上;

  2、每个服务器中代码逻辑一样;

  3、通过使用redis缓存来保存内存中数据,使用redis同步功能来同步不同服务器内存中的数据;

  4、在通过mysql的集群配置来实现数据库数据同步;

这里我整理了几种数据同步方式;

一:主从服务器同步;

  顾名思义:主服务器负责数据的增删改查,从服务器负责同步数据;

  主服务器建立二进制文件;每产生语句变化或磁盘变化写入日至;

  从服务器读主服务二进制日至;将读到的日至转成从服务的relaylog,从服务读取relaylog同步主主服务器;

  主服务器建立授权复制账号;

  从服务器利用账号来监听主服务器;

  步骤:

  1、首先需要至少两台服务器,我这边118.xxx.xxx.1(主),118.xxx.xxx.2(从)两台服务器;两台搭建mysql方式不同,一台安装mysql,和mysql-server;一台通过直接安装mariadb方式;没什么影响;

  2、主服务器修改/etc/my.cnf;    

#在[mysqld]下添加,建立二进制日至
#server-id一般用服务器后一位
server-id=1
log-binary=mysql-bin #监听变化方式,statement语句变化,row行变化,mixed智能选择
binlog-format=mixed

  关于binlog-format的参数statement/row

  当影响一行如更新一行、插入一行、删除一行时使用row比较合理

  当更新插入删除多行时使用statement比较合理

  mixed是mysql根据条件自动选择使用哪一个参数

  3、从服务器修改/etc/my.cnf

#[mysqld]下添加relay-log

#server-id一般用服务器后一位
server-id=2
relay-log=mysql-relay

  4、重启两台服务器mysql 服务

//1
systemctl restart mysql //2
systemctl restart mariadb

  5、主服务建立授权账号replication client,replication slave账号允许服务二进制日至

grant replication client,replication slave on *.* to 'repl1'@'118.xxx.xxx.2' identified by 'password';

  注意这里账号的权限只能填*.*;否则会报如下错误

ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES

  6、从服务通过账号链接主服务器

#进入mysql,清除从库中的同步复制信息;
reset slave; #改变同步主机的信息
change master to
master_host='118.xxx.xxx.1',
master_user='repl1',
master_password='password',
master_log_file='mysql-bin.000003',
master_log_pos=543;

  主服务器二进制日至在/var/lib/mysql中

  在主服务器中show master status;查看主服务日至状态;file目前使用的日志文件;position目前使用的日志文件中的位置;开始从这个位置往后同步;

  7、查看从服务同步信息状态,并启动;

show slave status \G

  参数详解:

    slave_io_state:线程正在试图链接到主服务器的状态;

    master_host:主服务器ip地址

    master_user:被用于链接的当前用户

    master_port:当前的连接主服务器接口

     Connect_Retry:--master-connect-retry选项的当前值

    

     Master_Log_File:sql线程当前正在读取和执行的中继日志文件名称

  

     Read_Master_Log_Pos:当前中继日至中,sql线程已经读取和执行的位置

     Slave_IO_Running:io线程是否被启动并成功连接上主服务

//启动同步
start slave;

  7、查看启动后的状态waiting for master to send event 表示正常;

错误:

The server is not configured as slave; fix in config file or with CHANGE MASTER TO

这表示server-id 错误;将server-id 正确写在[mysqld]下的位置;

Failed to open the relay log './mariadb-relay-bin.000001' (relay_log_pos 4)

没有找到relay-bin.000001日至;因为修改前没有清除原有的配置;

解决方案:reset slave;后在change master to ....;

一:主主服务器同步;

  主主服务器mysql同时两台服务器同时监听对方服务器mysql变化;当有一台服务器中数据有变化,另一台实时同步;

  主从服务器同时建立二进制文件;每产生语句变化或磁盘变化写入日至;

  主从服务器同时读另一台服务二进制日至;将读到的日至转成本身服务的relaylog,然后读区本服务器的relaylog同步数据;

  两台服务器建立授权复制账号;

  两台服务器利用账号来监听另一台服务器;

  1、两台服务器my.cnf中配置

//服务器1
server-id=163
log-bin=mysql-bin
binlog-format=mixed
relay-log=mysql-relay
//服务器2
server-id=244
log-bin=mysql-bin
binlog-format=mixed
relay-log=mysql-relay

  2、两台服务器都建立授权监听账号

  

grant replication client,replication slave on *.* to 'repl163'@'118.xxx.xxx.1' identified by 'code@password';
grant replication client,replication slave on *.* to 'repl163'@'118.xxx.xxx.2' identified by 'code@password';

  3、两台服务器都监听对方log日至

change master to master_host='118.xxx.xxx.1',master_user='repl163',master_password='password',master_log_file='mysql-bin.000001',master_log_pos=746;
change master to master_host='118.xxx.xxx.2',master_user='repl163',master_password='password',master_log_file='mysql-bin.000001',master_log_pos=746;

  4、通过show slave status \G查看监听状态

  错误:Last_IO_Error: error connecting to master 'repl163@118.xxx.xxx.1:3306' - retry-time: 60  retries: 2

  表示连接出错,检查得知为ip写错了;

  ERROR 1198 (HY000): This operation cannot be performed with a running slave; run STOP SLAVE first

  表示在没有解锁的情况下停止slave进程:需要clear slave;

  然后再执行change master to...

  5、show slave status \G没有问题后启动;  

start slave

三:mysql-proxy实现负载均衡和读写分离

//install
yum install mysql-proxy
//101.xxx.xxx.1代理mysql端口4040;没有守护进程
mysql-proxy -P 101.xxx.xxx.1:4040 --proxy-backend-addresses=101.xxx.xxx.1:3306 --proxy-backend-addresses=101.xxx.xxx.2:3306
//读写分离写法,守护进程启动
mysql-proxy -b 101.xxx.xxx.1:3306 -r 101.xxx.xxx.1:3306 -s /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua --daemon

nginx集群+mysql数据同步的更多相关文章

  1. MongoDB DBA 实践5-----复制集集群的数据同步和故障转移

    (1)复制集集群的数据同步 1>主节点数据库test,在其中goods集合中加入一个文档. 2>在副节点中查看 注意:SECONDARY是不允许读写的,要使用rs.slaveOk()获得读 ...

  2. 搞懂 ZooKeeper 集群的数据同步

    本文作者:HelloGitHub-老荀 Hi,这里是 HelloGitHub 推出的 HelloZooKeeper 系列,免费开源.有趣.入门级的 ZooKeeper 教程,面向有编程基础的新手. 项 ...

  3. Apache shiro集群实现 (八) web集群时session同步的3种方法

    Apache shiro集群实现 (一) shiro入门介绍 Apache shiro集群实现 (二) shiro 的INI配置 Apache shiro集群实现 (三)shiro身份认证(Shiro ...

  4. 02使用java脚本向Pxc集群写入数据

    使用java脚本向Pxc集群写入数据 批量写入pxc集群程序 导入mysql驱动包 # 批量插入数据的java脚本 package pxc_demo; import java.sql.Connecti ...

  5. Hadoop集群-HDFS集群中大数据运维常用的命令总结

    Hadoop集群-HDFS集群中大数据运维常用的命令总结 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客会简单涉及到滚动编辑,融合镜像文件,目录的空间配额等运维操作简介.话 ...

  6. nginx 集群介绍

    nginx 集群介绍 完成一次请求的步骤 1)用户发起请求 2)服务器接受请求 3)服务器处理请求(压力最大) 4)服务器响应请求 缺点:单点故障 单台服务器资源有限 单台服务器处理耗时长 ·1)部署 ...

  7. nginx集群报错“upstream”directive is not allow here 错误

    nginx集群报错“upstream”directive is not allow here 错误 搭建了一个服务器, 采用的是nginx + apache(多个) + php + mysql(两个) ...

  8. Nginx集群之WCF大文件上传及下载(支持6G传输)

    目录 1       大概思路... 1 2       Nginx集群之WCF大文件上传及下载... 1 3       BasicHttpBinding相关配置解析... 2 4       编写 ...

  9. Nginx集群之SSL证书的WebApi身份验证

    目录 1       大概思路... 1 2       Nginx集群之SSL证书的WebApi身份验证... 1 3       AuthorizeAttribute类... 2 4       ...

随机推荐

  1. 数据类型之字符串类型与Number类型

    ㈠字符串类型 ⑴在JS中字符串需要使用引号引起来 ⑵使用双引号或单引号都可以,但是不要混着用 ⑶引号不能嵌套,双引号不能放双引号,单引号不能放单引号 ⑷在字符串中,可以使用“\”作为转义字符,当表示一 ...

  2. Binding使用的属性、DataContext上下文绑定必须使用的情况

    RelativeSource属性 https://blog.csdn.net/yangwenxue1989/article/details/81624240 Binding时,如果明确知道数据源的Na ...

  3. 【CUDA 基础】4.1 内存模型概述

    title: [CUDA 基础]4.1 内存模型概述 categories: - CUDA - Freshman tags: - CUDA内存模型 - CUDA内存层次结构 - 寄存器 - 共享内存 ...

  4. 在vue中引入layer弹框的简易方法

    npm i --save layui-layer 2.在main.js中引入 import layer from "layui-layer"; 3.然后就可以在各个组件中使用lay ...

  5. __new()__与__init__()

    1. __new__:创建对象时调用,会返回当前对象的一个实例.(默认情况下也就是你在类中没有没有重新这个方法,会默认返回当前类的示例,如果你重写了这个方法,但是在方法中没有返回当前类的示例,那么也就 ...

  6. JSON 转含有泛型属性的对象

    在将 json 字符串转为对象时,如果对象含有泛型,在进行转换时需要指明泛型类型. 1. 对象只含有一个泛型属性时 1.1  代码 /** * @Describe: * @Author: chenfa ...

  7. xftp上传文件到虚拟机linux失败问题

    如果想通过xftp上传文件到虚拟机linux时,可能会产生上传失败的问题 原因: 因为有些文件是只可读,所以要修改文件权限,可读可写,才可以上传成功. 解决方法: 第一种方法:用xftp连接虚拟机后, ...

  8. 浅析VxWorks与Linux操作系统的区别

        版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/flaoter/article/details/76861710 转载请标明出处floater ...

  9. spark streaming 5: InputDStream

    InputDStream的继承关系.他们都是使用InputDStream这个抽象类的接口进行操作的.特别注意ReceiverInputDStream这个类,大部分时候我们使用的是它作为扩展的基类,因为 ...

  10. Python中函数的使用

    函数让代码的编写,阅读,测试和修改都变得更容易,提高代码的复用性,python中使用def关键字定义函数 如下代码在python3.7.3的Genay开发工具中编写测试通过. 一.简单函数定义及调用 ...