实现数据库的主备读写分离

##实现数据库的读写分离##
server1:master
server2:slaver
server3:mysql-proxy调度器
实现数据库的调度分离,可以减轻后台服务器压力,实现对数据库访问的读写分离,在实验中
server1为主服务端,写在server1上进行,而读在server2上实现,饰演环境为server1、
server上安装好数据库,并且可以正常的实现主从复制。

检查server1、server2的主从同步情况
server1上: mysql -p
Enter password:
mysql> show master status;
1 row in set (0.00 sec)

mysql> mysql> grant select,insert,update on westos.* to lp@’%’ identified by ‘Redhat-1’; ##给用户对wests库远程登陆、读写、更新权限##
在server2上: mysql -p
Enter password:
mysql> show slave status\G
mysql> set global read_only=1;

server3调度器的操作
yum install mysql
mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
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/ ##将插件移动到此目录下##
cd /usr/local/
ln -s mysql-proxy-0.8.5-linux-el6-x86-64bit/ mysql-proxy ##进行软链接##

在这里插入图片描述
在这里插入图片描述

cd mysql-proxy
mkdir conf ##主配置文件存放目录##
mkdir logs ##日志存放目录##
在这里插入图片描述
在这里插入图片描述
vim /usr/local/mysql-proxy/share/doc/mysql-proxyrw-splitting.lua ##读写分离策略配置文件##
cd conf
vim mysql-proxy.conf
[mysql-proxy]
user=root ##以root用户运行软件##
daemon=true ##打入后台##
proxy-address=172.25.2.3:3306 ##proxy地址##
proxy-backend-addresses=172.25.2.1:3306 ##可以写后端##
proxy-read-only-backend-addresses=172.25.19.2:3306 ##只读后端##
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua ##读写分离配置文件##
log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log ##日志存放##
log-level=debug ##日志级别##
keepalive=true ##持续连接##
cd logs/
ln -s /usr/local/mysql-proxy/bin/mysql-proxy /usr/local/bin/
chmod 660 /usr/local/mysql-proxy/conf/mysql-proxy.conf ##如果此插件的权限过大则mysql-proxy开启失败##
/usr/local/mysql-proxy/bin/mysql-proxy --plugins=proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf ##开启调用的插件和主配置文件位置##
yum install net-tools -y
netstat -antlp ##mysql-proxy:3306
在这里插入图片描述

测试在物理机上:
mysql -h 172.25.19.3 -u www -p ##远程登陆
Enter password:

yum install lsof -y
lsof -i :3306 ##查看3306端口的连接情况(server3有连接)

yum install lsof -y
lsof -i :3306
第一、二次连接都是连接到了server1
从第三次开始负载均衡

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java连接主备数据库进行读写分离可以使用JDBC的方式进行连接,具体步骤如下: 1. 引入JDBC驱动程序,例如MySQL Connector/J; 2. 创建主库和备库的连接URL,格式为jdbc:mysql://host:port/database,其中host和port分别为主库和备库的IP地址和端口号,database为数据库名称; 3. 创建主库和备库的连接用户名和密码; 4. 根据需要发送读请求或写请求,使用Connection、PreparedStatement、ResultSet等JDBC对象进行操作。 下面是一个使用Java连接主备数据库进行读写分离的示例代码: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class MySQLReadWriteSplittingExample { public static void main(String[] args) { String masterUrl = "jdbc:mysql://master-server:3306/mydatabase"; String slaveUrl = "jdbc:mysql://slave-server:3306/mydatabase"; String user = "myuser"; String password = "mypassword"; Connection masterConnection = null; Connection slaveConnection = null; PreparedStatement statement = null; ResultSet resultSet = null; try { // 连接主库 masterConnection = DriverManager.getConnection(masterUrl, user, password); // 发送读请求 statement = masterConnection.prepareStatement("SELECT * FROM mytable"); resultSet = statement.executeQuery(); // 处理查询结果 while (resultSet.next()) { int id = resultSet.getInt("id"); String name = resultSet.getString("name"); System.out.println("ID: " + id + ", Name: " + name); } // 连接备库 slaveConnection = DriverManager.getConnection(slaveUrl, user, password); // 发送写请求 statement = slaveConnection.prepareStatement("INSERT INTO mytable (id, name) VALUES (?, ?)"); statement.setInt(1, 1); statement.setString(2, "John Doe"); statement.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } finally { // 释放资源 try { if (resultSet != null) { resultSet.close(); } if (statement != null) { statement.close(); } if (masterConnection != null) { masterConnection.close(); } if (slaveConnection != null) { slaveConnection.close(); } } catch (SQLException e) { e.printStackTrace(); } } } } ``` 在上面的示例代码中,我们创建了主库连接和备库连接的URL、用户名和密码,然后分别使用这两个连接对象进行了读操作和写操作。由于使用的是两个独立的连接对象,因此需要分别释放资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值