mysql主从复制以及读写分离集群

先提前说一下我的配置,使用VMware虚拟机,安装了CentOS7.使用NAT模式。有一个master主机,一个slave这两个做主从复制,有一个Proxy主机,与master,slave做读写分离。我在我本地 /用户/system32/drivers/etc/hosts中配置了我的主机IP与主机名的映射

mysql主从复制以及读写分离集群

读写分离是在主从复制的基础上建立的。所有我们先来做主从复制。

主从复制

  • 关闭两台主机防火墙

systemctl disable firewalld

systemctl stop firewalld

  • 修改Master主机

修改master主机的IP以及hostname.

vim  /etc/hostname   修改的hostname与你在hosts文件中配置的名字一样,用于方便ssh用主机名连接

vim /etc/sysconfig/network-scripts/ifcfg-ens33  修改你的IP设置为静态IP

mysql主从复制以及读写分离集群

  • 修改Master主机的my.cnf

vim  /etc/my.cnf  

[mysqld]

#port=3306

character-set-server=utf8

log-bin=/var/mysql/log/mysql-bin.log

server-id=1

  • 创建/var/mysql/log目录

mysql-bin.log会自动生成。但是前边的目录是没有的我们需要自己创建目录 

mkdir -p /var/mysql/log

  • 修改/var/mysql目录的所有者

chown -R mysql:mysql ./mysql

  • 重启Master的mysqld服务

systemctl restart mysql

  • 修改Slave主机

修改他的主机名和IP地址这里就不在说了,和master一样。

  • 修改Slave主机的my.cnf

[mysqld]

#port=3306

character-set-server=utf8

server-id=2

  • 修改Slave主机中MySQL的UUID

UUID,通用唯一识别码

cat /var/lib/mysql/auto.cnf  我们发现master和slave的UUID是一样的。所有我们需要改变一台主机的UUID,把slave生成UUID的文件进行拷贝删除,重启时他会自动在生成不同的UUID

mv /var/lib/mysql/auto.cnf /var/lib/mysql/auto.cnf.bak

重启Slave的mysqld服务  systemctl restart mysql

  • Master授权Slave复制权限

登录Master的mysql   mysql -uroot -p123456

授权   grant replication slave on *.* to 'root'@'192.168.181.135' identified by '123456';

重启Master的mysqld服务  systemctl restart mysqld

再次登录Master的mysql  mysql -uroot -p123456

查看master状态  show master status;

mysql主从复制以及读写分离集群

  • Slave指定Master

登录Slave的mysql mysql -uroot -p123456

  • 指定Master

mysql> change master to

    -> master_host='192.168.181.135', master_user='root', master_password='123456',

    -> master_log_file='mysql-bin.000006', master_log_pos=154;

重启Slave的mysqld服务  systemctl restart mysqld

登录Slave的mysql  mysql -uroot -p123456

  • 开启Slave

start slave;

  • 查看Slave状态

登录MySQL,show slave status \G; 出现waiting for master to seng event 就代表成功啦。就可以连接虚拟机本地做测试了。

mysql主从复制以及读写分离集群

 

 

读写分离集群

  • 配置Proxy主机

此主机无需mysql环境,所有克隆一台空白的主机就行了。然后进行主机名和IP地址的修改,与前边一样。

  • MySQL Proxy的安装

MySQL Proxy下载

在官网下载mysql proxy.官网没有centos的Proxy可以下载Red的,而且没有7这个版本。我们就用centos6这个版本。

你可以选择下载到本地然后通过 rz 上传到Linux上,也可以通过wget 下载地址 下载。 

mysql主从复制以及读写分离集群

  • 解压安装包

我的安装包都是放在 /usr/tools目录下的,解压到 /usr/apps下

tar mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz  -C  /usr/apps

  • 创建软链接

ln -s mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz/  mysqlq-proxy

mysql主从复制以及读写分离集群

  • 修改/etc/profile

修改profile文件,文件最后添加这两行配置mysql主从复制以及读写分离集群

然后在重新加载配置文件 source /etc/profile

  • MySQL Proxy的配置

在/etc目录下,创建mysql-proxy.cnf文件

mysql主从复制以及读写分离集群

创建logs-file的目录 mkdir -p /usr/apps/mysql-proxy/logs

  • 修改mysql-proxy.cnf的访问权限

mysql主从复制以及读写分离集群我们可以看到现在mysql-proxy.cnf的权限是  -rw-r--r-- 读写 读 读 我们需要的对其有读写权限。而 rw 对应二进制为110 ,我们需要的权限是-rw-rw---- 对应的十进制为660     chmod 660 /etc/mysql-proxy.cnf

mysql主从复制以及读写分离集群

 

  • 修改/usr/apps/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua

mysql主从复制以及读写分离集群

 

  • 启动mysql-proxy服务器

mysql-proxy --defaults-file=/etc/mysql-proxy.cnf

 

 

这就OK了,就可以连接虚拟机在本地进行测试了mysql -h192.168.181.144  -P4040 -uroot -p123456