起因

  由于网站进一步开发运行的需求,要求主机7*24小时运行正常,同时要求能够防止数据库灾难。考虑到后期的开发程度和业务量,准备向高可用系统进行改变,同时通过负载均衡提高网络性能。于是第一步就考虑到了数据库的集群问题。

集群和数据库主从复制

集群

  通过多个物理机服务器共同处理和完成同一个业务功能,能很好的提高网站性能和可靠性。不同的环境下需要采用不同的集群策略,集群主要分为以下几种:

(1)高可用集群:节点间以主备形式实现数据库容灾,在宕机情况下能快速恢复,节点间共享资源。

(2)负载均衡集群:节点间相互独立不共享资源,通过一定的算法和模式将业务操作分到不同的节点,充分利用每个节点的资源,能够提高扩展性,加强了网络数据处理能力。

(3)科学计算集群:相对串行计算而言的,多台计算机执行多个指令达到单台计算机无法达到了计算速度。

主从复制

  对上面高可用集群的理解,实现高可用集群可以配置服务器的主从关系,通过了解准备使用Mycat来对数据库进行管理,在此之前需要对数据库进行主从配置。

(1)主从配置:为了将mysql的数据库分不到多个系统中,最简单的实现方式就是复制了。而mysql内建有一种复制方式,即指定一台或多台服务器为主机master,另外一台或多台服务器作为从机slave。当master存在更新的时候,master将更新写入二进制文件,并维护了一个索引文件跟踪日志。当slave连接到主服务器之后,slave会通知master进行同步,master通过索引找日志文件上一次同步的位置,然后将这段时间内的更新数据发送给slave进行同步。

(2)mysql主从复制支持类型:

a. 基于sql的支持:通过将matser日志文件中更新的sql语句复制到slave上,slave执行。

b. 基于行的支持:当sql不精确或者记录丢失时,mysql会将改变的行直接复制到slave上

c. 混合支持:默认使用a方式

(2)主从复制优缺点

优点:高可用,提高容错率,数据分布,负载均衡。

缺点:单向同步,无法解决主机宕机问题

主从配置

  为了方便演示,采用单主单从的主从配置,单主多从的配置原理一样。双主配置能很好地避免主服务器的宕机情况,配置比较复杂,下次有空演示。

Windows配置

测试环境

  windows 7,mysql 5.5.28,为了避免因为版本不一致带来的麻烦,主从数据库用同一版本数据库库

  主机ip:192.168.1.234  从机ip:192.168.1.244

准备条件

(1)关闭防火墙

(2)保证两台主机的mysql远程连接开启(必须)

(3)3306端口(数据库端口号,不固定,按自己的配置去确定)是否公开

(4)在主机和从机上创建test数据库

主机配置

(1)在mysql的安装文件夹中找到mysql.ini文件,在该文件的mysqld标签下添加以下属性(还有其他很多属性可以自行了解):

server-id=    #服务器id不固定,整数即可
log-bin=C:\Program Files\MySQL\MySQL Server 5.5\mysql-bin #同步日志的文件存放路径
binlog-do-db=test #备份哪些些数据库的二进制日志
#binlog-ignore-db=... #也可以直接设置哪些数据库不同步

配置完成后重启mysql,这时候会在这个时候在C:\Program Files\MySQL\MySQL Server 5.5\下会看到mysql-bin.index和mysql-bin.00001两个文件,很明显前面的文件时索引文件,用以记录第二个文件,第二个是二进制的日志文件,该文件每次重启数据库均会产生新的日志文件,这些日志文件的索引被以文件名为索引的索引文件所维护,在索引文件中可以看到所有日志文件的坐标。

(2)登陆mysql,给从机配置登录名,登陆,密码和权限

grant replication slave,reload,super on *.*  to slave@192.168.1.244  identified by 'qwer';

这条语句意思是给ip为192.168.1.244(从机ip)的远程服务器配置登录名是slave,密码是qwer,并赋予slave,super,reload权限

(3)查看主机状态

show master status;

查出主机的file和postin在从机配置中需要使用,记住即可。

致此,主机配置完成。

从机配置

(1)在从机mysql安装目录下找到mysql.ini文件,在该文件的mysqld标签下添加如下:

server-id=88   #同样随机,保证整数唯一即可
replicate-do-db=test1 #复写(同步)哪一个数据库

配置好之后重启数据库

(2)测试主机的远程连接是否成功(必要测试)如果不成功立即排除问题,不然不进行下一步操作

