数据库的分布式配置是很常用的一种项目优化方式,主要是由于项目在运行中遇到的主要性能瓶颈在于数据库的数据读取不能满足要求,除了一些针对于数据库查询的优化,例如合适的的索引,使用缓存等方式。使用一台 Mysql 数据库服务器,其性能和处理数据的速度很有限,通过添加多太数据库的方式可以解决。在多数的软件项目中,对于数据库的操作,数据的读取操作是数据的修改操作的7倍之余,所以我们对于写入,修改,删除等操作在一台数据库中执行,数据的读取操作在其他数据库执行。存在多台数据库就需要实现数据的同步,在一台数据库中修改数据后,其他的数据库能够同步修改后的数据,而且这种架构可以作为数据的备份,减少数据丢失的损失。实现这些功能就需要用到数据库的主从复制的功能,接下来我以一台数据库为主数据库,两台数据库为从数据库进行配置的讲解。
先说一下实现的原理,主要是使用 Mysql 数据库的二进制日志文件,然后根据日志进行数据的同步操作,所以我们需要配置 Mysql 数据库的日志。我使用的是 centos7.4 发行版,Mysql 版本为5.7,安装方式为 Yum ,Mysql 的配置文件位于 /etc/my.cnf。以下为一个主库,两个从库的配置:
主库的配置
[mysqld]
#log_bin
#加入server-id 参数,值设置为1,
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
从库配置(从库1)
[mysqld]
#log_bin
#加入server-id 参数,值设置为3,
server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
从库配置(从库2)
[mysqld]
#log_bin
#加入server-id 参数,值设置为3,
server-id = 3
log_bin = /var/log/mysql/mysql-bin.log
接下来创建日志文件的存储目录。安装配置项在 /var/log/mysql 中:
#新建mysql目录
$ mkdir -p /var/log/mysql;
#将该目录分配给mysql用户组
$ chown -R mysql:mysql /var/log/mysql
重启mysql
$ service mysqld reload
登录到主数据库中,为从数据库创建两个用户:
#第一个从数据库
# 创建一个用户名为db1密码为password1的用户,登录ip为 db_ip1 的ip
create user 'db1'@'db_ip1' identified by 'password1';
#第二个从数据库
# 创建一个用户名为db2密码为password2的用户,登录ip为 db_ip2 的ip
create user 'db2'@'db_ip2' identified by 'password2';
#授予从服务器同步的权限
grant replication slave on *.* to 'db1'@'db_ip1';
grant replication slave on *.* to 'db2'@'db_ip2';
#刷新权限
flush privileges;
#查看master状态
show master status;
![](https://img.haomeiwen.com/i15645871/67cdad12be9c6d49.png)
接下来登录到从数据库服务器中,进行设置:
在这主数据库服务器中创建一个数据库作为演示,然后创建一个表,插入一条数据,将该数据库和表数据同步到从属数据库中。
配置从数据库的slave服务:
#关闭slave
stop slave;
#配置(关键)
change master to master_host='master_db_ip',master_user='db1/db2',master_password='password1/password2',master_log_file='mysql-bin.xxxxxx',master_log_pos=xxx;
其中master_host为主数据库服务器ip,master_user为我们在主数据中创建的用户主从复制的用户,master_password为设置的密码,master_log_file为在主数据中执行
show master status 中的file字段的值,master_log_pos为Position字段的值
#开启slave;
start slave;
#查看slave状态
show slave status;
然后我们在主数据库中的演示数据库的表中插入一条数据,就会看到从数据也会同步该条数据。大功告成!
文章同步发布在我的个人博客中,传送门Hesunfly Blog
网友评论