搭建数据库集群,主从复制,读写分离
一、这段时间因为公司系统经常卡死,原因是因为出现死锁或者同一资源访问时间过长,其他请求等待时间过长的情况,所以公司打算把数据库改成一主一从,可读写分离;
之前对这一块无任何经验,只是听说过,数据库集群已是相当成熟的技术了;
虽然这么说但是在自己实践的过程中,还是遇到好多配置不知道是怎么回事儿,还是踩到好多坑;前前后后耽误好些时间,唉说出来都有些脸红了;
下面就先列出踩得那些坑,几点注意事项和几点疑惑:
一、主从数据库名称必须一样,否则:
1.无法进行主从复制;
主从复制可通过配置文件解决;
2.无法进行读写分离;
当启动中间件后,数据库中没有数据,只有表没有数据(这里猜测,中间件读取的是从数据库的数据);
二、主从数据库做主从配置时候,数据必须完全相同,否则:
1.当在主数据库中有操作到从数据库中没有的数据时,主从配置就会报错,并且失效,更麻烦的是还得重新配置主从;
2.备份数据库时候必须转储为sql文件,因为只有sql文件还原时主从复制才会生效,而使用备份在主数据库还原时,从数据库没有数据;
下面写上步骤:
一、修改主从数据库的配置文件my.ini
主服务器:
[mysqld]
log-bin=mysql-bin //打开二进制功能,MASTER主服务器必须打开此项
server-id=1
binlog-do-db=ceshi_test //指定同步某个数据库
从服务器:
log-bin=mysql-bin
server-id=2
重启服务器;
二、主服务器上创建同步数据的账户并授权
GRANT REPLICATION SLAVE ON *.* TO 'ABC'@'192.168.2.39' IDENTIFIED by 'slave';
允许其他Slave服务器可以通过远程192.168.2.39访问Master,通过用户ABC读取二进制日志,实现数据同步
参数说明:
*.* :表示对所有表的所有操作
ABC:slave连接master使用的账号
IDENTIFIED BY 'admin' :slave连接master使用的密码
192.168.2.39:slave IP
可以看到主数据库上已经创建了用户abc
mysql>flush privileges; //刷新系统权限表
三,查询主数据库的位置信息
mysql>show master status;
此处的二进制文件名和位置信息在配置从服务器的时候用到;
四、配置从服务器信息;
进入从数据库命令行或者Navicat连接执行此语句;
连接Master
change master to master_host='192.168.2.39', //Master 服务器Ip
master_port=3306,
master_user='abc',
master_password='mysql',
master_log_file='master-bin.000001',//Master服务器产生的日志
master_log_pos=0;
mysql>start slave;
到此,主从同步已经配置完成;
监测一下主从是否可用
mysql>show slave master\G
持续更新完善中。。。。。。。。