主从数据库是通过mysql自带的功能完成的,mysql版本是5.7.7
主数据库:192.168.1.121
从数据库:192.168.1.122
统一主从数据的远程登陆账户密码,因为后面amoeba完成读写分离的需要这样
我就用root了,密码为123456
在主数据的配置文件的[mysqld]下面添加
#主数据库配置
log-bin=mysql-bin #打开mysql二进制日志
server-id=1 #设置mysql_id主从不能相同,不能和其他的服务器相同
binlog-do-db=test #设置二进制日志记录的库,多个数据库可以
#binlog-do-db=test1 #多个数据库像这样复制一份就好了
binlog-ignore-db=mysql #设置二进制日志不记录的库
sync_binlog=1
从数据库配置
在从数据库的配置文件的
#mysql主从配置 从数据库配置
log-bin=mysql-bin
server-id=2
replicate-do-db=test #设置同步的库
replicate-ignore-db=mysql #设置不同步的库
log-slave-updates #同步后记录二进制日志
slave-skip-errors=all
sync_binlog=1
slave-net-timeout=60
在主数据库里面获得master的数据
mysql> show master status\G
*************************** 1. row ***************************
File: mysql-bin.000002 #这个会用到
Position: 913 #这个会用到
Binlog_Do_DB: test
Binlog_Ignore_DB: mysql
Executed_Gtid_Set:
1 row in set (0.00 sec)
在从数据库里面设置主数据库
mysql>stop slave;
mysql>change master to master_host='192.168.1.121',master_user='root',
master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=913;
mysql>start slave;
在从数据库查看是否成功,标记的两个都是yes就是好了
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.121
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 375
Relay_Log_File: 192-relay-bin.000004
Relay_Log_Pos: 541
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes #这个是yes
Slave_SQL_Running: Yes #这个是yes
Replicate_Do_DB: test
Replicate_Ignore_DB: mysql
...后面太长,省略了
我在这里碰到一个问题
mysql> show slave status\G;
*************************** 1. row ***************************
...前面太长省略
Slave_IO_Running: No
...省略
Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
...省略
因为我是直接复制的虚拟机,所以mysql的uuid相同了,把数据目录的auto.conf文件删除就ok了
下载jdk我是下载地址
根据版本下载,我下载的是 jdk-6u45-linux-x64.bin
安装
安装
#mkdir/usr/java/
//新建一个文件夹,把安装包给拷贝到这个文件夹下面
#chmod755jdk-6u25-linux-i586.bin
//给文件授权#
./jdk-6u25-linux-i586.bin//解压文件
配置jdk环境变量
#vim/etc/profile
//打开文件
在文件最后添加如下内容
######forjava
export JAVA_HOME=/usr/java/jdk1.6.0_45
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
#######
#source/etc/profile//重新执行一遍(有必要)
=============================================================================
测试JDK和AMOEBA_HOME是否设置成功
#java-version
//查看jdk版本验证java环境变量是否配置成功
javaversion"1.6.0_45"
安装amoeba
下载Amoeba并安装
#mkdir/usr/local/amoeba///创建文件夹
#cd/usr/local/amoeba///打开说创建的文件夹
#wget
http://sourceforge.net/projects/amoeba/files/Amoeba%20for%20mysql/2.x/amoeba-mysql-binary-2.1.0-RC5.tar.gz/download
//下载Amoeba文件
#md5sumamoeba-mysql-binary-2.1.0-RC5.tar.gz//校验MD5一般不需要
44f6708652a46f28a95338f35f5d4083amoeba-mysql-binary-2.1.0-RC5.tar.gz
#chmod755amoeba-mysql-binary-2.1.0-RC5.tar.gz//文件授权
#tar-zxvfamoeba-mysql-binary-2.1.0-RC5.tar.gz/解压文件
配置Amoeba环境变量
#vim/etc/profile
//打开文件
在结尾添加如下内容###amoeba
export AMOEBA_HOME=/usr/local/amoeba/
export PATH=$PATH:$AMOEBA_HOME/bin#######
配置 AMOEBA配置文件
配置mysql服务器的信息
vi /usr/local/amoeba/conf/dbServers.xml
...这一部分不需要改省略掉...
<dbServer name="abstractServer" abstractive="true">
<factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
<property name="manager">${defaultManager}property>
<property name="sendBufferSize">64property>
<property name="receiveBufferSize">128property>
#配置这部分的数据库服务器的mysql的账号和密码,端口
<property name="port">3306property>
<property name="schema">testproperty>
<property name="user">rootproperty>
<property name="password">123456property>
factoryConfig>
...这一部分不需要改省略掉...
#以下面的格式设置好mysql服务器的ip,设置好别名,别名不能一样,在其他地方会用到
<dbServer name="Master" parent="abstractServer">
<factoryConfig>
<property name="ipAddress">192.168.1.121property>
factoryConfig>
dbServer>
<dbServer name="Server1" parent="abstractServer">
<factoryConfig>
<property name="ipAddress">192.168.1.122property>
factoryConfig>
dbServer>
<dbServer name="Server2" parent="abstractServer">
<factoryConfig>
<property name="ipAddress">192.168.1.123property>
factoryConfig>
dbServer>
#这个比较特殊,用作轮询
<dbServer name="multiPool" virtual="true">
<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
#这个属性设置成1,代表的就是轮询,
<property name="loadbalance">1property>
#这个选项里面填上面几个设置的名字,会依次轮询填进去的服务器
<property name="poolNames">Server1,Server2property>
poolConfig>
dbServer>
...这一部分不需要改省略掉...
配置amoeba的信息
...这一部分不需要改省略掉...
#下面这部分设置连接amoeba的账号密码,通过mysql连接mysql的时候就填这里设置的账号的密码
<property name="authenticator">
class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">
<property name="user">rootproperty>
<property name="password">123456property>
<property name="filter">
class="com.meidusa.amoeba.server.IPAccessController">
<property name="ipFile">${amoeba.home}/conf/access_list.confproperty>
property>
property>
...这一部分不需要改省略掉...
下面这部分就是设置读写分离和负载均衡的
class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter">
<property name="ruleLoader">
class="com.meidusa.amoeba.route.TableRuleFileLoader">
<property name="ruleFile">${amoeba.home}/conf/rule.xmlproperty>
<property name="functionFile">${amoeba.home}/conf/ruleFunctionMap.xmlproperty>
property>
<property name="sqlFunctionFile">${amoeba.home}/conf/functionMap.xmlproperty>
<property name="LRUMapSize">1500property>
#默认连接的数据库
<property name="defaultPool">Masterproperty>
#DML操作的数据库,填主数据库就行了
<property name="writePool">Masterproperty>
#填设置了轮询的dbServer的名称
<property name="readPool">multiPoolproperty>
<property name="needParse">trueproperty>
这样就ok了,在这一步碰到问题
#amoeba start
The stack size specified is too small, Specify at least 160k
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
解决方法:
# vim amoeba
#修改58行的Xss参数:
DEFAULT_OPTS="-server -Xms1024m -Xmx1024m -Xss128k"
#修改为:
DEFAULT_OPTS="-server -Xms1024m -Xmx1024m -Xss256k"
参考:http://wenku.baidu.com/view/848d692e2e3f5727a4e96218.html?qq-pf-to=pcqq.c2c
http://blog.itpub.net/90618/viewspace-774894/