本文使用环境如下:
两台Linux:CentOS 6.8 安装的mysql版本都是5.6
大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够。到了数据业务层、数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢失的话,后果更是 不堪设想。这时候,我们会考虑如何减少数据库的联接,一方面采用优秀的代码框架,进行代码的优化,采用优秀的数据缓存技术如:memcached、Redis等。如果资金丰厚的话,必然会想到假设服务器集群,来分担主数据库的压力。Ok切入今天主题,利用mysql主从配置,实现读写分离,减轻数据库压力。这种方式,在如今很多网站里都有使用,也不是什么新鲜事情。
概述:搭设一台mysql master服务器,搭设一台或多台mysql slave服务器
master:主 的意思 slave:从 的意思
原理:主服务器(master)负责网站写的操作,从服务器负责读的操作,用户可以根据网站功能模特性块固定访问slave服务器,或者自己写个池或队列,自由为请求分配从服务器连接。主从服务器利用mysql的二进制日志文件(bin-log),实现数据同步。二进制日志由主服务器产生,从服务器响应获取同步数据库。
mysql的主从数据同步是利用了mysql的replication功能,该功能是mysql非常出色的一个功能,该功能可以将一个mysql实例中的数据复制到另一个mysql实例中。整个过程是异步进行的,由于其高效的性能设计,复制的延时非常小。mysql复制功能在实际的应用场景中被广泛的应用于保证数据系统数据的安全性和可扩展设计中。
来,我们上mysql主从架构模式工作流程图:
一、前期相关准备工作
我们使用两台服务器(两台服务器都已安装了mysql)
master(主)服务器IP:119.3.220.26
slave(从)服务器IP :114.116.115.71
注意:为了防止不必要的出错 我们将以上两台服务器的防火墙都关闭以及关闭setlinux
1、关闭防火墙 centos6系列:service iptables stop centos7系列:systemctl stop firewalld
2、关闭setlinux 命令:setenforce 0
二、开始搭建
1、修改主从服务器的mysql的配置文件my.cnf 如果你不知道你的mysql配置文件的路径。。可以使用mysql --help|grep 'my.cnf',或者用find命令查找。。
mysql --help|grep 'my.cnf':查看mysql启动时读取配置文件的默认目录
修改/et/my.cnf
①、server-id = 1 #主服务器的可以设置为1,其它从服务器的一般按照行业规范都是设置为从服务器IP的最后一段,主服务器一般默认的都是1,所以不用修改,从服务器就不能为1了,server-id表示在当前的mysql主从架构中当前mysql服务的唯一性,相当于数据表中的主键id字段
②、log-bin=mysql-bin #启用二进制日志,主从服务的核心,就是通过它来实现主从服务之间的数据同步
③、然后重启mysql服务
master(119.3.220.26)主服务器的mysql配置文件如下:
slave(114.116.115.71)从服务器的mysql配置文件如下:
2、主服务器上和从服务器上的数据库和表要保持一致。
①、在主从服务器上分别创建以下数据库和表(用来测试的)
-- 创建测试数据库test create database test default character set utf8mb4 collate utf8mb4_general_ci;
②、在test数据库里面创建一张user表
--选择test数据库 use test; -- 创建user表 CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
3、主服务器配置,在mysql上进行操作(创建一个专门用来同步数据的账号)
-- 下面的*.*表示 什么库什么表 这里是 任意库任意表 grant replication slave on *.* to 'mysync'@'%' identified by '12345678'; -- 查看主服务器状态,此后不要再进行任何操作 show master status;
show master status截图如下;
4、从服务器上进行配置,在mysql上进行操作,语法如下:
change master to master_host='119.3.220.26',master_user='mysync',master_password='12345678',
master_log_file='mysql-bin.[File]',master_log_pos=[Position];
mysync、12345678是刚刚在主服务器创建的账号及对应的密码
[File]和[Position]中的内容要替换为主服务器对应显示的内容,也就是上面截图中显示的000008和2927
在本文中 这里的完整语句如下(在mysql上运行以下语句)
change master to master_host='119.3.220.26',master_user='mysync',master_password='12345678', master_log_file='mysql-bin.000008',master_log_pos=2927; start slave; -- 开启从服务 show slave status\G; --查看从服务状态,Slave_IO_Running和Slave_SQL_Running两个选项都为Yes表示主从成功 -- ps 顺便说一句停止从服务命令。。不过 猜也应该能猜到吧 stop slave;
示例截图如下:
5、主服务器上进行插入数据测试
①、主服务器上插入数据
insert into user(username) values('xiaoming');
②、从服务器上查询数据
select * from user;
至此。。主从搭建成功。。 以后写的操作交给主(master)服务器,读的操作交给从(slave)服务器。。达到减轻mysql压力。。
声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。
精彩评论