mysql数据库读写分离

 1.mysql的主从同步

环境 :  两台windows 系统 

ip : 主:192.168.1.147     从 : 192.168.1.133   两台电脑可以ping通

mysql版本: 5.6


2.首先配置主数据库 

1). 找到  c盘下的  C:\ProgramData\MySQL\MySQL Server 5.6\my.ini  文件。 一定要找 这个文件夹下的,找安装包下的没用!!!

2). 用editPlus 打开文件 ,改变以下的几项

1.Server-id = 1  这是数据库ID,此ID是唯一的,ID值不能重复,否则会同步出错;

  2.log-bin = mysql-bin 二进制日志文件,此项为必填项,否则不能同步数据;如果不取名字的话,那么就会以计算机的名字加编号来命名二进制文件;

  3.binlog-do-db = testcreate  需要同步的数据库,如果还需要同步另外的数据库,那么继续逐条添 加,如果不写,那么默认同步所有的数据库;

    4。binlog-ignore-db = mysql 不需要同步的数据库;


5.添加  grant file,select,replication slave on *.* to 'user'@'%' identified by 'root';  一个用户可以复制主数据库的数据,给用户加权限, 有的时候权限不够,后来的 slave_IO_Running:connecting  就会变成这样

6. show master status;  


会显示这个, pos, 1822

3.配置从数据库

1.与主数据库一样, 也配置那几个变量。  测试的时候,主库和从库得有相同的表,和库名

2.在从库执行以下命令   

 change master to

       -> master_host='192.168.1.147', //主库ip

       -> master_user='user',//主库给的 名字

       -> master_password='root', //主库允许的密码

       -> master_log_file='mysql-bin.000001', // file文件

       -> master_log_pos=1822;//pos号

3.重启mysql服务


4.验证是否同步。

执行show slave status\G;


如果得到这些, 那么恭喜你 mysql主从已经配置好了

可以利用sql文件 来检测你的主从同步是否好使。


5.配置完上面之后,我们可以利用阿里巴巴的开源项目 amoeba 来进行读写分离操作,

下载地址 : http://download.youkuaiyun.com/detail/nikotse/5667519

将 下载的文件解压 , 进入bin目录下。


6.配置 amoeba.xml 文件

<service name="Amoeba for Mysql" class="com.meidusa.amoeba.net.ServerableConnectionManager">
	<!-- port -->
	<property name="port">8066</property>
			
	<!-- 绑定的地址 ipAddress -->
	<!-- 
	<property name="ipAddress">127.0.0.1</property>
	 -->
			
<property name="manager">${clientConnectioneManager}</property>
	<property name="connectionFactory">
		<bean class="com.meidusa.amoeba.mysql.net.MysqlClientConnectionFactory">
			<property name="sendBufferSize">128</property>
			<property name="receiveBufferSize">64</property>
		</bean>
	</property>
<property name="authenticator">
	<bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">
		<-- 用户名--><span style="white-space: pre;"><-- 需要配置--></span>
		<property name="user">root</property>
		<property name="password">root</property>
		<-- amoeba密码--><span style="white-space: pre;"><-- 需要配置--></span>
		<property name="filter">
			<bean class="com.meidusa.amoeba.server.IPAccessController">
				<property name="ipFile">${amoeba.home}/conf/access_list.conf</property>
			</bean>
		</property>
	</bean>
</property>
</service>
7.配置dbService.xml
<dbServer name="abstractServer" abstractive="true">
<factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
<property name="manager">${defaultManager}</property>
<property name="sendBufferSize">64</property>
<property name="receiveBufferSize">128</property>
<-- 需要配置-->
<!-- mysql port -->
<property name="port">3306</property>
<!-- mysql schema -->
<property name="schema">repl</property>
<-- 需要配置-->
</factoryConfig>
<poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">
<property name="maxActive">500</property>
<property name="maxIdle">500</property>
<property name="minIdle">10</property>
<property name="minEvictableIdleTimeMillis">600000</property>
<property name="timeBetweenEvictionRunsMillis">600000</property>
<property name="testOnBorrow">true</property>
<property name="testOnReturn">true</property>
<property name="testWhileIdle">true</property>
</poolConfig>
</dbServer>
<dbServer name="server1"  parent="abstractServer">
<factoryConfig>
<-- 需要配置-->
<!-- mysql ip -->
<property name="ipAddress">192.168.1.147</property>
<property name="user">root</property>
<property name="password">123456</property>
<-- 需要配置-->
</factoryConfig>
</dbServer>
<dbServer name="server2"  parent="abstractServer">
<factoryConfig>
<-- 需要配置-->
<!-- mysql ip -->
<property name="ipAddress">192.168.1.133</property>
<!-- mysql user -->
<property name="user">root</property>
<property name="password">123456</property>
<-- 需要配置-->
</factoryConfig>
</dbServer>
 
  
9.配置 amoeba.xml
<queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter">
<property name="ruleLoader">
<bean class="com.meidusa.amoeba.route.TableRuleFileLoader">
<property name="ruleFile">${amoeba.home}/conf/rule.xml</property>
<property name="functionFile">${amoeba.home}/conf/ruleFunctionMap.xml</property>
</bean>
</property>
<property name="sqlFunctionFile">${amoeba.home}/conf/functionMap.xml</property>
<property name="LRUMapSize">1500</property>
<property name="defaultPool">server1</property>
<property name="writePool">server1</property>
<property name="readPool">server2</property>
<property name="needParse">true</property>
</queryRouter>

10. jdbc测试插入数据  我的数据库叫 repl

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBConnection {
	
	public static void main(String[] args) {
		String driver = "com.mysql.jdbc.Driver";
		// localhost指本机,也可以用本地ip地址代替,3306为MySQL数据库的默认端口号,“user”为要连接的数据库名
		String url = "jdbc:mysql://localhost:8066/repl";
		// 填入数据库的用户名跟密码
		String username = "root";
		String password = "root";
		String sql = "insert into user (id,username) values('5','xxxxxxx')";// 编写要执行的sql语句,此处为从user表中查询所有用户的信息
		try {
			Class.forName(driver);// 加载驱动程序,此处运用隐式注册驱动程序的方法
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		try {
			Connection con = DriverManager.getConnection(url, username, password);// 创建连接对象
			Statement st = con.createStatement();// 创建sql执行对象
			st.executeUpdate(sql);// 执行sql语句并返回结果集
			// 关闭相关的对象
			if (st != null) {
				try {
					st.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if (con != null) {
				try {
					con.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值