MySQL数据库(五)——主从复制与读写分离

主从复制与读写分离

一、数据库主从复制

主从复制就是MySQL主服务器和MySQL从服务器进行数据同步(从服务器同步主服务器的数据)

原理:1.Master在每个事务更新数据完成前,在二进制日志中记录这些变化,写入二进制文件完成后通知存储引擎提交事务

           2.Slave从服务器将Master的Binary log复制到其中继日志,开启一个I/O线程,在Master主服务器上建立一个普通连接,从Master主服务器的二进制日志上读取事件,并记录到自己的中继日志上(会不断等待随着主服务器更新)

           3.SQL slave thread(SQL从线程)从中继日志上读取事件,重放这些事件,实现与Master主服务器同步

主从复制配置

1.实现主从服务器时间同步,3台服务器上安装mysql(查看之前的mysql安装笔记)

2.主服务器配置

配置修改mysql配置文件(记得重启mysql服务):vim /etc/my.cnf

给从服务器授权

grant replication slave on *.* to 'myslave'@'192.168.0.%' identified by '123456';

3.配置Slave从服务器(两台从服务器一致)

配置修改mysql配置文件(记得重启mysql服务):vim /etc/my.cnf

登录数据库:mysql -uroot -p123456

同步Master主服务器(同步之后记得重启数据库):

mysql>change master to master_host='192.168.0.101',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=572;

master_log_file:Master主服务器二进制日志名

master_log_pos:二进制日志位置变量

查看master_log_file和master_log_pos的值(在主服务器上查看,下图所示)

mysql> show master status;

补充:master_log_pos设置为0会自动获取master_log_pos的值

查看数据同步Slave的状态(下图所示)

mysql> show slave status\G

确保红线圈起来的两个值都是Yes

4.测试

在Master主服务器上创建一个库创建一个表添加数据,在从服务器上查看是否同步

Master主服务器:

Slave从服务器:

测试数据同步成功

二、数据库读写分离

读写分离离不开主从复制,是要在主从复制的基础上进行

好处:可以减轻缓解主服务器的工作压力

实现读写分离的两款软件:AmoebaMySQL-Proxy

配置环境如下图所示

Amoeba配置安装

Amoeba需要JDK的支持,是基于jdk1.5开发,建议最好使用jdk1.5或jdk1.6的版本

1.下载安装jdk

./jdk-6u14-linux-x64.bin

2.创建文件夹,把解压出来的文件移动到/usr/local/jdk1.6下

mkdir /usr/local/jdk1.6mv jdk1.6.0_14 /usr/local/jdk1.6

3.在/etc/profile文件里配置添加环境变量,运行该文件

vim /etc/profile

然后source /etc/profile

4.安装amoeba

解压到新建的amoeba文件夹下给予权限

tar zxf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/

chmod -R 755 /usr/local/amoeba/

启动(显示下图结果为安装成功)

5.三台数据库服务器上给予授权

mysql>grant all on *.* to test@'192.168.0.%' identified by '123456';

6.配置amoeba.xml配置文件

vim /usr/local/amoeba/conf/amoeba.xml

7.配置dbServers.xml配置文件

vim /usr/local/amoeba/conf/dbServers.xml

8.启动服务测试

/usr/local/amoeba/bin/amoeba start

测试在测试机上登录数据库

测试读写分离功能

Master主服务器创建一个库关闭两个Slave从服务器的slave功能,然后对两个从服务器写入不同的数据,去查看这个数据看是否实现读从服务器的功能,再写入数据,测试机会查询不到这条消息,因为关闭了slave从服务器的slave功能,没有同步

从服务器192.168.0.103

从服务器192.168.0.104

Master主服务器192.168.0.101

测试机测试

发现只能查询两个从服务器上的数据,只有在主服务器本机才能查询本机上的数据则成功

MySQL-Proxy安装与配置(源码包安装)

1.下载解压安装包

tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz

mv mysql-proxy-0.8.5-linux-el6-x86-64bit /usr/local/mysql-proxy

2.创建存放配置文件和日志的目录

cd /usr/local/mysql-proxymkdir logsmkdir conf

3.创建修改配置文件和启动脚本

vim /usr/local/mysql-proxy/conf/mysql-proxy.conf

[mysql-proxy]
user=root
proxy-address=0.0.0.0:3306                   \\所有IP的3306端口
proxy-backend-addresses=192.168.0.101:3306           \\设置master的ip,写数据
proxy-read-only-backend-addresses=192.168.0.103:3306     \\设置slave的ip,读数据
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua  \\脚本所在位置
log-file=/usr/local/mysql-proxy/logs/msyql-proxy.log         \\日志存放位置
log-level=debug             \\日志模式
daemon=true                      \\打入后台
keepalive=true

4.修改管理进程的脚本

vim /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua

min_idle_connections = 1,
max_idle_connections = 2,

5.设置配置文件权限并启动服务

chmod 660 /usr/local/mysql-proxy/conf/mysql-proxy.conf

/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf

6.查看端口并测试

netstat -antlp | grep mysql-proxy

登录数据库读写操作测试

发布了37 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/feili12138/article/details/104756887