日期:2014-05-16  浏览次数:20416 次

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. +------------------+----------+--------------+------------------+