在阿里云Centos7.6上面配置Mysql主从数据库(master/slave),实现读写分离

原文转载自「刘悦的技术博客」v3u.cn/a_id_85mysql

在以前的一篇文章中,阐述了如何在高并发高负载的场景下使用nginx作后台服务的负载均衡:在阿里云Centos上配置nginx+uwsgi+负载均衡配置,可是不要觉得这样作了就是一劳永逸的,到了数据业务层、数据访问层,若是仍是传统的数据结构,或者只是单单靠一台服务器负载,如此多的数据库链接操做,数据库必然会崩溃,数据库若是宕机的话,后果更是不堪设想。这时候,咱们会考虑如何减小数据库的链接,一方面采用优秀的代码框架,进行代码的优化,采用优秀的数据缓存技术如:redis,若是资金丰厚的话,必然会想到架设mysql服务集群,来分担主数据库的压力。今天总结一下利用MySQL主从配置,实现读写分离,减轻数据库压力。nginx

明确目的,部署mysql集群,采用一主一从的策略,写入操做使用主库,从库实时同步主库的数据,从库负责读取的业务,从而完成读写分离的目的。redis

mysql主从同步的原理很简单,从库生成两个线程,一个I/O线程,一个SQL线程;i/o线程去请求主库 的binlog(二进制日志),并将获得的binlog日志写到relay log(中继日志) 文件中;主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;sql

SQL 线程,会读取relay log文件中的日志,并解析成具体操做,来实现主从的操做一致,而最终数据一致。数据库

首先准备两台阿里云服务器,一台做为主机(master),一台做为从机(slave),都安装好mysql5.7,具体怎样安装mysql服务请移步:v3u.cn/a_id_72vim

进入master服务器缓存

修改mysql配置文件 vim /etc/my.cnf,加入以下配置安全

server-id=1
innodb_flush_log_at_trx_commit=2
sync_binlog=1
log-bin=mysql-bin-1
复制代码

配置说明:bash

#设置主服务 的ID (id能够本身随便设置可是要保证和slave的id不同)
server-id=1服务器

#设为1固然是最安全的,但性能也是最差的(相对其余两个参数而言,但不是不能接受)。若是对数据一致性和完整性要求不高,彻底能够设为2,若是只最求性能,例如高并发写的日志服务器,设为0来得到更高性能
innodb_flush_log_at_trx_commit=2

#开启binlog 志同步功能
sync_binlog=1

#binlog 日志文件名
log-bin=mysql-bin-200

这个表示只同步某个库 (若是没有此项,表示同步全部的库)

binlog-do-db=xxxx

保存后,重启mysql

systemctl restart mysqld
复制代码

进入mysql命令行 mysql -uroot -p你的密码

输入受权命令

GRANT REPLICATION SLAVE ON *.* to 'repl'@'%' identified by 'Admin123!'; 
复制代码

意思是全部slave均可以经过帐号repl和密码Admin123!来同步master的数据

而后查看master的状态:

show master status;
复制代码

把file列和Position列记录下来,一会配置slave要用到

此时Master的配置已经搞定,登陆一下从机(slave)

同理修改slave服务器的mysql配置vim /etc/my.cnf 加入下面的配置,须要注意的是server-id不要和master同样

server-id=201 
innodb_flush_log_at_trx_commit=2 
sync_binlog=1 
log-bin=mysql-bin-201
复制代码

保存后重启服务systemctl restart mysqld

进入mysql命令行 mysql -uroot -p你的密码

输入命令:

change master to master_host='39.106.228.179',master_user='repl' ,master_password='Admin123!', master_log_file='mysql-bin.000002' ,master_log_pos=154
复制代码

命令说明:

master_host: 主机的ip

master_user : 主机受权的用户.

master_password : 主机受权时候填写的密码

master_log_file : 主机show master status;中的File

master_log_pos: 主机show master status;中的Position.

输入命令启动slave

start slave;
复制代码

能够查看slave的状态:

show slave status G;
复制代码

而后咱们就能够测试一下对master进行写入,看看salve是否能够同步数据了

固然了,mysql的读写分离主从配置并非万能的,根据不一样的应用场景选择不一样的策略,MySQL的主从复制功能有必定的延迟性,若是对数据实时一致性的要求比较高的场景不推荐使用。

原文转载自「刘悦的技术博客」 v3u.cn/a_id_85

相关文章
相关标签/搜索