`
purpen
  • 浏览: 786670 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MySQL集群:主从数据库配置 实现查询负载

 
阅读更多

在做web应用系统中,如果数据库出现了性能瓶颈,而你又是使用的MySQL数据库,那么就可以考虑采用数据库集群的方式来实现查询负载了。因为一般来讲任何一个系统中数据库的查询操作比更新操作要多的多,因此通过多台查询服务器将数据库的查询分担到不同的查询数据库从而提高数据库的查询效率。

      MySQL数据库支持数据库的主从复制功能,使用主数据库进行数据的插入、删除与更新操作,而从数据库则专门用来进行数据库查询,这样就可以将更新操作与查询操作分离到不同的数据库上,从而提高查询的效率。

1、主数据库配置

      MySQL任何一台数据库服务器都可以作为主数据库服务器,我们只需要简单的修改配置文件就可以使之成为主数据库服务器。我们打开MySQL的配置文件(对于windows就是MySQL安装目录下的my.ini文件,对于linux通常就是/etc/my.cnf文件),我们在配置文件中加入如下两行:

  1. server-id = 1
  2. log-bin=mysql-bin

      注意,MySQL进行主从复制是通过二进制的日志文件来进行,所以我们必须开启MySQL的日志功能,即我们上面的log-bin,同时每一台数据库服务器都需要指定一个唯一的server-id,通常主数据库服务器我们指定为1。主数据库服务器的配置就是如此了,然后我们还需要给主数据库授予一个可以进行复制的用户,命令如下:

  1. GRANT replication slave ON *.* TO 'repuser'@'%' IDENTIFIED BY '123456';

      replication slave是MySQL数据库中表示复制的权限名称,repuser则是表示从数据库服务器登陆到主数据库服务器时用到的用户名称,123456表示登陆密码。这样,我们就在主数据库服务器上创建了一个可以进行复制的用户账号了。然后我们启动主数据库服务器就可以了。

2、从数据库配置

      从数据库服务器的配置稍微多一点,主要也是修改MySQL的配置文件,加入如下行:

  1. server-id=2
  2. log-bin=mysql-bin --在从服务器上启动日志记录,不是必须,但是官方建议
  3. master-host=主机 --主数据库服务器的IP地址
  4. master-user=用户名 --执行复制的用户名称,就是grant的用户
  5. master-password=密码 --复制用户的密码,就是grant的用户密码
  6. master-port=端口 --主数据库服务器的端口,默认是3306

      相关的配置参数意义已做了说明,主要就是多了配置主数据库服务器上的复制账号的信息。然后我们启动从数据库服务器,注意启动从数据库服务器后,并没有启动复制线程,我们需要在命令行中执行如下命令来启动复制功能:

  1. slave start

      启动后,我们就可以通过如下命令来查看复制的状态了:

  1. show slave status;

      然后我们就可以看到系统的输出,第一个就是Slave_IO_State,它的值通常就是Waiting for master to send event,然后我们也还可以看到我们刚才配置的主数据库服务器的IP地址、复制账号等信息。

      我们还可以在从数据库服务器上动态的改变对主数据库的配置信息,通过如下命令来进行:

  1. CHANGE MASTER TO MASTER_HOST=’主数据库服务器的IP地址’, MASTER_PORT=3306,MASTER_USER=’主数据库上的复制帐号’, MASTER_PASSWORD=’密码’;

3、启动与监控

      监控主数据库服务器的状态,我们可以通过showmaster status来查看主数据库服务器的状态,它的输出如下:

  1. +------------------+----------+--------------+------------------+
  2. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  3. +------------------+----------+--------------+------------------+
  4. | mysql-bin.000003 | 370558 | | |
  5. +------------------+----------+--------------+------------------+
  6. 1 row IN SET (0.00 sec)

      其中File是表示日志记录的文件,而Position则是表示当前日志在文件中的位置,这个也是从数据库服务器上执行复制操作必须的标识,后面的两个字段分别表示要记录的数据库名称和不需要记录的数据库名称,我们也可以在配置文件中进行配置。

      监控从数据库服务器的状态,我们可以通过show slave status来查看从数据库服务器的状态,它的基本输出如下:

  1. +----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+-----------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+
  2. | Slave_IO_State | Master_Host | Master_User | Master_Port | Connect_Retry | Master_Log_File | Read_Master_Log_Pos | Relay_Log_File | Relay_Log_Pos | Relay_Master_Log_File | Slave_IO_Running | Slave_SQL_Running | Replicate_Do_DB | Replicate_Ignore_DB | Replicate_Do_Table | Replicate_Ignore_Table | Replicate_Wild_Do_Table | Replicate_Wild_Ignore_Table | Last_Errno | Last_Error | Skip_Counter | Exec_Master_Log_Pos | Relay_Log_Space | Until_Condition | Until_Log_File | Until_Log_Pos | Master_SSL_Allowed | Master_SSL_CA_File | Master_SSL_CA_Path | Master_SSL_Cert | Master_SSL_Cipher | Master_SSL_Key | Seconds_Behind_Master |
  3. +----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+-----------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+
  4. | Waiting FOR master TO send event | 172.16.11.221 | repuser | 3306 | 60 | mysql-bin.000003 | 370558 | WEB2-relay-bin.000206 | 12251 | mysql-bin.000003 | Yes | Yes | | | | | | | 0 | | 0 | 370558 | 12251 | None | | 0 | No | | | | | | 0 |
  5. +----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+-----------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+
  6. 1 row IN SET (0.00 sec)

      上面显示的结果中的mysql-bin.000003370558分别表示的是Master_Log_File和Read_Master_Log_Pos,即主数据库服务器上的日志文件和要读取的主数据库服务器上的日志的位置,通常这个Read_Master_Log_Pos是和主数据库服务器上的Position是一致的,当然这个是指同步以后的,如果从数据库服务器还没有同步完毕,那么这个值通常比主数据库服务器上的要小。

      如果从数据库服务器在同步的过程中出现了问题,那么我们可以通过reset slave来重置从数据库服务器的复制线程,从数据库服务器上的通常操作命令有:
  1. Slave start; --启动复制线程
  2. Slave stop; --停止复制线程
  3. Reset slave; --重置复制线程
  4. Show slave status; --显示复制线程的状态
  5. Change master to; --动态改变到主数据库的配置

      至此,我们就完成了mysql的主从数据库的配置,这也也为我们的应用在集群中的使用打下了一个基础。

 

主从数据库

ThinkPHP的模型支持主从式数据库的连接,配置DB_DEPLOY_TYPE 可以采用分布式数据库支持。如果采用分布式数据库,定义数据库配置信息的方式如下:

// 在项目配置文件里面定义

return array(

'DB_TYPE'=> 'mysql'// 分布式数据库的类型必须相同

'DB_HOST'=> '192.168.0.1,192.168.0.2',

'DB_NAME'=>'thinkphp'// 如果相同可以不用定义多个

'DB_USER'=>'user1,user2'

'DB_PWD'=>'pwd1,pwd2'

'DB_PORT'=>'3306',

'DB_PREFIX'=>'think_',

…… 其它项目配置参数

);

连接的数据库个数取决于DB_HOST定义的数量,所以即使是两个相同的IP也需要重复定义,但是其他的参数如果存在相同的可以不用重复定义,例如:

'DB_PORT'=>'3306,3306'  'DB_PORT'=>'3306' 等效

'DB_USER'=>'user1'

'DB_PWD'=>'pwd1'

'DB_USER'=>'user1,user1'

'DB_PWD'=>'pwd1,pwd1',

等效。

还可以设置分布式数据库的读写是否分离,默认的情况下读写不分离,也就是每台服务器都可以进行读写操作,对于主从式数据库而言,需要设置读写分离,通过下面的设置就可以:

'DB_RW_SEPARATE'=>true,

在读写分离的情况下,第一个数据库配置是主服务器的配置信息,负责写入数据,其它的都是从数据库的配置信息,负责读取数据,数量不限制。每次连接从服务器并且进行读取操作的时候,系统会随机进行在从服务器中选择。

注意事项:主从数据库的数据同步工作不在框架实现,需要数据库考虑自身的同步或者复制机制。

分享到:
评论

相关推荐

    高可用MYSQL,主从复制,集群和负载平衡

    详细介绍Mysql、MariaDB主从复制、多主多从架构、负载平衡和集群的设置。读写分离和数据库垂直、水平切分建议使用Sharding JDBC

    Ubuntu配置Mysql主从数据库

    MySQL数据库支持数据库的主从复制功能...众多国内外大型网站架构体系中,均采用了MySQL的主从数据库配置来实现查询负载、数据库热备等功能。本人在实际的Web项目中也涉及到这一需求,在此将如何配置实现做个简单小结。

    JAVA集群部署

    2台用于 mysql主从数据库集群:主(读写操作) 从(读操作)数据库集群 2台用于动静态分离 Nginx动静分离 3台用于应用服务器(hadoop): 一台namenode两台:datanode1 datanode2 1台NFS文件服务器 Nginx 1台 2台...

    分布式负载均衡集群架构设计

    4.主从读写分离数据库集群: 一台主MySql数据库处理写的业务,至少一台从MySql服务器处理读取业务 -------////////////////////////////\\\\\\\\\\\\\\\\\\\\\---------------- 需要文档的联系我

    数据库分库技巧

    数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 关键字: 水平切分,分库,分表,主从,集群 第1章 引言 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题。对于一...

    mysql面试题史上最强汇总:基础知识+性能优化+备份与恢复+ 数据库设计+数据库管理+高可用性与容灾+安全性+ 框架集成等

    6. 高可用性与容灾:包括主从复制、多节点复制、集群配置、读写分离、负载均衡等。 7. 安全性:包括数据加密、SSL/TLS 加密传输、安全配置等。 8. 框架集成:包括 MySQL 数据库在不同框架中的集成、ORM 框架的使用等...

    MySQL大型分布式集群 龙果学院

    第1节 课程概述 [免费观看] 00:12:22分钟 | 第2节 课程背景 [免费观看] 00:09:12分钟 ...纵观大型网站架构发展,总结持久化部分需要应对的问题 ...另外一种切分方式-使用客户端组件的方式实现数据库分 00:06:20分钟 |

    linux_基于主从结构读写分离MYSQL集群

    linux_基于主从结构读写分离MYSQL集群

    mysql负载均衡完美解决方案

    mysql负载均衡完美解决方案V1.0 以下方案作者为高进波,可供参考。 1 .环境:mysql 5 ubuntu10.04 x86_64 mdb1 eth0 192.168.5.11 mdb2 eth0 192.168.5.12 sdb1 eth0 192.168.5.21 sdb2 eth0 192.168.5.22 sdb3 ...

    linux集群应用实战

    第26讲 配置mysql+lvs+keeplived实现mysql读操作的负载均衡 课程目标: 熟练掌握mysql+lvs+keeplived的部署方式 keeplived简介 通过配置lvs+keeplived实现mysql读操作的负载均衡 测试mysql+lvs+keeplived负载均衡...

    mysql读写分离读写分离

    mysql读写分离,负载均衡,备份高可用性,数据库集群,主从数据库复制

    mysql cluster集群安装

    因此,IT界一时大数据存储机制频频推出,数据双机热备、双机集群、分布式存储、主从备份、数据同步、负载均衡等技术一时百花盛开。而本文将围这些技术以mysql-cluster集群展开探讨,旨在为读都身体力行式的感受...

    MySQL主从复制集群keepalived高可用LVS负载均衡MyCAT读写分离

    本套课程主要介绍了MySQL主从复制、双主复制、一主多从、多主一从、多线程复制、无损复制、结合keepalived实现mysql双主高可用、LVS双主mysql负载均衡以及使用MyCat数据库中间件实现读写分离。

    mysql分布式集群架构视频

    mysql分布式集群架构视频,包含linux上安装mysql,主从复制、主主复制、负载均衡、haproxy监控、高可用、keepalived、分库分表、数据库中间件-mycat、以及mycat的各种使用,自己学的这个视频,60多集,挺不错的

    MySQL在面试中经常被问到.docx MySQL是一个流行的关系型数据库管理系统(RDBMS),在面试中经常被问

    在水平扩展方面,可以通过主从复制、分片和集群等技术来实现可扩展性;在垂直扩展方面,可以通过增加硬件资源来提高MySQL的性能。 数据安全性:MySQL提供了各种安全功能,如用户身份验证、数据加密和访问控制等,以...

    具有负载均衡功能的MySQL服务器集群部署及实现

    在实际生产环境中,部署和实现具有一定负载均衡功能的 MySQL服务器集群,对于提高用户数据库应用系统的性能、速度和稳定性具有明显的作用。本文简要介绍了在 FreeBSD 7.0-Release系统上部署实现MySQL服务器集群的...

    分布式集群、PB级别网站性能优化

    大数据高并发服务器实战教程 Linux LNMP部分 Memcached篇 ...mysql主从复制安装配置进阶 hadoop分布计算安装 hadoop分布计算配置 redis安装实战 redis使用进阶 redis实用命令实战 redis实战案例及总回顾

    mysql高可用扩展集群应用讲义.zip

    内容概要: Drbd+Heartbeat+Lvs+Keepalived+Mysql可行性分析(第一讲) Mysql主从复制的实现(第二讲) 配置mysql+heartbeat+drbd实现Mysql写操作高可用(第三...配置mysql+lvs+keeplived实现Mysql读操作的负载均衡(第四讲)

    MySQL Galera集群的选择与性能测试

    通过Galera集群可用下列特性: • 真正的多主机 读和写任何...• 自动节点配置 不需要手动备份数据库并将其复制到新节点。 • 支持InnoDB。 • 透明的应用程序 不需要(或很少)更改)应用程序。 • 不需要读和写的分离。

Global site tag (gtag.js) - Google Analytics