mysql 5.5 主从配置

# mysql 5.5 主从配置

一. 分别在需要部署数据库的服务器上安装同样的版本数据库
服务器一(主):192.168.1.228
服务器二(从):192.168.1.229
服务器三(从):192.168.1.230
服务器四(路由):192.168.1.226

二. 配置主服务器
服务器一(主):192.168.1.228
1.修改配置文件
vim /etc/mysql/my.cnf

server-id=1 #设置服务器id,为1表示主服务器,注意:如果原来的配置文件中已经有这一行,就不用再添加了。
sync-binlog = 1 #
log_bin=mysql-bin #启动MySQ二进制日志系统,注意:如果原来的配置文件中已经有这一行,就不用再添加了。
binlog-do-db=osyunweidb #需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行
binlog-ignore-db=mysql #不同步mysql系统数据库
binlog-ignore-db = performance_schema
binlog-ignore-db = information_schema


====================my.cnf============================================================
log-bin=mysql-bin
log-bin-index=mysql-bin.index
# binary logging format - mixed recommended
binlog_format=mixed
binlog-do-db=edxapp
binlog-do-db=ora
binlog-do-db=xqueue
binlog-do-db=discern
binlog-ignore-db=mysql
binlog-ignore-db = performance_schema
binlog-ignore-db = information_schema
# required unique id between 1 and 2^32 - 1
# defaults to 1 if master-host is not set
# but will not function as a master if omitted
server-id = 1
sync-binlog = 1
=====================my.cnf=============================================================

ps:
sync_binlog=1 or N
This makes MySQL synchronize the binary log’s contents to disk each time it commits a transaction
默认情况下,并不是每次写入时都将binlog与硬盘同步。因此如果操作系统或机器(不仅仅是MySQL服务器)崩溃,有可能binlog中最后的语句丢 失了。要想防止这种情况,你可以使用sync_binlog全局变量(1是最安全的值,但也是最慢的),使binlog在每N次binlog写入后与硬盘 同步。即使sync_binlog设置为1,出现崩溃时,也有可能表内容和binlog内容之间存在不一致性。如果使用InnoDB表,MySQL服务器 处理COMMIT语句,它将整个事务写入binlog并将事务提交到InnoDB中。如果在两次操作之间出现崩溃,重启时,事务被InnoDB回滚,但仍 然存在binlog中。可以用--innodb-safe-binlog选项来增加InnoDB表内容和binlog之间的一致性。(注释:在MySQL 5.1中不需要--innodb-safe-binlog;由于引入了XA事务支持,该选项作废了),该选项可以提供更大程度的安全,使每个事务的 binlog(sync_binlog =1)和(默认情况为真)InnoDB日志与硬盘同步,该选项的效果是崩溃后重启时,在滚回事务后,MySQL服务器从binlog剪切回滚的 InnoDB事务。这样可以确保binlog反馈InnoDB表的确切数据等,并使从服务器保持与主服务器保持同步(不接收 回滚的语句)。

2. 重启
service mysql restart

3. 给权限
mysql> grant replication slave on *.* to 'root'@192.168.1.229 identified by 'sstc503';
mysql> grant replication slave on *.* to 'root'@192.168.1.230 identified by 'sstc503';

mysql> grant replication slave on *.* to 'sstc'@192.168.1.229 identified by 'sstc503';
mysql> grant replication slave on *.* to 'sstc'@192.168.1.230 identified by 'sstc503';
#刷新权限
mysql> flush privileges;
#查看主库情况,出现下面结果说明配置成功
mysql> show master status;
+------------------+----------+---------------------------+---------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+---------------------------+---------------------------------------------+
| mysql-bin.000002 | 335 | edxapp,ora,xqueue,discern | mysql,performance_schema,information_schema |
+------------------+----------+---------------------------+---------------------------------------------+
1 row in set (0.00 sec)


三. 配置从库
服务器二(从):192.168.1.229
配置从服务器主要区别就一个: server-id
需要多少个,按数字排序,其他的安装,配置都一样

1.修改配置文件
vim /etc/mysql/my.cnf

========================================================
server-id=2
log-bin = mysql-bin
relay-log-index = slave-relay-bin.index
relay-log = slave-relay-bin
replicate-do-db=edxapp
replicate-do-db=ora
replicate-do-db=xqueue
replicate-do-db=discern
replicate-ignore-db=mysql
replicate-ignore-db=performance_schema
replicate-ignore-db=information_schema

sync_master_info = 1
sync_relay_log = 1
sync_relay_log_info = 1
======================================================

2. 这个mysql指令里有文件名和位置的指明
mysql> change master to master_host='192.168.1.228',master_user='root',master_password='sstc503', master_log_file='mysql-bin.000003',master_log_pos=26270165;

#开始同步线程
mysql> start slave;
#查看开启情况
mysql> show slave status \G #没有分号
如果出现:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
表示主从同步进行中

mysql> stop slave;


3. 同样方式, 配置服务器三(从):192.168.1.230

