1、主从复制的目的
MySQL集群用于同步数据,主服务器和从服务器,从服务器上的数据是从服务器上进行同步,解决单点故障,提供链路冗余。
2、配置
- 要准备两台或多台MySQL服务器
#服务器配置
1、先下载环境
yum -y install vim net-tools wget
2、下载MySQL5.7版本
wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
#下载rpm包
rpm -ivh mysql80-community-release-el7-7.noarch.rpm
#修改源文件,因为是5.7版本所以需要修改参数
vim /etc/yum.repos.d/mysql-community.repo
:wq
3、生成缓存然后下载MySQL服务器
yum makecache
yum -y install mysql-community-server
#开启MySQL服务
systemctl start mysqld
#查找MySQL的原始密码
grep "password" /var/log/mysqld.log
4、进入MySQL修改密码
mysql -uroot -pB0iWmhtzxB/Y(密码是搜索出来的,每个人都不一样)
#修改密码,密码必须符合复杂性要求
alter user user() identified by 'Woniu.123';
#刷新
flush privileges;
-
保证两台服务器的时间一致,在主服务器上安装时间同步服务器(ntp服务),使用从服务器去和主服务器的时间进行同步
主:
#下载时间服务器
yum -y install ntp
#编辑主服务器的时间文件
vim /etc/ntp.conf
#在最后一行下添加
server 127.127.1.0
fudge 127.127.1.0 stratum 8
:wq#保存
#开启时间服务器
systemctl start ntpd
从:
#下载时间服务器
yum -y install ntp
#同步时间
ntpdate 192.168.137.130(主服务器IP)
- 开始主服务器配置
#在主配置文件中添加内容
vim /etc/my.cnf
#在最后一行下方添加
server-id = 11 #主服务器的ID标识
log_bin = master-bin #主服务器中生成二进制日志的名字前缀
log-slave-updates = true #允许从服务器来读取二进制日志(进行更新):wq
#重启MySQL服务
systemctl restart mysqld
#在MySQL中授权同步的用户,授权的权限是replication slave权限,表示允许进行复制
mysql -uroot -pWoniu.123
grant replication slave on *.* to 'myslave'@'192.168.137.%' identified by 'Woniu.123';
flush privileges;
#查看主服务器状态
show master status;
- 进行从服务器配置
#在从配置文件中添加内容
vim /etc/my.cnf
#在最后一行下添加
server-id = 22 #从服务器的ID标识
relay-log = relay-log-bin #中继日志的文件名前缀
relay-log-index = slave-relay-bin.index #专门用来记录中继日志
:wq#重启MySQL服务器
systemctl restart mysqld
#在从服务器中开始同步主服务器
change master to master_host='192.168.137.130',master_user='myslave',master_password='Woniu.123',master_log_file='master-bin.000001',master_log_pos=1016;
#开启从服务
start slave;
#查看从服务器状态
show slave status\G;
显示如此代表成功了
二、读写分离
1、读写分离的目的
-
读写分离解决的是负载(将写的操作固定在主服务器上,度的操作固定在从服务器上)
2、部署amoeba实现读写分离
- 部署jdk1.6版本,需要java环境
#下载jdk1.6
chmod +x jdk-6u14-linux-x64.bin
#开始执行文件
./jdk-6u14-linux-x64.bin #一直空格,然后yes,最后回车
#将文件移动到/usr/local/jdk1.6目录下
mv jdk1.6.0_14/ /usr/local/jdk1.6
#添加java环境
vim /etc/profile
#在最后一行下添加
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/bin
export AMOEBA_HOME=/usr/local/amoeba/
export PATH=$PATH:$AMOEBA/bin#立刻执行文件
source /etc/profile
- 部署amoeba,使用的是2.2.0版本
#下载amoeba
amoeba free download - SourceForgeamoeba free download. amoeba Amoeba is a proxy that sits between your client and DB server(s) that can monitor, analyze or transf
https://sourceforge.net/directory/?q=amoeba#在/usr/local/目录下创建amoeba目录
mkdir /usr/local/amoeba
#将amoeba解压到创建的目录下
tar zxf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
-
在主服务器上登录MySQL,授权用户给amoeba服务器使用
grant all on *.* to 'test'@'192.168.137.131' identified by 'Woniu.123';
flush privileges;
- 修改amoeba主配置文件
vim /usr/local/amoeba/conf/amoeba.xml
-
修改amoeba的后端MySQL数据库服务器配置文件
vim /usr/local/amoeba/conf/dbServers.xml
-
启动amoeba服务器
/usr/local/amoeba/bin/amoeba start
- 验证
#先查看端口有没有开启
#需要一台客户端机器,在客户端上连接amoeba服务器,用navicat连接
连接名:192.168.137.131(amoeba服务器IP)
主机:192.168.137.131(amoeba服务器IP)
端口:8066
用户名:amoeba
密码:Woniu.123