# 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文件中需要修改的配置为:
${defaultManager}
64
128
3306 #后端mysql的端口
amoeba #后端mysql的默认连接数据库
root #连接后端mysql的账户
amoebapass #连接后端mysql使用的密码
192.168.1.228 #后端MySQL的ip
192.168.1.229
192.168.1.230
# 数据库池, server2,server2,server3 是以 2 2 3 这样的方式轮询
1
server2,server2,server3
# ps: 一主多从可以增加server3 ......
##########################在 amoeba.xml文件中需要修改的配置为:
3306 #连接amoeba时所使用的端口号
0.0.0.0 #监听地址
${clientConnectioneManager}
128
64
root #连接amoeba时候的账户
amoeba #连接amoeba时候的密码
${amoeba.home}/conf/access_list.conf
${amoeba.home}/conf/rule.xml
${amoeba.home}/conf/ruleFunctionMap.xml
${amoeba.home}/conf/functionMap.xml
1500
server1 #默认路由, 有人说可以去掉,但是我去掉出现异常
server1 #写路由到server1上去
server2 #读路由到server2上去, 如果是多从的, 这里写数据库池,例如:multiPool
true
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"