1、背景
以前一个项目中数据库最基础同时也是最主流的是单机数据库,读写都在一个库中。当用户逐渐增多,单机数据库无法满足性能要求时,就会进行读写分离改造(适用于读多写少),写操作一个库,读操作多个库,通常会做一个数据库集群,开启主从备份,一主多从,以提高读取性能。当用户更多读写分离也无法满足时,就需要分布式数据库。(借助MyCat、sharing-jdbc、Canal等等),蚂蚁金服Oceanbase。
正常情况下读写分离的实现,首先要做一个一主多从的数据库集群,同时还需要进行数据同步。这一篇记录如何用mysql搭建一个一主多次的配置,
下一篇记录代码层面如何实现读写分离。
2、搭建一主多从数据库集群
主从备份需要多台虚拟机,如果用wmware完整克隆多个实例,注意直接克隆的虚拟机会导致每个数据库的uuid相同,是需要修改为不同的uuid。
核心配置如下:
主库配置
主数据库(master)中新建一个用户用于从数据库(slave)读取主数据库二进制日志,sql语句如下:
mysql> CREATE USER 'repl'@'%' IDENTIFIED BY '123456';#创建用户
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';#分配权限
mysql>flush privileges; #刷新权限
同时修改mysql配置文件开启二进制日志,新增部分如下:
[mysqld]
server-id=1
log-bin=master-bin #这边写的是对应bin的日志名称
log-bin-index=master-bin.index
然后重启数据库,在主库上使用show master status;语句查看主库状态,如下所示:
从库配置
同样先新增几行配置:
[mysqld