数据库性能优化普遍采用集群方式,oracle集群软硬件投入昂贵,今天花了一天时间搭建基于mysql的集群环境。
主要思路
简单说,实现mysql主备复制-->利用mycat实现负载均衡。
比较了常用的读写分离方式,推荐mycat,社区活跃,性能稳定。
主要思路:A主mysql开启日志,B备mysql读取操作日志,同步执行。
一般为主备同步,主主同步不推荐使用。
一、主数据库master修改:
1.修改mysql配置
找到主数据库的配置文件my.cnf(或者my.ini),我的在/etc/my.cnf,在[mysqld]部分插入如下两行
[mysqld]
server-id=1 #主机标示,整数
port=3306
log-bin="C:/Program Files/MySQL/MySQL Server 5.5/log/mysql-bin.log" #确保此文件可写
read-only=0 #主机,读写都可以
binlog-do-db=db1 #需要备份数据库,多个写多行
binlog-ignore-db=mysql #不需要备份的数据库,多个写多行
修改完重启mysql
2.查看master状态,记录二进制文件名(mysql-bin.000024)和位置(522):
二、从服务器slave修改:
1.修改mysql配置
同样找到my.cnf配置文件,添加server-id:
[mysqld]
# add for db1
server-id=2 #从机标识
log-bin="C:/Program Files/MySQL/MySQL Server 5.5/log/mysql-bin.log" #确保此文件可写
#master-host="192.168.110.1" #主机Ip
#master-user=root #数据库访问用户名
#master-pass=root #数据库访问密码
#master-port=3306 #主机端口
#master-connect-retry=60 #如果从服务器发现主服务器断掉,重新连接的时间差(秒)
replicate-do-db=db1 #只复制某个库
replicate-ignore-db=mysql #不复制某个库
2.重启mysql,打开mysql会话,执行同步SQL语句(需要主服务器主机名,登陆凭据,二进制文件的名称和位置):
mysql> CHANGE MASTER TO
-> MASTER_HOST='182.92.172.80',
-> MASTER_USER='rep1',
-> MASTER_PASSWORD='slavepass',
-> MASTER_LOG_FILE='mysql-bin.000024',
-> MASTER_LOG_POS=522;
3.启动slave同步进程:
mysql>start slave;
4.查看slave状态:
当Slave_IO_Running和Slave_SQL_Running都为YES的时候就表示主从同步设置成功了。接下来就可以进行一些验证了,比如在主master数据库的test数据库的一张表中插入一条数据,在slave的test库的相同数据表中查看是否有新增的数据即可验证主从复制功能是否有效,还可以关闭slave(mysql>stop slave;),然后再修改master,看slave是否也相应修改(停止slave后,master的修改不会同步到slave),就可以完成主从复制功能的验证了。
至此,mysql主从复制配置完毕。现在开始测试结果。
在主mysql 中的表添加一条记录,从数据库也会有一条记录。
mycat读写分离
配置mycat:
server.xml:(主要是关联scheme与用户名,密码)
schema.xml:主要配置db1-schema 的读写信息
启动没有cat:
./startup_nowrap.sh
注意:
因为mycat默认需要内存比较大,这里可以稍作修改:(startup_nowrap.sh)
测试读写分离:
可以采用开启(start/stop slave;)从数据库读取 和不开启从数据库读取,发现读取是从数据库,写入走的是master.
参考文档: