centos amoeba+mysql主从集群分离

原文来自:http://blog.163.com/na_llong/blog/static/113541609201352123232528/

配置主从之前最好不要填写同步的数据库,默认都同步所有数据库就行。

mysql 本机自带的,java 本机自带的。

1、登录Master服务器,修改my.cnf,添加如下内容;

server-id = 1 //数据库ID号, 为1时表示为Master,其中master_id必须为1到232–1之间的一个正整数值;

log-bin=mysql-bin //启用二进制日志;

binlog-do-db=data //需要同步的二进制数据库名; (最好不要写,默认就同步所有数据库了)

log=/usr/local/log/mysql.log  日志位置。需要创建目录和改变权限chmod、chown命令

{上边配置主库已经够用了,下边我列出一些东西可以根据自己需要添加

default-storage-engine=innodb –默认的存储引擎,现在Mysql的主打存储引擎

innodb_data_home_dir =/data –innodb的数据家目录

innodb_data_file_path =ibdata1:50M:autoextend –innodb的数据存储文件,当写绝对路径时,innodb_data_home_dir要为空,这样可以指定多个存储文件,使用分号隔开

server-id = 1 –mysql服务器的id号:(1-2^32),id号越小优先级越高

log-bin = /dblog/mysqld-bin –二进制日志

max-binlog-size = 10M –mysqlbinlog的单个文件最大是10M

expire_logs_days = 10 –日志最大存储日期

#logs

slow_query_log = /dblog/slow.log –慢日志,在生产环境一定要记得开启

long_query_time = 2     –定义超过2秒的查询属于慢查询

log-queries-not-using-indexes=1

log-error = /dblog/mysqld.err –错误日志

查询日志不要开,因数据大,影响I/O,排错才使用。

log-bin:每次重启Mysql都会产生一个新的文件

# mkdir /data –建立数据存放目录

# mkdir /dblog –建立日志存放目录

# chmod 700 /data/ /dblog –修改权限

# chown mysql.mysql /data /dblog/ -R

# mysql_install_db –datadir=/data –user=mysql –进行初始化

# service mysql start –启动服务,如出现找不到PID,请检查selinux,iptables是否开启

}

2、建立复制所要使用的用户;

(先说登录,登录不进去就没法授权和建立用户) 本机自带的mysql 登录 第一次没有密码 为空  直接登录就可以

设置密码的命令如下:mysqladmin -uroot -p(旧密码,没有就不写) password 新密码    然后回车

会提示输入密码,不用输入密码,直接回车就可以了,密码就设置了。

建立复制用户命令   mysql>grant replication slave on *.* to ‘slave‘@‘%‘ IDENTIFIED BY ‘888888‘

3、重启mysql;

service mysqld restart

4 、(如果同步的主库有数据,则需要备份,没有则略过这一步)现在备份Master上的数据;

锁定后我直接tar.gz data这个库文件;

mysql>FLUSH TABLES WITH READ LOCK;

cd /var/lib/mysql

tar data.tar.gz data

接着直接执行了远程scp;

scp ./data.tar.gz [email protected]地址:/var/lib/mysql

主库解锁命令是 mysql>unlock tables;

5、授权以后,查看主库状态,

登录mysql 授予登录权限,给远程ip赋予登录权限mysql>grant all privileges on *.*
to ‘root‘@‘%‘identified by ‘888888‘with grant option;单独给IP赋予远程管理权限是mysql>grant all privileges on *.* to ‘root‘@‘远程的ip‘identified by ‘888888‘with grant option;给本地赋予权限是 grant

all privileges on *.* to ‘root‘@‘localhost‘ identified
by ‘root‘ with grant option)

查看状态:mysql>show master status\G

记录pos和第一个文件名称。从库同步需要用(同第9步一样)

查看了主库状态,就不要在主库上做任何操作,否则file拦文件会改变。

6 slave 设置

登录Slave数据库服务器,修改my.cnf;

server-id = 3 //2已经被用在另一个服务器上了,如果以后要再加Slave号接着往后数就OK了;

log-bin=mysql-bin

master-host = 主库ip

master-user = slave

master-password = 888888

master-port = 3306

master-connect-retry=60 //如果发现主服务器断线,重新连接的时间差;

replicate-do-db=data //需要备份的数据库

7 解压刚才从Master scp过来的文件,此处不用改权限、属主,默认没有改变,可以根据实际情况进行修改;

8、上述完成后,可以启动slave了;查看slave状态;

