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

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

  1. Eureka应用注册与集群数据同步源码解析

    在之前的EurekaClient自动装配及启动流程解析一文中我们提到过,在构造DiscoveryClient类时,会把自身注册到服务端,本文就来分析一下这个注册流程 客户端发起注册 boolean r ...

  2. mysql 集群+主从同步

    SQL节点: 给上层应用层提供sql访问. 管理节点(MGM):  管理整个集群. 启动,关闭集群. 通过ndb_mgmd命令启动集群 存储/数据节点: 保存cluster中的数据.  数据节点,可以 ...

  3. Elasticsearch多集群数据同步

    有时多个Elasticsearch集群避免不了要同步数据,网上查找了下数据同步工具还挺多,比较常用的有:elasticserach-dump.elasticsearch-exporter.logsta ...

  4. 008 Ceph集群数据同步

    介绍,目前已经创建一个名为ceph的Ceph集群,和一个backup(单节点)Ceph集群,是的这两个集群的数据可以同步,做备份恢复功能 一.配置集群的相互访问 1.1 安装rbd mirror rb ...

  5. elasticsearch 不同集群数据同步

    采用快照方式 1.源集群采用NFS,注意权限 2.共享目录完成后,在所有ES服务器上挂载为同一目录 3.创建快照仓库 put _snapshot/my_backup{ "type" ...

  6. 高可用性、负载均衡的mysql集群解决方案

    高可用性.负载均衡的mysql集群解决方案 一.mysql的市场占有率 二.mysql为什么受到如此的欢迎 三.mysql数据库系统的优缺点 四.网络服务器的需求 五.什么是mysql的集群 六.什么 ...

  7. mysql集群数据一致性校验

    目前,mysql在互联网行业使用地如火如荼,很多大型网站都在使用MySQL数据库,通过搭建mysql主备集群,实现高性能,高可用的存储方案.mysql集群的共同特性是通过复制来实现主备间的同步,保证主 ...

  8. MySql集群FAQ----mysql主从配置与集群区别、集群中需要多少台计算机呢?为什么? 等

    抽取一部分显示在这里,如下, What's the difference in using Clustervs using replication? 在复制系统中,一个MySQL主服务器会更新一个或多 ...

  9. linux上使用amoeba实现MySql集群,以及读写分离,主从复制

    一.由于是MySql集群,所以就不可能只有一个MySql,需要多个MySql,具体安装步骤,可以参考http://www.cnblogs.com/ywzq/p/4882140.html这个地址进行安装 ...

随机推荐

  1. SQL Server 诊断查询-(4)

    Query #41 Memory Clerk Usage -- Memory Clerk Usage for instance -- Look for high value for CACHESTOR ...

  2. How to interact with the Chef Server using the Chef Server API using Shell script

    !/usr/bin/env bash   _chef_dir () { # Helper function: # Recursive function that searches for chef c ...

  3. 利用百度地图API和群蚁算法,对TSP问题进行模拟与求解

    前言 最近由于换了工作,期间也有反思和总结上家公司的得失,总觉得有什么事情当初可以完成或者完成得更好,其中TSP问题就是其中之一.当初在开发一个仓配系统的时候,有一个线路排程的需求,当时自己简单在纸上 ...

  4. Codeforces Round #554 (Div. 2) C. Neko does Maths(数学+GCD)

    传送门 题意: 给出两个整数a,b: 求解使得LCM(a+k,b+k)最小的k,如果有多个k使得LCM()最小,输出最小的k: 思路: 刚开始推了好半天公式,一顿xjb乱操作: 后来,看了一下题解,看 ...

  5. 常用的字符串函数-S

    header('content-type:text/html;charset=utf-f'); /* $var=addslashes($_GET['username']);//转义表单提交内容中的引号 ...

  6. Spark的历史与发展(目录)

    对于一个具有相当技术门槛与复杂度的平台,Spark从诞生到正式版本的成熟,经历的时间如此之短,让人感到惊诧.2009年,Spark诞生于伯克利大学AMPLab,最开初属于伯克利大学的研究性项目.它于2 ...

  7. ​​ ​​Java后端学习路线图,你真的只需要这一张!

    ​​​​ 前言 学习路线图往往是学习一样技术的入门指南.网上搜到的Java学习路线图也是一抓一大把. 今天我只选一张图,仅此一图,足以包罗Java后端技术的知识点.所谓不求最好,但求最全,学习Java ...

  8. 【iCore1S 双核心板_FPGA】例程十二:基于单口RAM的ARM+FPGA数据存取实验

    实验现象: 核心代码: module single_port_ram( input CLK_12M, input WR, input RD, input CS0, inout [:]DB, input ...

  9. PHP提取HTML代码中img标签下src属性

    需求:提取整片文章中img的src属性,并保存到一个数组当中 preg_match_all("/(href|src)=([\"|']?)([^\"'>]+.(jpg ...

  10. [Java123]Gradle

    https://dzone.com/articles/gradle-vs-maven https://docs.gradle.org/current/userguide/what_is_gradle. ...