MySQL搭建主从服务器与读写分离的实现

一 丶为什么要搭建主从服务器和实现读写分离

 1.总结起来就一点,实现并发吞吐和负载能力。通过搭建主从服务器实现读写分离,提高MySQL的负载能力

2.主从的基本实现原理 (本例 主服务器ip: 192.168.2.187,后面简称 master;从服务器ip: 192.168.2.199 后面简称 slave)

⑴ 主(master)服务器配置 bin-log

⑵ 从(slave)服务器配置 relay-log

⑶ 主(master)服务器为从服务器授权读取bin-log的账号

⑷ 从(slave)服务器使用账号连接主服务器

⑸ 从(slave)服务器读取主服务器的 bin-log

二 丶准备工作->网络设置

 ① 分别设置两台虚拟机的网络,使其能够相互 ping 通

  centOS7 的网络配置文件为  /etc/sysconfig/network-scripts/ifcfg-ens33(某些为: /etc/sysconfig/network-scripts/ifcfg-eno16777736 )

  如图设置网络


 保存退出并重启网络即可

service network restart

三 丶准备工作->安装MySQL

1.两台Mysql服务器

2.安装

① 博主使用的是centOS7 64位,(PS:如果不会安装centOS7,请参照https://blog.csdn.net/anphper/article/details/80251223)

② 安装Mysql前需要先安装几个基本命令

⑴ wget

 yum -y install wget

  ⑵ telnet

yum -y install telnet

  ⑶ ifconfig

yum provides ifconfig
yum whatprovides ifconfig
yum install net-tools

  ⑷ rz sz

yum -y install lrzsz

  ⑸ vim

yum -y install vim* 

③ 安装MySQL

  ⑴ 检查系统中是否有MySQL 若没有返回则系统没有安装MySQL,若如下图,则已经安装,不需要再次安装

rpm -qa | grep mysql

 

 ⑵ 下载mysql源

wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm

 ⑶ 安装  mysql-community-release-el7-5.noarch.rpm  包(mysql的依赖包)

rpm mysql-community-release-el7-5.noarch.rpm

 (4) 安装MySQL

 yum install mysql-server

 ⑸  重启服务 

service mysqld restart

 ⑹ 安装完成后还需要对MySQL设置密码,因为初次安装是没有密码的

 登录mysql

mysql -u root -p
mysql > use mysql;
mysql > update user set password=password('123456') where user='root';
mysql > exit;

重启MySQL

四 丶 关闭防火墙(关闭防火墙的原因是使得从服务器可以连接主服务器)

centOS7 关闭防火墙的命令不再是  service iptables stop 

① 查看防火墙状态

 firewall-cmd --state

② 关闭防火墙

systemctl stop firewalld.service

③ 确认防火墙状态  

firewall-cmd --state

 

如图则已关闭

五 丶主从搭建

① 分别 修改两台服务器的 mysql 配置文件  /etc/my.cnf  (master 的 server-id 设置为1)

server-id = 1  --主服务器 server-id 一般设置为1,从服务器设置为IP端的后几位
log_bin = mysql-bin

② 确保主从服务器上面数据库/表一致,便于同步

③ 主服务器配置 

 创建一个专门用于同步的账号

grant replication slave on *.* to 'lili'@'%' identified by '123456';
--  *.* 意思为允许连接任何库任何表,lili 为连接的账号名,%为任何的连接源,123456为连接的密码

查看主服务器状态:

show master status;

④ 从服务器配置

  ⑴ 从服务器配置

--读取master的bin_log
change master to master_host = '192.168.2.187',master_user='lili',master_password='123456',master_log_file='mysql-bin.000006',master_log_pos = 643;

--master_host 主服务器ip
--master_user 主服务器上分配的账号
--master_password 主服务器为账号分配的密码
--master_log_file bin-log日志
--master_log_pos 从日志的多少二进制位置开始读
flush privileges --冲刷权限

 ⑵ 开启从服务器

start slave;

  ⑶ 查看从服务器状态

show slave status\G;

发现一条error(设置主从之后从服务器的探针会一直去尝试连接主服务器,每60S探测一次),说明主从失败

分析原因,防火墙之前我们已经禁用了,考虑两台服务器是否能 ping 通,3306端口是否被禁用

相互ping (主ping从 : ping 192.168.2.199)(从 ping 主 : ping 192.168.2.187) 发现可以 ping 通

然后主从分别查看端口 3306 占用情况


发现端口并没有占用,再次关闭防火墙,重启服务,重启Mysql 再次查看状态  show slave status\G; 主从OK


六 丶 测试主从

  ① 主服务器创建一张表

  

 ② 插入一条数据

 

③  查看从服务器 

 

④ 测试OK,其他如 增删改查 测试也是没问题的,主从搭建完毕

  当然你还可以为从服务器分配具体的权限,比如只能允许读,写,改

  eg. 授权代码如下,此处就不一一介绍了:

grant all/create/drop/insert/delete/update/select on *.* to lili@'%' identified by password
--为lili用户授予在任何库任何表的 所有/创建/删除/插入/删除/更新/查询 权限

七 丶逻辑层面的读写分离

<?php
namespace Mysql;
use think\Controller;
use think\Db;
class Index extends Controller
{   
    $master = '192.168.2.187';
    $slave1 = '192.168.2.199';
    // $slave2 = '';
    // $slave3 = '';
    // ...
    /**
    * 判断读还是写操作 读操作连接主服务器
    **/
    public function query()
    {

    }
    /**
    * 其他操作连接从服务器
    */
    public function insert()
    {

    } 
    public function update()
    {

    }
    public function delete()
    {

    }
}

搭建多台从服务器,在逻辑层面实现读写分离,当然这只是最简单的一种,后期有机会和大家分享利用集群中间件 

mysql_pxoxy,amoeba 来实现读写分离

注 : MySQL可以一主多从,主主复制,但不可一从多主

猜你喜欢

转载自blog.csdn.net/anphper/article/details/80255177