mysql>slave start;

mysql>show slave status\G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.0.1

Master_User: test

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: updatelog.000001

Read_Master_Log_Pos: 106

Relay_Log_File: onlinevc-relay-bin.000013

Relay_Log_Pos: 1069

Relay_Master_Log_File: updatelog.000001

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB: data

Replicate_Ignore_DB: mysql

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 106

Relay_Log_Space: 1681

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

1 row in set (0.00 sec)

9、查看Master上面的状态;

mysql> show master status;

+------------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| updatelog.000012 | 15016 | data | mysql |

+------------------+----------+--------------+------------------+

1 row in set (0.00 sec)

由此可见两者的File、Position存在问题,所要要去Slave上设置对应主库的Master_Log_File、Read_Master_Log_Pos;执行如下语句;

mysql>slave stop;

mysql>CHANGE MASTER TO MASTER_HOST=‘主库ip‘,MASTER_USER=‘slave‘, MASTER_PASSWORD=‘******‘,MASTER_LOG_FILE=‘updatelog.000012‘,MASTER_LOG_POS=15016;

确保 Slave_IO_Running: Yes 、Slave_SQL_Running: Yes都要为YES才能证明Slave的I/O和SQL进行正常

10、在这期间登录mysql经常会用到一些语句,我写下来。

show databases;

show tables;

create database 库明

create table 表明(id int, name varchar(100));

insert into values(a,tom)

create table 表明(id int)

insert
into 表明 values(1)

drop table 表明

delete from user where user=‘删除用户‘

select * from user,host from user; 查看用户和登录权限的

use  库明

MySQL插入100万条记录测试
存储过程

BEGIN

#Routine body goes here...

DECLARE i INT DEFAULT 0;

WHILE i < 1000000 DO

INSERT INTO  test  values(i, concat(‘zhangsan‘,i));

SET i = i + 1;

END WHILE;

END

装amoeba之前,要把amoeba连接数据库的用户名和密码一定要授权,命令如下:

建立amoeab用户赋予权限命令:grant all  on *.* to ‘amoebauser‘@‘%‘identified by ‘amoebapassword‘

注:在mysql主库上边授权.

10、Amoeba的安装

Amoeba下载地址:http://sourceforge.net/projects/amoeba/mkdir /usr/local/amoeba

wget http://softlayer.dl.sourceforge.net/project/amoeba/Amoeba%20for%20mysql/2.x/amoeba-mysql-binary-2.1.0-RC5.tar.gz

tar xzf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba

配置全局环境变量

vi /etc/profile

export PATH=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/bin:$PATH

export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/

export AMOEBA_HOME=/usr/local/amoeba

export PATH=/usr/local/amoeba/bin:$PATH

说一下java的变量,可以用which java 和whereis java去查找,找不到就用 find / -name java 查找,不要被连接文件糊弄了。要看清楚。

我这里就用 find / -name java 查找的。

然后 让环境变量生效

source /etc/profile

11、Amoeba for mysql配置

配置Amoeba for mysql的读写分离主要涉及两个文件:

1、/usr/local/amoeba/conf/dbServers.xml

此文件定义由Amoeba代理的数据库如何连接,比如最基础的:主机IP、端口、Amoeba使用的用户名和密码等等。

2、/usr/local/amoeba/conf/amoeba.xml

此文件定义了Amoeba代理的相关配置。

dbServers.xml文件配置

abstractServer配置:

  1. <dbServer name="abstractServer" abstractive="true">
  2. <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
  3. <property name="manager">${defaultManager}</property>
  4. <property name="sendBufferSize">64</property>
  5. <property name="receiveBufferSize">128</property>
  6. <!-- mysql port -->
  7. <property name="port">3306</property>
  8. <!-- mysql schema -->
  9. <property name="schema">dbname</property>
  10. <!-- mysql user -->
  11. <property name="user">root</property>
  12. <!-- mysql password -->
  13. <property name="password">root</property>
  14. </factoryConfig>
  15. <poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">
  16. <property name="maxActive">500</property>
  17. <property name="maxIdle">500</property>
  18. <property name="minIdle">10</property>
  19. <property name="minEvictableIdleTimeMillis">600000</property>
  20. <property name="timeBetweenEvictionRunsMillis">600000</property>
  21. <property name="testOnBorrow">true</property>
  22. <property name="testWhileIdle">true</property>
  23. </poolConfig>
  24. </dbServer>

