概述
在做web应用系统中,如果数据库出现了性能瓶颈,而你又是使用的MySQL数据库,那么就可以考虑采用数据库集群的方式来实现查询负载了。因为一般来讲一个系统中数据库的查询操作比更新操作要多的多,因此通过多台查询服务器将数据库的查询分担到不同的查询数据库从而提高数据库的查询效率。
MySQL数据库支持数据库的主从复制功能,使用主数据库进行数据的插入、删除与更新操作,而从数据库则专门用来进行数据库查询,从数据库还可以建立多台,通过负载均衡来实现查询,这样就可以将更新操作与查询操作分离到不同的数据库上,从而提高查询的效率,降低系统的负载。
配置
一、主数据库配置
修改mysql的配置文件(对于windows就是MySQL安装目录下的my.ini文件,对于linux通常就
是 /etc/my.cnf文件),在配置文件中加入(或修改)
server-id = 1
log-bin=mysql-bin
binlog-do-db=dbname --要同步的数据库名称
binlog-ignore-db=dbname --不要同步的数据库名称
注:MySQL进行主从复制是通过二进制的日志文件来进行,所以我们必须开启MySQL的日志功能,即我们上面的log-bin,同时每一台数据库服务器都需要指定一个唯一的server-id,通常主数据库服务器我们指定为1。
给主数据库授予一个可以进行复制的用户,如下:
grant replication slave on *.* to repuser@'host' identified by '123456';
replication slave——MySQL数据库中表示复制的权限名称
repuser——从数据库服务器登陆到主数据库服务器时用到的用户名称
host——从数据库IP地址
123456——登陆密码
如果上述权限设置后,无法同步,可将其改为
grant select,insert,update,delete,replication slave on *.* to repuser@'10.20.20.167' identified by '123456';
配置完上述步骤后,就可以启动主数据库了。
二、从数据库配置
修改配置文件
server-id=2
log-bin=mysql-bin --在从服务器上启动日志记录,不是必须,但是官方建议
master-host=主机 --主数据库服务器的IP地址
master-user=用户名 --执行复制的用户名称,就是grant的用户,即repuser
master-password=密码 --复制用户的密码,就是grant的用户密码,即123456
master-port=端口 --主数据库服务器的端口,默认是3306
replicate-do-db=dbname --需要同步的数据库
#replicate-ignore-db=dbname --不需要同步的数据库
现在可以重启从数据库,启动后,还需要启动复制线程
slave start
查看复制线程的状态
show slave status;
我们还可以在从数据库服务器上动态的改变对主数据库的配置信息,通过如下命令来进行:
CHANGE MASTER TO MASTER_HOST='主数据库服务器的IP地址',MASTER_PORT=3306,MASTER_USER='主数据库上的复制账号',MASTER_PASSWORD='密码';
三、启动与监控
1、监控主数据库服务器
show master status; --运行于主数据库
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 370558 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
其中File是表示日志记录的文件,而Position则是表示当前日志在文件中的位置,这个也是从数据库服务器上执行复制操作必须的标识,后面的两个字段分别表示要记录的数据库名称和不需要记录的数据库名称,我们也可以在配置文件中进行配置。
2、监控从数据库服务器
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 | 10.20.20.194 | repuser | 3306 | 60 | mysql-bin.000003 | 370558 | WEB2-relay-bin.000206 | 12251 | mysql-bin.000003 | Yes | Yes | | | | | | | 0 | | 0 | 370558 | 12251 | None |