Mysql主从复制与读写分离案例

一、主从复制读写分离
1、主从复制的作用和特点
1)主从复制的作用
保证数据库数据的稳定性
2)主从复制的特点
需要开启二进制日志
从服务器监听主服务器二进制日志变化
将主服务器数据复制到从服务器上
主服务器故障数据不会丢失
2、读写分离
1)读写分离的作用
支持高并发合理分担负载任务
2)读写分离的特点
需要使用amoeba代理实现读写分离
客户端将写入数据提交到主mysql服务器
客户端将查询数据提交到从mysql服务器
读写分离实现力量负载分担增强服务稳定性支持高并发访问

配置主从复制,案例环境:

四台Linux服务器,一台客户端

一台master:配置主服务器,安装MySQL

两台slaves:分别安装MySQL

一台amoeba代理:安装amoeba代理

一台客户端:安装MySQL

推荐思路:

1)配置主从复制,安装NTP服务器,修改主配置文件

2)配置主MySQL服务器,修改主配置文件

3)创建主从复制账户名字为slave密码为[email protected]

4)配置从服务器,修改从MySQL主配置文件

5)设置从Master同步数据,启动从服务器

6)读写分离配置安装JDK

7)配置amoeba服务器,配置环境变量加载jdk和amoeba

8)配置amoeba登录MySQL读取和写入数据权限账户

9)修改amoeba主配置文件设置客户端访问amoeba账户密码

10)将MySQL主从服务器添加amoeba中,启动amoeba服务运行到后台

11)客户端测试连接amoeba,验证主从复制,读写分离

一.1.安装ntp服务器

[[email protected]~]# yum -y install ntp

2)修改ntp主配置文件

[[email protected]~]# vim /etc/ntp.conf

restrict 192.168.100.0 mask 255.255.255.0 nomodify notrap

server 127.127.1.0

fudge 127.127.1.0 stratum 8

3)设置服务开机自动启动

[[email protected]~]# systemctl start ntpd

[[email protected]~]# systemctl enable ntpd

4)从MySQL服务器同步时间

[[email protected]~]# ntpdate 192.168.100.10

2.编译安装 mysql 数据库系统
1)、创建管理 mysql 的组及用户

[[email protected]~]# groupadd mysql

[[email protected]~]# useradd -M -s /sbin/nologin mysql -g mysql

2)、安装 MySQL 依赖程序 ncurses-devel

[[email protected]~]# mount /dev/cdrom /mnt/

mount: /dev/sr0 写保护,将以只读方式挂载

[[email protected]~]# yum -y install ncurses-devel

3)、更换镜像文件、解压缩编译 MySQL 工具 cmake

[[email protected]~]# umount /mnt/

[[email protected]~]# mount /dev/cdrom /mnt/

mount: /dev/sr0 写保护,将以只读方式挂载

[[email protected]~]# tar zxvf /mnt/cmake-2.8.6.tar.gz -C /usr/src/

4)、配置 cmake

[[email protected]~]# cd /usr/src/cmake-2.8.6/

[[email protected] cmake-2.8.6]# ./configure

5)、编译安装 cmqke 程序

[[email protected] cmake-2.8.6]# gmake && gmake install

6)、解压 mysql 程序

[[email protected]~]# tar zxvf /mnt/mysql-5.5.22.tar.gz -C /usr/src/

7)、配置 mysql 程序

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql
-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
-DWITH_EXTRA_CHARSETS=all -DSYSCONFDIR=/etc
在这里插入图片描述

8)、编译安装 mysql 程序

[[email protected] mysql-5.5.22]# make && make install

9)、设置安装目录数据的所有者

[[email protected] ~]# chown -R mysql:mysql /usr/local/mysql/

10)、生成 mysql 服务配置文件

[[email protected]]# cp support-files/my-medium.cnf /etc/my.cnf

cp:是否覆盖"/etc/my.cnf"? y

11)、优化执行命令

[[email protected]~]# vim /etc/profile

/etc/profile

PATH="$PATH:/usr/local/mysql/bin/"

[[email protected]~]# source /etc/profile

12)、生成 mysql 服务控制文件

[[email protected] mysql-5.5.22]# cp support-files/mysql.server /etc/init.d/mysqld

13)、设置服务的执行权限

[[email protected]
~]# chmod +x /etc/init.d/mysqld

14)、添加系统服务

[[email protected]~]# chkconfig --add mysqld

[[email protected]~]# chkconfig --level 35 mysqld on

15)、初始化管理数据的账户数据库位置和数据位置

/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

在这里插入图片描述

16)、启动 mysql 服务

[[email protected]~]# systemctl start mysqld

17)、监听 mysql 端口
在这里插入图片描述

18)、为 mysql 数据库设置密码

[[email protected]~]# mysqladmin -u root password ‘[email protected]

三台linux都安装MySQL数据库,命令一样

3.配置主MySQL服务器
1)修改MySQL主配置文件

[[email protected]~]# vim /etc/my.cnf

log-bin=mysql-bin

log-slave-updates = true

server-id = 10

重启MySQL数据库

