起因

  由于网站进一步开发运行的需求,要求主机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. VR全景智慧城市——商家的需求才是全景市场的核心竞争力

    消费者视角痛点:比如酒店消费行业,很多消费者在预订酒店过程中,都遇到过这样的场景:网上照片里酒店房间看着宽敞明亮,格调不凡,感觉非常喜欢,等真正推开房门插上房卡一看,却大失所望.在酒店行业,网上照片和 ...

  2. JavaScript面向对象轻松入门之概述(demo by ES5、ES6、TypeScript)

    写在前面的话 这是一个JavaScript面向对象系列的文章,本篇文章主要讲概述,介绍面向对象,后面计划还会有5篇文章,讲抽象.封装.继承.多态,最后再来一个综合. 说实话,写JavaScript面向 ...

  3. 修改cms版权等等信息

    目的:为DedeCMS换上精美多样的提示信息窗口 用到的开源项目:DedeCMS,artdialog 步骤: 1.下载include.rar文件完成后,解压得到2个php文件和一个使用说明文件,将ph ...

  4. PHP中的面向对象OOP中的魔术方法

    一.什么是魔术方法: PHP为我们提供了一系列用__开头的函数,这些函数无需自己手动调用,会在合适的时机自动调用,这类函数称为魔术函数.例如: function __construct(){} 在ne ...

  5. loadrunner学习理论之一

    1.负载测试.压力测试的区别? 答:负载测试是在被测系统所承受的正常范围内进行的 压力测试可以在极端的条件下进行 2.loadrunner的三大组件是什么,有什么作用? 答:虚拟用户生成器(virtu ...

  6. comm的用法

    1.comm的功能 对两个排序过的文本文件进行逐行比较基本用法:comm -[123] file1 file2 2.例子 1)显示两个文本文件都有的行#comm -12 file1 file2 2)显 ...

  7. 增强for循环用法

    1.首先增强for循环和iterator遍历的效果是一样的,也就说增强for循环的内部也就是调用iteratoer实现的, 但是增强for循环有些缺点,例如不能在增强循环里动态的删除集合内容.不能获取 ...

  8. 用CSS美化checkbox复选按钮和raido单选按钮-适用于移动端

    最终效果: 实现方法 index.html: <!DOCTYPE html> <html> <head> <title></title> & ...

  9. 解决kubuntu(KDE4.8.5桌面环境)找不到中文语言包

    原始日期:2013-12-30 23:16 接触linux的想必都知道KDE平台,kde精美的界面是其一大特色,不过美中不足的是,很多新手在安装完KDE后,界面包括菜单选项等都是英文界面,对于英语水平 ...

  10. WebService小记

    这个问题找了好多地方都没有结果,自己暂且总结一下吧,也不算是解决问题的根本途径,但是也不失为一种办法.当时用了wsimport  wsdl2java xfire 都没有解决,大牛能解决的话,欢迎留言. ...