Mysql主从复制和读写分离Amoeba实现
来源:互联网 发布:制作游戏的软件 编辑:程序博客网 时间:2024/05/21 12:41
具体实现
Mysql数据库读写分离的具体实现主要包括两个部分配置,即数据主从复制和Amoeba代理,现分别进行介绍:
整个环境的结构图如下所示:
主从复制
查看Master服务器是否已经安装Mysql数据库
[root@master ~]# rpm -qa | grep mysql
若无消息显示,则进行Mysql安装,否则跳过此步骤
[root@master ~]# yum install -y mysql-server mysql mysql-devel mysql-libs
启动Mysql服务
[root@master ~]# service mysqld start
接下来,设置Mysql账户密码
[root@master ~]# mysqladmin -u root password 'yourpassword'
此时,可以用刚才设置的账户密码登陆数据库
[root@master ~]# mysql -uroot -pyourpassword
至此,Mysql数据库安装成功。同样的,对Slave1服务器和Slave2服务器安装Mysql数据库,此处略去。接下来,开始进行数据库主从复制的配置
1. 主数据库配置
[root@master ~]# vi /etc/my.cnf #开启二进制日志,设置id [mysqld] server-id = 1 #Slave这台设置2 log-bin = mysql-bin binlog-ignore-db = mysql,information_schema #忽略写入binlog日志的库 auto-increment-increment = 2 #字段变化增量值 auto-increment-offset = 1 #初始字段ID为1 slave-skip-errors = all #忽略所有复制产生的错误 log-slave-updates = true #运行slave更新日志
重启Mysql服务,使配置生效
[root@master ~]# service mysqld restart
登陆数据库
[root@master ~]# mysqladmin -u root password 'yourpassword'
查看下log bin日志和pos值位置
mysql> show master status\G*************************** 1. row *************************** File: mysql-bin.000001 Position: 1141 Binlog_Do_DB: Binlog_Ignore_DB: mysql,information_schema1 row in set (0.00 sec)
可以看出,Binlog_Ignore_DB显示的信息就是刚才我们在配置文件所配置的信息。此外,还有两个重要的参数需要记下:mysql-bin.000001和1141。从数据库就是根据这两个参数,完成主从复制,以达到数据同步的效果。
从数据库要读取主数据库日志文件,需要主数据开放授权用户
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.0.%' IDENTIFIED BY '123456';mysql> flush privileges;
进行从数据库配置时,将使用到授权用户
至此,完成主数据库配置。接下来,让我们进行从数据库配置。
2. Mysql slave从服务器配置
从数据库配置相对主数据配置相对简单,主要包括配置文件修改和主从复制设置
[root@slave1 ~]# vi /etc/my.cnf #开启二进制日志,设置id [mysqld] server-id = 2 #Slave这台设置2 relay-log=relay-log-bin relay-log-index=slave-relay-bin.index
登陆数据库,设置主从同步。
[root@slave1 ~]# mysql -u root -p
mysql> change master to master_host='192.168.29.128',master_user='replication',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=106;
启动主从复制
[root@slave1 ~] slave start;
查询slave状态
mysql> show slave status\G*************************** 1. row *************************** Slave_IO_State: Reconnecting after a failed master event read Master_Host: 192.168.1.117 Master_User: replication Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 1141 Relay_Log_File: relay-log-bin.679793 Relay_Log_Pos: 251 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: 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: 1141 Relay_Log_Space: 549 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: 0Master_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)
只有当Slave_IO_Running和Slave_SQL_Running都显示Yes时,才表示主从复制配置成功。否则失败,检查上述配置过程。
Mysql Slave2服务器从数据库的配置过程类似,此处略去。
主从复制验证
首先,在主数据建立一个db_test数据库,看两个从数据库是否会自动进行复制。
在Master服务器登录主数据库,查看现有数据库。
mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || test |+--------------------+
现在,新增一个测试数据库db_test。
mysql> create database db_test;+--------------------+| Database |+--------------------+| information_schema || db_test || mysql || test |+--------------------+
接下来,分别登录Mysql Slave1服务器和Mysql Slave2服务器的从数据库,查询数据库。
mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || db_test || mysql || test |+--------------------+
可以发现,当主数据库发生改动,从数据库会相应同步,并且同步的过程是异步进行的。因此,可以验证我们配置的主从复制已经生效。
Amoeba数据库代理
需要:jdk、amoeba包
安装jdk
[root@localhost ~]# chmod +x ./jdk-6u14-linux-x64.bin [root@localhost ~]# ./jdk-6u14-linux-x64.bin [root@localhost ~]# mv jdk1.6.0_14/ /usr/local/jdk1.6[root@localhost ~]# vim /etc/profile //增加export JAVA_HOME=/usr/local/jdk1.6export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/libexport PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$PATH:$HOME/binexport AMOEBA_HOME=/usr/local/amoeba/export PATH=$PATH:$AMOEBA_HOME/bin[root@localhost ~]# source /etc/profile[root@localhost ~]# java -versionjava version "1.6.0_14" #说明jdk配置OKJava(TM) SE Runtime Environment (build 1.6.0_14-b08)Java HotSpot(TM) 64-Bit Server VM (build 14.0-b16, mixed mode)
或者调用虚拟机java环境
安装amoeba 2.2.0软件
Amobea下载地址
[root@localhost ~]# mkdir /usr/local/amoeba
[root@localhost ~]# tar zxf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
[root@localhost ~]# chmod -R 755 /usr/local/amoeba/
[root@localhost ~]# /usr/local/amoeba/bin/amoebaamoeba start|stop #说明软件安装OK
但是提示出现fatal exception:
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.
解决方法:
打开bin目录下 的amoeba启动文件
[root@localhost ~]# vim amoeba
修改58行的Xss参数:
DEFAULT_OPTS=”-server -Xms1024m -Xmx1024m -Xss128k”
修改为:
DEFAULT_OPTS=”-server -Xms1024m -Xmx1024m -Xss256k”
在master、slave上开放权限
mysql> grant all on *.* to 'test'@'192.168.29.%' identified by '123.com';mysql> flush privileges;
修改Amoeba配置文件
[root@localhost ~]# cd /usr/local/amoeba/[root@localhost amoeba]# cp conf/amoeba.xml conf/amoeba.xml.bak[root@localhost amoeba]# vim conf/amoeba.xml
[root@localhost amoeba]# vim conf/dbServers.xml
配置完成后,重启Amoeba。
读写分离验证
[root@localhost ~]# mysql -uamoeba -p123456 -h 192.168.1.117 -P8066
额外说明下,此处的yourpassword是连接Amoeba的密码,也就是在amoeba.xml配置文件中配置的密码,与Mysql密码不同,需要注意。
在Mysql Mster服务器创建一个表。
mysql> create table stu (id int(10) ,name varchar(10));
而后,分别停止Mysql Slave1服务器和Mysql Slave2服务器两个从数据库的主从复制,便于数据库操作观察。
登陆Mysql Slave1服务器,停止从数据库主从复制。
[root@slave1 ~]# mysql -u root -p
mysql> slave stop;
登陆Mysql Slave2服务器,停止从数据库主从复制。
[root@slave2 ~]# mysql -u root -p
mysql> slave stop;
在Mysql Master服务器数据库插入。
mysql> insert into stu values('1','zhangsan');
在Mysql Slave1数据库插入。
mysql> insert into stu values('2','lisi');
在Mysql Slave2数据库插入。
mysql> insert into stu values('3','jhon');
登陆到Amoeba服务器,进行读写分离的测试:
[root@localhost ~]# mysql -uamoeba -p123456 -h 192.168.1.117 -P8066
mysql> use test;mysql> select * from stu;+------+------+| id | name |+------+------+| 2 | lisi |+------+------+mysql> select * from stu;+------+------+| id | name |+------+------+| 3 | john |+------+------+
重复执行多次,发现始终只显示从数据库的数据,说明如果进行数据库读操作,Amoeba只将读数据SQL命令路由至从数据库。
登录Mysql Master数据库。
[root@master ~]# mysql -uroot -pyourpassword
mysql> use test;mysql> select * from stu;+------+----------+| id | name |+------+----------+| 1 | zhangsan |+------+----------+
可以验证,使用Amoeba对Mysql读写分离成功。
- Amoeba实现Mysql主从复制读写分离
- Mysql主从复制和读写分离Amoeba实现
- 利用mysql的amoeba实现主从和读写分离
- Amoeba实现mysql主从读写分离
- windows 下 MySQL读写分离、主从复制、通过amoeba代理实现读写分离 配置全过程
- MySQL 主从复制和读写分离实现
- mysql 主从amoeba读写分离
- MySQL主从复制技术与读写分离技术amoeba应用
- MySQL主从复制技术与读写分离技术amoeba应用
- Amoeba整合MMM实现高可用负载均衡,读写分离,主从复制的MySQL
- mysql主从配置以及基于amoeba实现读写分离
- 使用Amoeba实现MySQL的主从读写分离
- Amoeba搞定mysql主从读写分离
- Amoeba搞定mysql主从读写分离
- Amoeba搞定mysql主从读写分离
- Amoeba搞定mysql主从读写分离
- Amoeba搞定mysql主从读写分离
- Mysql数据库主从+Amoeba读写分离
- 通过java.net.URLConnection发送HTTP请求的方法
- CH340 +Micro USB转串口 不能识别 不起振问题
- 距离变换代码实现(c代码)
- QT布局之水平垂直加Qss样式布局
- android ndk 02 C语言 二级指针 指针运算 指针与数组
- Mysql主从复制和读写分离Amoeba实现
- 测试
- VUE+WebPack游戏设计:为对战扑克牌增加能力槽
- js关闭当前弹出的小窗口并打开新窗口
- ORACLE Scheduler特性(7)Scheduler抛出的Events
- hdu2844
- 如何提高app的用户参与度?
- Wordpress主题magazine point底部版权信息删除
- C++智能指针详解