[[email protected]~]# systemctl restart mysqld

2)登录数据库创建主从复制账户名字为slave密码为[email protected]

[[email protected]~]# mysql -u root -p

mysql> grant replication slave on . to ‘slave’@‘192.168.100.%’ identified by ‘[email protected]’;

3)查看Master状态

mysql> show master status;
在这里插入图片描述

4.配置从服务器
1)修改从MySQL主配置文件

[[email protected] ~]# vim /etc/my.cnf

log-bin=mysql-bin

relay-log=relay-log-bin

relay-log-index=relay-slave-bin.index

server-id = 11

2)重新启动数据库服务

[[email protected]~]# systemctl restart mysqld

3)登录数据库设置从Master同步数据

[[email protected]~]# mysql -uroot [email protected]

mysql>change master to
master_host=‘192.168.100.10’,master_user=‘slave’,master_password=‘[email protected]’,master_log_file=‘mysql-bin.000004’,master_log_pos=263;

4)启动从服务器

mysql> start slave;

5)查看从服务器

mysql> show slave status\G;
在这里插入图片描述

配置第三台从服务器

[[email protected]~]# vim /etc/my.cnf

log-bin=mysql-bin

relay-log=relay-log-bin

relay-log-index=relay-slave-bin.index

server-id = 12

重新启动数据库服务

[[email protected]~]# systemctl restart mysqld

登录数据库设置从Master同步数据

[[email protected]~]# mysql -uroot [email protected]

mysql>change master to
master_host=‘192.168.100.10’,master_user=‘slave’,master_password=‘[email protected]’,master_log_file=‘mysql-bin.000004’,master_log_pos=263;

启动从服务器,第三台配置完成

mysql> start slave;

验证主从复制,在主上面创建benet库,去从服务器上去查看

mysql> create database benet;

[[email protected]~]# mysql -uroot [email protected]

mysql> show databases;

在这里插入图片描述

二.读写分离

1.配置安装jdk
1)创建安装JDK目录

[[email protected]~]# mkdir /usr/local/jdk

2)配置安装JDK,使用Linux光盘

[[email protected]~]# cp /mnt/jdk-6u14-linux-x64.bin /usr/local/jdk/

[[email protected]~]# cd /usr/local/jdk/

[[email protected] jdk]# ./jdk-6u14-linux-x64.bin

[[email protected] jdk]# mv ./jdk1.6.0_14/* ./

3)设置JDK权限

[[email protected]~]# chmod -R 755 /usr/local/jdk/

2.配置amoeba服务器
1)创建amoeba目录

[[email protected]~]# mkdir /usr/local/amoeba

2)解压缩amoeba

[[email protected]~]# tar zxvf /mnt/amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/

3)添加执行权限

[[email protected]~]# chmod -R 755 /usr/local/amoeba/

4)配置环境变量加载jdk和amoeba

[[email protected]~]# vim /etc/profile.d/java.sh

export JAVA_HOME=/usr/local/jdk/

export CLASSPATH= C L A S S P A T H : CLASSPATH: JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH= J A V A H O M E / l i b : JAVA_HOME/lib: JAVA_HOME/jre/bin: P A T H : PATH: HOME/bin

exportmAMOEBA_HOME=/usr/local/amoeba/

export PATH= P A T H : PATH: AMOEBA_HOME/bin

5)更新环境变量

[[email protected]~]# source /etc/profile.d/java.sh

[[email protected]~]# java -version 没配置之前是1.8.0版本
java -version
java version “1.6.0_14”

3.主服务器配置amoeba登录MySQL读取和写入数据权限账户

mysql> grant all on . to ‘bob’@‘192.168.100.%’ identified by ‘[email protected]’;

4.修改amoeba主配置文件设置客户端访问amoeba账户密码

[[email protected] ~]# vim /usr/local/amoeba/conf/amoeba.xml
在这里插入图片描述

将Mysql主服务器添加amoeba中

[[email protected]~]# vim /usr/local/amoeba/conf/dbServers.xml
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
启动amoeba服务运行到后台
moeba/bin/amoeba start&

[[email protected] ~]# netstat -anptu | grep 8066
在这里插入图片描述
在这里插入图片描述

7.客户端测试连接amoeba

安装MySQL数据库

[[email protected]~]# yum -y install mysql

1)登录amoeba

[[email protected]~]# mysql -uamoeba [email protected] -h 192.168.100.40 -P 8066

2)创建数据库,测试写入去其他服务器查看

MySQL [(none)]> create database bdqn;
在这里插入图片描述

3)创建表

MySQL [bdqn]>create table student (姓名 char(10),性别 char(5),年龄 char(5),电话 char(11),primary key (电话));

4)插入数据

MySQL [bdqn]> insert into bdqn.student value (‘王超’,‘男’,‘18’,‘13581665204’);

在从服务器上面查看,可以查看到,停止服务,继续在aomeba写入数据在查看验证读

在这里插入图片描述

mysql> stop slave;

MySQL [bdqn]> insert into bdqn.student value (‘张航’,‘男’,‘18’,‘13581665201’);
在这里插入图片描述

说明查是在从服务器