http://www.cnblogs.com/luoine/archive/2010/12/14/1906001.html html
在作web应用系统中,若是数据库出现了性能瓶颈,而你又是使用的MySQL数据库,那么就能够考虑采用数据库集群的方式来实现查询负载了。由于通常来说任何一个系统中数据库的查询操做比更新操做要多的多,所以经过多台查询服务器将数据库的查询分担到不一样的查询数据库从而提升数据库的查询效率。 mysql
MySQL数据库支持数据库的主从复制功能,使用主数据库进行数据的插入、删除与更新操做,而从数据库则专门用来进行数据库查询,这样就能够将更新操做与查询操做分离到不一样的数据库上,从而提升查询的效率。 linux
MySQL任何一台数据库服务器均可以做为主数据库服务器,咱们只须要简单的修改配置文件就可使之成为主数据库服务器。咱们打开MySQL的配置文件(对于windows就是MySQL安装目录下的my.ini文件,对于linux一般就是/etc/my.cnf文件),咱们在配置文件中加入以下两行: web
server-id = 1 log-bin=mysql-bin
注意,MySQL进行主从复制是经过二进制的日志文件来进行,因此咱们必须开启MySQL的日志功能,即咱们上面的log-bin,同时每一台数据库服务器都须要指定一个惟一的server-id,一般主数据库服务器咱们指定为1。主数据库服务器的配置就是如此了,而后咱们还须要给主数据库授予一个能够进行复制的用户,命令以下: sql
GRANT replication slave ON *.* TO 'repuser'@ '%' IDENTIFIED BY '123456';
replication slave是MySQL数据库中表示复制的权限名称,repuser则是表示从数据库服务器登录到主数据库服务器时用到的用户名称,123456表示登录密码。这样,咱们就在主数据库服务器上建立了一个能够进行复制的用户帐号了。而后咱们启动主数据库服务器就能够了。 数据库
从数据库服务器的配置稍微多一点,主要也是修改MySQL的配置文件,加入以下行: windows
server-id= 2 log-bin=mysql-bin --在从服务器上启动日志记录,不是必须,可是官方建议 master-host=主机 --主数据库服务器的IP地址 master-user=用户名 --执行复制的用户名称,就是grant的用户 master-password=密码 --复制用户的密码,就是grant的用户密码 master-port=端口 --主数据库服务器的端口,默认是 3306
相关的配置参数意义已作了说明,主要就是多了配置主数据库服务器上的复制帐号的信息。而后咱们启动从数据库服务器,注意启动从数据库服务器后,并无启动复制线程,咱们须要在命令行中执行以下命令来启动复制功能: 服务器
slave start
启动后,咱们就能够经过以下命令来查看复制的状态了: 性能
show slave status;
而后咱们就能够看到系统的输出,第一个就是Slave_IO_State,它的值一般就是Waiting for master to send event,而后咱们也还能够看到咱们刚才配置的主数据库服务器的IP地址、复制帐号等信息。 spa
咱们还能够在从数据库服务器上动态的改变对主数据库的配置信息,经过以下命令来进行:
CHANGE MASTER TO MASTER_HOST=’主数据库服务器的IP地址’, MASTER_PORT= 3306, MASTER_USER=’主数据库上的复制账号’, MASTER_PASSWORD=’密码’;
监控主数据库服务器的状态,咱们能够经过showmaster status来查看主数据库服务器的状态,它的输出以下:
+ ------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | + ------------------+----------+--------------+------------------+ | mysql -bin .000003 | 370558 | | | + ------------------+----------+--------------+------------------+ 1 row IN SET ( 0.00 sec )
其中File是表示日志记录的文件,而Position则是表示当前日志在文件中的位置,这个也是从数据库服务器上执行复制操做必须的标识,后面的两个字段分别表示要记录的数据库名称和不须要记录的数据库名称,咱们也能够在配置文件中进行配置。
监控从数据库服务器的状态,咱们能够经过show slave status来查看从数据库服务器的状态,它的基本输出以下:
+ ----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+-----------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+ | 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 | + ----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+-----------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+ | 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 | + ----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+-----------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+ 1 row IN SET ( 0.00 sec )
上面显示的结果中的mysql-bin.000003和370558分别表示的是Master_Log_File和Read_Master_Log_Pos,即主数据库服务器上的日志文件和要读取的主数据库服务器上的日志的位置,一般这个Read_Master_Log_Pos是和主数据库服务器上的Position是一致的,固然这个是指同步之后的,若是从数据库服务器尚未同步完毕,那么这个值一般比主数据库服务器上的要小。
Slave start; --启动复制线程 Slave stop; --中止复制线程 Reset slave; --重置复制线程 Show slave status; --显示复制线程的状态 Change master to; --动态改变到主数据库的配置
至此,咱们就完成了mysql的主从数据库的配置,这也也为咱们的应用在集群中的使用打下了一个基础。
http://www.cnblogs.com/LCX/archive/2010/03/10/1682227.html参考文章