起因

  由于网站进一步开发运行的需求,要求主机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. 利用nodeJs来安装less以及编译less文件为css文件

    NodeJs 使用nodejs安装less以及编译less文件为css文件 首先下载nodeJs的安装包,按照步骤,安装nodejs. 链接:http://pan.baidu.com/s/1dEsqY ...

  2. 一天搞定CSS:表格(table)--19

    1.表格标签 表格标签的嵌套关系 <table> <!--表格头--> <thead> <!--表格行--> <tr> <!--表格列 ...

  3. Hybrid App开发之JavaScript基础

    前言: 前面学习了html和css的基本使用,今天开始学习JavaScript的使用. 什么是JavaScript JavaScript是一种基于对象(Object)和事件驱动(Event Drive ...

  4. typecho for SAE

    url:http://cloudbbs.org/forum.php?mod=viewthread&tid=22817 typecho和wordpress差不多,目前使用的用户非常之多.这里分享 ...

  5. js继承的常用方法

    写在前面的话:这篇博客不适合对面向对象一无所知的人,如果你连_proto_.prototype...都不是很了解的话,建议还是先去了解一下JavaScript面向对象的基础知识,毕竟胖子不是一口吃成的 ...

  6. JDK和Tomcat的简单配置(菜鸟巧记一)

    JDK和Tomcat的配置 1.先好安装JDK 1.1先到oracle官网下载合适自己的JDK 地址http://www.oracle.com/technetwork/java/javase/down ...

  7. 为什么多线程、junit 中无法使用spring 依赖注入?

    为什么多线程.junit 中无法使用spring 依赖注入? 这个问题,其实体现了,我们对spring已依赖太深,以至于不想自己写实例了. 那么到底是为什么在多线程和junit单元测试中不能使用依赖注 ...

  8. 浅谈OpenStack架构

    首先,先来了解,什么是OpenStack?   OpenStack是一个云平台管理的项目,它不是一个软件.这个项目由几个主要的组件组合起来完成一些具体的工作.OpenStack是一个旨在为公共及私有云 ...

  9. PHPCMS V9 导航栏当前栏目高亮

    实际上这个东西可有可无,很多站点看似导航栏当鼠标指向后都会变化等高亮处理,一般都比较醒目,但是实质点击过去后,都还是只是刚才的样式,因为这些站点的导航栏都没有对当前选中栏目做CSS的指定变化处理. 该 ...

  10. mysql数据与Hadoop之间导入导出之Sqoop实例

    前面介绍了sqoop1.4.6的 如何将mysql数据导入Hadoop之Sqoop安装,下面就介绍两者间的数据互通的简单使用命令. 显示mysql数据库的信息,一般sqoop安装测试用 sqoop l ...