`
purpen
  • 浏览: 795370 次
  • 性别: 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主从复制、集群和负载平衡 MySQL 集群是指将多个 MySQL 服务器组合成一个集群,以提高数据库的可用性、可扩展性和性能。MySQL 集群可以分为多种类型,例如主从复制集群、多主多从集群、负载平衡集群等...

    MYSQL-企业整合解决方案之mysql集群搭建-主从配置.docx

    本资源主要介绍了MYSQL企业整合解决方案中的mysql集群搭建-主从配置的实现过程,涵盖了主从复制的原理、配置信息、搭建步骤等方面的知识点。 一、主从复制原理 MYSQL中的主从复制是指将一台主服务器的数据实时同步...

    mysql主从数据库的配置说明文档.pdf

    1. 解决性能瓶颈,通过数据库集群实现查询负载均衡。查询操作通常比更新操作多,多台查询服务器分担查询任务,提高效率。 2. 分离读写操作,主数据库处理插入、删除和更新,从数据库专注查询,优化查询性能。 配置...

    mysql集群主从安装总结

    ### MySQL集群主从安装总结 在本篇文章中,我们将详细探讨如何进行MySQL集群的主从复制配置,并通过一系列具体的步骤来实现这一目标。MySQL主从复制是一种常见的数据冗余技术,它能够帮助我们构建高可用性和高可靠...

    Mysql Keeplived主从集群环境搭建

    MySQL Keeplived 主从集群环境搭建是一个用于高可用性和负载均衡的解决方案,它结合了MySQL的复制机制和Keepalived的故障切换功能。这个配置确保了在主数据库服务器出现故障时,可以从服务器能够无缝接管,保证数据...

    Mysql数据库与SQL优化+集群+负载均衡.doc

    MySQL 数据库与 SQL 优化 + 集群 + 负载均衡 MySQL 数据库与 SQL 优化是提高数据库性能的关键一步骤。 SQL 优化可以通过优化数据库结构、索引、查询语句等方式来实现。下面是 MySQL 数据库与 SQL 优化的主要知识点...

    mysql热备及mysql主从配置

    而MySQL主从复制则是构建高可用架构的一种常见方式,它通过将主数据库的更新传播到从数据库,实现了数据的冗余和负载均衡。 首先,让我们深入理解MySQL热备的概念。热备通常涉及到数据库的实时复制,确保备用服务器...

    基于Zookeeper框架实现MySQL分布式数据库集群.pdf

    尽管本论文并未详细说明如何具体实现基于Zookeeper的MySQL集群管理框架,但可以推断,实现这一框架的关键步骤可能包括:部署Zookeeper集群,编写和部署agent程序,以及配置Zookeeper以实现集群的监控和管理功能。...

    MYSQL主从数据库介绍__主库__从库.pdf

    MySQL主从数据库是一种常见的数据库高可用性和负载均衡架构,它主要由主库(Master)和从库(Slave)组成。主库负责处理所有的写操作,而从库则复制主库上的数据并处理读操作,从而分散数据库服务器的压力,提高系统...

    mysql主从数据库服务器的设置.pdf

    MySQL主从数据库服务器的设置是数据库集群中常用的一种数据冗余和负载均衡策略。通过主从复制,数据在主服务器上写入后会被同步到从服务器,确保数据的一致性,并且可以从从服务器上分担读取操作,提高系统的整体...

    Mysql+Mycat实现数据库主从同步与读写分离.docx

    【MySQL+Mycat 实现数据库主从同步与读写分离】 MySQL 主从同步是一种常见的数据库高可用解决方案,它通过复制技术将数据从主数据库实时地、无损地同步到从数据库,确保在主库发生故障时可以从从库接管服务,从而...

    MySQL数据库:数据库高可用与容灾方案

    - **优势**:MySQL的主从复制是实现数据库高可用性的一种有效方式,通过合理配置和管理,可以显著提高数据的安全性和系统的稳定性。 - **局限性**:在主数据库发生故障时,数据的完整性可能受到影响,因此在设计高...

    MySql 数据库主从机制原理说明及配置步骤.docx

    MySQL数据库的主从机制是一种常见的高可用性和负载均衡解决方案,它允许数据从一个主服务器(Master)异步复制到一个或多个从服务器(Slave)。这种机制对于数据安全性、读写分离以及故障转移具有重要意义。 主从...

    Mysql 5.6.26 主从搭建完整版.zip

    不过,在Java应用程序中,可以通过JDBC驱动来连接到MySQL数据库,实现读写操作,并可以配合监控工具(如Java应用)来检测和处理主从复制的异常情况。 5. **Mysql 5.6.26 主从搭建完整版.pdf**: 这个PDF文件很可能...

    Ubuntu配置Mysql主从数据库

    MySQL的主从数据库配置是一种常见的数据冗余和负载均衡策略,尤其在大型网站架构中广泛使用。通过主从复制,数据库中的所有写操作在主数据库上执行,而读操作可以在从数据库上分散,从而减轻主数据库的压力,提高...

    8.第八章:mysql主从复制与读写分离.doc

    这时,通过构建MySQL集群(如主从复制和读写分离)来提升整体性能就显得尤为关键。 - **重点内容2:主从复制的原理** - 主从复制是实现读写分离的基础。它允许数据在主服务器和一个或多个从服务器之间保持同步。 -...

    CentOs7下mysql5.7的下载安装以及主从同步、双主多从配置详情

    双主多从是指将两个 Mysql 服务器配置为主服务器,并将多个从服务器连接到这两个主服务器上,以实现高可用性和负载均衡。配置双主多从需要在 my.cnf 文件中添加以下内容: [mysqld] server-id = 1 log-bin = /var/...

    14高性能数据库集群:读写分离1

    1. **主从集群**:读写分离通常通过构建主从数据库集群实现。主服务器处理写操作,并通过复制机制将更改同步到从服务器,从服务器则专门处理读操作。这种设置可以确保写操作的原子性和一致性,同时通过分散读请求来...

    JBoss负载均衡与Mysql主从备份

    本文将深入探讨JBoss应用服务器如何实现负载均衡以及MySQL数据库如何配置主从备份,旨在为读者提供一个全面的技术指南。 #### JBoss负载均衡技术 JBoss AS(Application Server)是Red Hat公司提供的一个开源应用...

    MySQL集群扩展Web数据库指南跟集群7.2新特白皮书

    MySQL集群是一种高可用性、高性能的数据库解决方案,尤其适合处理大量并发读写操作的Web数据库应用。本指南将深入探讨MySQL集群7.2版本的新特性,以及如何有效地扩展Web数据库以满足不断增长的需求。 首先,MySQL...

Global site tag (gtag.js) - Google Analytics