mysql -uslave -h 192.168.1.234 -pqwer

连接成功后退出主机mysql,进入从机mysql

(3)修改(第一次应该叫指定)主机信息

stop slave;      关闭从机同步连接
change master to master_host = '192.168.1.234', master_user='slave', master_ password ='qwer', master_log_file='mysql-bin.000001',master_log_pos=593;

将主机地址,主机名,主机密码,二进制文件地址,刚刚截图的主机file和position指定到主机信息中(上面的change语句)

注意:这个步骤如果出现警告,请查看日志文件进行排查,不然后续合同无法成功。修改完成后

start slave;     开启同步连接
show slave status\G; 查看主从机连接信息

查看同步状态会有:

图中的IO状态表示主从数据库是否连接成功,sql表示两个同步文件和slave从机是够连接成功,参考第一张图的IO和sql

如果两个都是yes即表示同步配置成功,之后自己可以再test数据库下测试。如果出现任何问题可以留言。

linux配置

测试环境

mysql版本5.7  两台服务器的版本要求一致,以免后续出现不可预知的问题

主机 ubuntu 16.04   ip:192.168.1.116

从机 CentOS 6.5      ip:192.168.1.254

准备条件

(1)关闭防火墙

sudo service ufw stop

(2)保证两台服务器的mysql远程连接成功

(3)保证3306端口可以正常使用

a. 查看3306端口是否被绑定本地

netstat -an|grep 3306

上图是正确的,如果出现的是127.0.0.0:::3306说明端口被本机绑定了,这种情况下需要修改mysqld的配置

注意:这里是修改mysqld配置文件配置,仅仅在my.cnf中修改是不起作用的

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf    进入mysqld的配置文件

将mysqld下的这行代码注释掉即可

(4)创建test同名数据库

主机配置

(1)找到my.cnf文件

  与windows上不同,linux的配置文件时my.cnf,这个文件默认是在/etc上,如果找不到会在.xx/nysql/目录下寻找。如果你找不到my.cnf可以输入以下命令(在根目录下输入此命令):

find -name 'my.cnf'  #找到当前目录下my.cnf的位置

(2)配置my.cnf

  如果是第一次安装mysql(不知道怎么安装的请点击《linux下的mysql安装》),第一次进入my.cnf会发现该文件下没有任何标签,这时候可以在其他的地方(官网上或者靠谱点的网站上)复制my.cnf的头文件或者样式,如果嫌麻烦可以直接在my.cnf下增加一个[mysqld]标签(必要的)否则会报错的。然后再mysqld标签下添加以下配置:

server_id=66
log-bin=mysql-bin
binlog-do-db=test

之后重启mysql,跟windows相同。

(3)授权(跟windows相同)

grant replication slave,reload,super on *.*  to slave@192.168.1.254  identified by 'qwer';

(4)记录主机配置

show master status;

从机配置。。。相同

在my.cnf文件下的sqld标签(跟主机一样没有的话添加上)下配置:

server-id=88
replicate-do-db=test1 #复写(同步)哪一个数据库

重启mysql。。。

mysql -uslave -h 192.168.1.116 -pqwer    #测试主机连接
stop slave; #关闭从机同步连接
change master to master_host='192.168.1.234',master_user='slave',master_password='qwer', master_log_file='mysql-bin.000001',master_log_pos=593; #填写刚刚截图信息
start slave; #开启同步连接
show slave status\G; #查看主从机连接信息

完成后会查出同步状态:

两个是yes就代表同步成功,如果有no分析日志解决问题,或者留言也可


以上两个版本的配置算是结束了

注意

  按照以上的配置,主机对从机的权限之后DQL和DML,也就是读写权限,而并不具备DDL操作权限。也就是说只有的那个两个同名数据库中存在同名表时候,改变主机表的数据,才会同步到从机。如果需要创建表等的权限,可以再数据库中mysql数据库的user表中修改权限。

也可以使用授权语句,授予远程主机所有权限:

grant all privileges on *.* to slave@192.168.1.254 identified by 'qwer';  #授予所有权限
flush privileges;    #刷新数据库

这样一来,主数据库中建表等操作也能同步到从库

