一 丶为什么要搭建主从服务器和实现读写分离
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用户授予在任何库任何表的 所有/创建/删除/插入/删除/更新/查询 权限
七 丶逻辑层面的读写分离
搭建多台从服务器,在逻辑层面实现读写分离,当然这只是最简单的一种,后期有机会和大家分享利用集群中间件
mysql_pxoxy,amoeba 来实现读写分离
注 : MySQL可以一主多从,主主复制,但不可一从多主