此部分定义真实mysql服务器的端口,数据库名称,mysql用户及密码。

主从数据库定义:

  1. <dbServer name="Master" parent="abstractServer">
  2. <factoryConfig>
  3. <!-- mysql ip -->
  4. <property name="ipAddress">192.168.0.1</property>
  5. </factoryConfig>
  6. </dbServer>
  7. <dbServer name="Slave1" parent="abstractServer">
  8. <factoryConfig>
  9. <!-- mysql ip -->
  10. <property name="ipAddress">192.168.0.2</property>
  11. </factoryConfig>
  12. </dbServer>
  13. <dbServer name="Slave2" parent="abstractServer">
  14. <factoryConfig>
  15. <!-- mysql ip -->
  16. <property name="ipAddress">192.168.0.3</property>
  17. </factoryConfig>
  18. </dbServer>
  19. <dbServer name="virtualSlave" virtual="true">
  20. <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
  21. <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
  22. <property name="loadbalance">1</property>
  23. <!-- Separated by commas,such as: server1,server2,server1 -->
  24. <property name="poolNames">Slave1,Slave2</property>
  25. </poolConfig>
  26. </dbServer>

此部分定义主服务器,从服务器,及从服务器连接池。这里只定义数据库地址,它们的用户及密码就是上面的abstractServer里的设置。注意用来连接真实mysql服务器的用户必须拥有远程连接权限。

amoeba.xml配置

amoeba连接验证配置:

  1. <property name="authenticator">
  2. <bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">
  3. <property name="user">root</property>
  4. <property name="password">root</property>
  5. <property name="filter">
  6. <bean class="com.meidusa.amoeba.server.IPAccessController">
  7. <property name="ipFile">${amoeba.home}/conf/access_list.conf</property>
  8. </bean>
  9. </property>
  10. </bean>
  11. </property>

这里定义连接amoeba时用来验证的用户及密码。

读写分离配置:

  1. <property name="defaultPool">Master</property>
  2. <property name="writePool">Master</property>
  3. <property name="readPool">virtualSlave</property>

defaultPool:配置了默认的数据库节点,一些除了SELECTUPDATEINSERTDELETE的语句都会在defaultPool执行。

writePool :配置了数据库写库,通常配为Master,如这里就配置为之前定义的Master数据库。

readPool :配置了数据库读库,通常配为Slave或者Slave组成的数据库池,如这里就配置之前的virtualSlave数据库池。

amoeba启动