集群之mysql主从配置(windows和linux版)的更多相关文章

  1. MySQL+PHP配置 Windows系统IIS版

    MySQL+PHP配置 Windows系统IIS版 1.下载 MySQL下载地址:http://dev.mysql.com/downloads/mysql/5.1.html->Windows ( ...

  2. 这次一定要教会你搭建Redis集群和MySQL主从同步(非Docker)

    前言 一直都想自己动手搭建一个Redis集群和MySQL的主从同步,当然不是依靠Docker的一键部署(虽然现在企业开发用的最多的是这种方式),所以本文就算是一个教程类文章吧,但在动手搭建之前,会先聊 ...

  3. 基于Windows服务器集群的Redis主从配置指南

    前段时间一个项目因并发量大.因防止宕机做了主从备份,首页的表连接查询又非常的耗时.故此拿出利器Redis缓存这个查询结果,并随着用户操作而更新. 因官方目前只有linux版,Windows版下载:  ...

  4. Redis集群(四):主从配置二

    一.本文目的        主要介绍redis主从模式下各种情况 二.说明 主从的基本概念:Master用于写入,Slaver用于读取,不能写入或修改,一个Master可以对应多个Slaver Mas ...

  5. MySQL+PHP配置 Windows系统IIS版(转)

    1.下载 MySQL下载地址:http://dev.mysql.com/downloads/mysql/5.1.html->Windows (x86, 32-bit), MSI Installe ...

  6. mysql主从配置和galera集群

    mariadb主从 主从多用于网站架构,因为主从的同步机制是异步的,数据的同步有一定延迟,也就是说有可能会造成数据的丢失,但是性能比较好,因此网站大多数用的是主从架构的数据库,读写分离必须基于主从架构 ...

  7. windows环境下mysql主从配置

    mysql主从配置. 相关理论知识可以百度一下,这里就不多说了,直接说如何配置. 一.环境介绍及说明 主库所在的操作系统:win7 主库的版本:mysql-5.6.24-winx64.zip 主库的i ...

  8. centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数据库读写分离 双主搭建 mysql.history 第二十九节课

    centos  MySQL主从配置 ntsysv   chkconfig  setup命令  配置MySQL 主从 子shell  MySQL备份  kill命令  pid文件  discuz!论坛数 ...

  9. 解读mysql主从配置及其原理分析(Master-Slave)

    在windows下配置的,后面会在Linux下配置进行测试,需要配置mysql数据库同步的朋友可以参考下. 1.在主数据库服务器为从服务器添加一个拥有权限访问主库的用户:GRANT REPLICATI ...

随机推荐

  1. 《实战java高并发程序设计》源码整理及读书笔记

    日常啰嗦 不要被标题吓到,虽然书籍是<实战java高并发程序设计>,但是这篇文章不会讲高并发.线程安全.锁啊这些比较恼人的知识点,甚至都不会谈相关的技术,只是写一写本人的一点读书感受,顺便 ...

  2. Java经典编程题50道之一

    有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? public class Example01 {    publi ...

  3. 每天一个JS 小demo之商品下架特效制作,主要知识点:定时器,倒计时,抖动特效。PS:由于不方便上传文件夹,只能上传效果图,图片等素材需自寻哟。

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  4. angularjs 水平滚动选中按钮高亮显示 swiper和回到顶部指令的实现ionic

    首先安装 swiper npm install --save swiper 或者 bower install --save swiper <link rel="stylesheet&q ...

  5. java GUI (课堂笔记)

    关于java GUI Swing组件: JFrame 窗口组件 JLabel 标签 JButton 按钮组件 JTextField 单行文本框 系统控件(JDK自带) 自定义控件(模仿系统控件): 继 ...

  6. java基础-四种方法引用

    实例 直接三角形,通过两边算第三边,目的是为了如何使用这几种方法引用.代码中多有些不合适,尽情原谅. 静态方法引用 接口的参数列表与类中的具体实现方法的参数列表一样,返回值一致. 调用 //静态引用 ...

  7. 高性能队列Disruptor系列1--传统队列的不足

    在前一篇文章Java中的阻塞队列(BlockingQueue)中介绍了Java中的阻塞队列.从性能上我们能得出一个结论:数组优于链表,CAS优于锁.那么有没有一种队列,通过数组的方式实现,而且采用无锁 ...

  8. JSP手动注入 全

    检测可否注入 http://****.house.sina.com.cn/publics/detail.jsp?id=7674 and 1=1 (正常页面) http://****.house.sin ...

  9. Spring学习(6)---Bean定义及作用域的例子

    (一)Bean的定义 先定义一个BeanAnnotation package com.mypackage; import org.springframework.stereotype.Componen ...

  10. [BZOJ1415]聪聪和可可

    Input 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行,每 ...