ps: 先配置主从,再建数据库,否则会出现错误,所以在做主从之前现在把数据库导出来,等建立完主从,在master上导入就行,之后从库就会同步了主库导入的数据库

如果出现错误了,现在停掉从库,从新连接,从新连接master_log_file 和 master_log_pos 都会改变,去主库查看: show master status;


ps:
# /etc/init.d/mysql restart
ERROR! MySQL server PID file could not be found!
Starting MySQL.. ERROR! The server quit without updating PID file (/usr/local/mysql/mysql.pid).

解决:删除 data 目录下添加节点时生成的文件, 然后重启

四. 安装 amoeba
服务器四(路由):192.168.1.226

下载 amoeba
下载 JDK
1. 安装JDK

mkdir /usr/lib/jvm
tar zxvf jdk-7u45-linux-x64.tar.gz -C /usr/lib/jvm

########
vim /etc/environment
PATH="/usr/lib/jvm/jdk1.7.0_45/bin"
JAVA_HOME="/usr/lib/jvm/jdk1.7.0_45"
JRE_HOME="/usr/lib/jvm/jdk1.7.0_45/jre"
CLASSPATH=".:/usr/lib/jvm/jdk1.7.0_45/lib"


######################
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_45
export JRE_HOME=/usr/lib/jvm/jdk1.7.0_45/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH


#######
update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.7.0_45/bin/java 300
update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.7.0_45/bin/javac 300
update-alternatives --config java

root@edxserver01:/usr/lib/jvm/jdk1.7.0_45# java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)

2. 安装amoeba
# wget http://sourceforge.net/projects/amoeba/files/Amoeba%20for%20mysql/2.2.x/amoeba-mysql-binary-2.2.0.tar.gz/download
# mkdir /usr/local/amoeba
# tar xf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba

3. 配置 amoeba
进入amoeba目录下会看到一下几个目录
bechmark:压力测试
bin:脚本文件
conf:配置文件
lib:库

在conf文件下有许多配置文件,这里实现读写分离的效果,只需要两个文件即可 amoeba.xml和dbserver.xml。在amoeba.xml文件下需要修改的配置为:


##################在 dbserver.xml文件中需要修改的配置为:
<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的端口
<!-- mysql schema -->
<property name="schema">amoeba</property> #后端mysql的默认连接数据库
<!-- mysql user -->
<property name="user">root</property> #连接后端mysql的账户
<!-- mysql password
<property name="password">password</property>
-->
<property name="password">amoebapass</property> #连接后端mysql使用的密码
</factoryConfig>

<dbServer name="server1" parent="abstractServer">
<factoryConfig>
<!-- mysql ip -->
<property name="ipAddress">192.168.1.228</property> #后端MySQL的ip
</factoryConfig>
</dbServer>

<dbServer name="server2" parent="abstractServer">
<factoryConfig>
<!-- mysql ip -->
<property name="ipAddress">192.168.1.229</property>
</factoryConfig>
</dbServer>

<dbServer name="server3" parent="abstractServer">
<factoryConfig>
<!-- mysql ip -->
<property name="ipAddress">192.168.1.230</property>
</factoryConfig>
</dbServer>

# 数据库池, server2,server2,server3 是以 2 2 3 这样的方式轮询
<dbServer name="multiPool" virtual="true">
<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
<!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
<property name="loadbalance">1</property>
<!-- Separated by commas,such as: server1,server2,server1 -->
<property name="poolNames">server2,server2,server3</property>
</poolConfig>
</dbServer>
# ps: 一主多从可以增加server3 ......

##########################在 amoeba.xml文件中需要修改的配置为:
<service name="Amoeba for Mysql" class="com.meidusa.amoeba.net.ServerableConnectionManager">
<!-- port -->
<property name="port">3306</property> #连接amoeba时所使用的端口号

<!-- bind ipAddress -->
<!--
<property name="ipAddress">127.0.0.1</property> #
-->
<property name="ipAddress">0.0.0.0</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">

<property name="user">root</property> #连接amoeba时候的账户

<property name="password">amoeba</property> #连接amoeba时候的密码

<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>

<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> #写路由到server1上去
<property name="readPool">server2</property> #读路由到server2上去, 如果是多从的, 这里写数据库池,例如:multiPool

<property name="needParse">true</property>
</queryRouter>


4. 启动 amoeba
版本: 2.2.0
/usr/local/amoeba/bin/amoeba start
/usr/local/amoeba/bin/amoeba stop

root@edxserver01:/usr/local/amoeba# ./bin/amoeba start

The stack size specified is too small, Specify at least 228k
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
解决问题:
vim /usr/local/amoeba/bin/amoeba
修改:
DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss128k"
为:
DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss256k"

版本: 3.0.5
nohup /usr/local/amoeba-mysql-3.0.5-RC/bin/launcher &
/usr/local/amoeba-mysql-3.0.5-RC/bin/shutdown

vim /usr/local/amoeba-mysql-3.0.5-RC/jvm.properties
修改为:
JVM_OPTIONS="-server -Xms1024m -Xmx1024m -Xss256k -XX:PermSize=16m -XX:MaxPermSize=96m"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值