启动命令:

  1. amoeba start (前台启动可以查看报错信息

执行:/usr/local/amoeba/bin/amoeba可能会遇到以下错误:

The stack size specified is too small, Specify at least 160k Could not create the Java virtual machine.

修改 amoeba 文件,vi /usr/local/amoeba/bin/amoeba,找到如下的文件:

DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss128k"

将其修改为:

DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss256k

再次执行/usr/local/amoeba/bin/amoeba,如果出现amoeba start|stop 就可以启动amoeba了

# /usr/local/amoeba/bin/amoeba start

此命令以前台的方式启动,会输出启动时的信息,检查没有错误信息后,中断,并后台运行:

  1. nohup amoeba start &(后台启动命令)

还有一些错误我列出来,

比如 我想把mysql从库改为主库,这时候你更改完所有配置文件,你在主库上边mysql> show master status查看时候,可以看到以前打的连接状态,怎么办?

需要登录mysql 执行以前命令

mysql> slave stop;

mysql>change master to master_host=‘ ‘; 就可以了

mysql 主从集群做好了后,这时候一不小心从主库上删掉一个数据库数据,从库没有这个数据库,这时候 Slave_SQL_Running: NO,会变成NO,解决方法有两种如下

记录File和Position对应的值。

mysql> show master status;

+------------------+-----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+-----------+--------------+------------------+

| mysql-bin.000013 | 330748356| | |

+------------------+-----------+--------------+------------------+

1 row in set (0.00 sec)

到slave服务器上执行手动同步:

mysql> slave stop;

mysql> change master to

> master_log_file=‘mysql-bin.000013‘,

> master_log_pos=330748356;

1 row in set (0.00 sec)

mysql> slave start;

1 row in set (0.00 sec)

再次查看slave状态发现:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

...

Seconds_Behind_Master: 0

解决办法二:

mysql> slave stop;

mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

mysql> slave start;

时间: 2024-07-29 06:39:56

centos amoeba+mysql主从集群分离的相关文章

社交网站部署——Nginx服务器+PHP服务器搭建+MySQL主从集群

案例概述 某公司的社交网站采用PHP语言开发,为了管理PHP程序员开发的代码,上级领导要求搭建SVN服务器进行版本控制.社交网站的第一个版本部署在LNMP平台之上,前端为Nginx服务器,通过fastcgi协议访问后端的PHP服务器.为了保证数据安全,要求搭建MySQL数据库主从集群. 社交网站项目包含用户的相册功能,允许用户上传照片,上传照片需要使用共享存储来存放.针对共享存储可用的开源方案有很多,如MFS.FastDFS 等.公司决定使用MFS分布式文件系统来实现,并将MFS挂载在PHP服务

Docker搭建MySQL主从集群,基于GTID

写在前边 搭建MySQL读写分离主从集群,这里未使用binlog方式,使用的是GTID方式 源码见我的Github https://github.com/hellxz/mysql-cluster-docker.git 主从目录结构 . ├── bin │?? ├── add-slave-account-to-master.sh │?? ├── reset-slave.sh │?? ├── slave-replias-master-start.sh │?? └── stop-replicas.sh

搭建mysql主从集群的步骤

前提条件是:须要在linux上安装4个mysql数据库,都须要配置完对应的信息. 须要搭建: mysql 01: 主数据库  master mysql 02 :   从数据库  slave01 mysql 03 :   从数据库  slave02 mysql 04 :   从数据库  slave03 第一步: 在主server上的my.cnf 上编辑 二进制文件格式:log-bin=mysql-bin; 二进制的格式: binlog-format=mixed 第二步: 在从server上: 有几

mysql主从集群定时备份脚本

#!/bin/bash dpath="/mysql_backup" mydays="7" username="root" mysql_pwd="redhat" xmysql="/application/mysql/bin/mysql -u$username -p${mysql_pwd}" xmysqldump="/application/mysql/bin/mysqldump  -u$userna

CentOS服务器Mysql主从复制集群的搭建

环境:CentOS6.3 数据库mysql6.5.26 编辑/etc/my.cnf vi /etc/my.cnf 重启mysql service mysqld restart create user 'mastj'@'192.168.1.16' identified by '123456'; grant replication slave on *.* to 'mastj'@'118.123.199.12' identified by '123456'; show master status;

Mysql高级集群-读写分离Amoeba

一.环境介绍Master-IP:10.0.0.201Slave- IP:10.0.0.202Amobea-IP:10.0.0.203 二.安装JDK# mkdir /Amoeba# tar -xvf jdk-7u40-linux-x64.tar.gz -C /Amoeba/# vim /etc/profileJAVA_HOME=/Amoeba/jdk1.7.0_40export JAVA_HOME PATH=$JAVA_HOME/bin:$PATHexport PATH CLASSPATH=.:

CentOS系统 Amoeba+MySql主从读写分离配置 适合新手傻瓜式教程!-----仅供参考!

废话不说,直接开始: 一.安装mysql的三种方式,这里采用第2种(安装方式不再详解,请参照) http://www.cnblogs.com/babywaa/articles/4837946.html 1.rpm安装2.源码安装3.通用二进制源码安装 环境准备 192.168.5.10 master1 192.158.5.20 slave1 二.配置master服务器,192.168.5.101.第一步:登陆mysql,给root账号添加密码     //参考命令:SETPASSWORD = P

Mysql、MariaDB 新型主从集群配置GTID

前文谢了<Mysql.MariaDB 传统主从集群配置>,该技术已经非常成熟.从Mysql5.6和MariaDB10.0开始,有了新型的主从方案GTID,不过这两个系统到这个版本出现了分支,具体实现已经不同,配置方法也不同,下文分别讲述. MariaDB: 我用的版本还是10.1版,目前该版本还不是稳定版,但不影响测试.先部署部署好两个数据库实例,参见http://bangbangba.blog.51cto.com/3180873/1701857 直到创建好复制用户. 我们这里的由于是新创建的

MySQL分布式集群之MyCAT(转)

原文地址:http://blog.itpub.net/29510932/viewspace-1664499/ 隔了好久,才想起来更新博客,最近倒腾的数据库从Oracle换成了MySQL,研究了一段时间,感觉社区版的MySQL在各个方面都逊色于Oracle,Oracle真的好方便!好了,不废话,这次准备记录一些关于MySQL分布式集群搭建的一个东东,MyCAT,我把他理解为一个MySQL代理.-----------------------------------------------------