linux Mysql主从复制 Amoeba 读写分离

Mysql 主从复制

主机 A:172.16.9.206 root/FWQcs!@2018
从机 B:172.16.9.205 root/ FWQcs@123


1、先登录主机 A,在主服务器上,设置一个从数据库的账户,使用REPLICATION SLAVE(从复制)赋予权限,如: 用户:backup glxx1234
mysql> GRANT REPLICATION SLAVE ON *.* TO 'backup'@'172.16.9.205' IDENTIFIED BY 'glxx1234'
赋予从机权限,有多台从机,就执行多次。
mysql>flush privileges;

2、 打开主机A的my.cnf,输入如下:(修改主数据库的配置文件my.cnf,开启BINLOG,并设置server-id的值,修改之后必须重启mysql服务)
server-id = 1 #主机标示,整数log_bin = mysql-bin #确保此文件可写,开启bin-logread-only =0 #主机,读写都可以binlog-do-db =test #需要备份数据,多个写多行binlog-ignore-db =mysql #不需要备份的数据库,多个写多行可以通过mysql>show variables like 'log_%'; 验证二进制日志是否已经启动。

本地配置
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
log-bin=mysql-bin
server-id=1
binlog-do-db=sa_fuwuqu
binlog-ignore-db=information_schema
(查询日志启动状态 : show variables like '%bin%')
3、现在可以停止主数据的的更新操作,并生成主数据库的备份,我们可以通过mysqldump到处数据到从数据库,当然了,你也可以直接用cp命令将数据文件复制到从数据库去,注意在导出数据之前先对主数据库进行READ LOCK,以保证数据的一致性
mysql> flush tables with read lock;
Query OK, 0 rows affected (0.19 sec)

然后mysqldump导出数据:
mysqldump -h127.0.0.1 -p3306 -uroot -p test > /data/backup/test.sql

4、得到主服务器当前二进制日志名和偏移量,这个操作的目的是为了在从数据库启动后,从这个点开始进行数据的恢复。
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 |      154 | test         | mysql            |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)


最好在主数据库备份完毕,恢复写操作。
mysql> unlock tables;
Query OK, 0 rows affected (0.28 sec)


5、将刚才主数据备份的test.sql复制到从数据库(navicat、phpmyadmin、命令行都可以),进行导入。

6、修改从数据库的my.cnf,增加server-id参数,指定复制使用的用户,主数据库服务器的ip,端口以及开始执行复制日志的文件和位置。打开从机B的my.cnf,输入(修改之后必须重启mysql服务)
server-id = 2log_bin = /var/log/mysql/mysql-bin.log

下面是关于主从的参数配置(通过sql语句来实现):master_host =192.168.10.111master_user =backupmaster_pass =123456master_port =3306master_connect_retry=60 #如果从服务器发现主服务器断掉,重新连接的时间差(秒)replicate_do_db =test #只复制某个库replicate_ignore_db=mysql #不复制某个库

change master to master_host='masterIP', master_user='slave', master_password='slvaePASS', master_port =3306,master_connect_retry=60 ;

7、在从服务器上,启动slave进程
mysql> start slave;

Amoeba 读写分离

需要软件:jdk-8u11-linux-x64.tar.gz amoeba-mysql-binary-2.0.1-BETA.tar.gz

一、配置jdk环境变量
vim /etc/profile

<!--下面是profile 文件环境变量配置 以及amoeba的环境变量配置-->
export AMOEBA_HOME=/home/FuWuQu/amoeba-2.0.1
export PATH=$AMOEBA_HOME/bin/:$PATH
export JAVA_HOME=/usr/java/jdk1.8.0_171
export CLASSPATH=${JAVA_HOME}/lib
export PATH=$JAVA_HOME/bin:$PATH
export PATH=$JAVA_HOME/bin/:$PATH

#更新资源文件
source /etc/profile

二、解压 amoeba-mysql-binary-2.0.1-BETA.tar.gz 到/home/FuWuQu/amoeba-2.0.1
tar -zxvf amoeba-mysql-binary-2.0.1-BETA.tar.gz /home/FuWuQu/amoeba-2.0.1

三、进入 /amoeba-2.0.1/conf
cd /home/FuWuQu/amoeba-2.0.1/conf
vim dbServers.xml

四、设置mysql 默认连接时的端口,数据库,帐号和密码

该配置文件里主从数据库的parent是abstractServer,需要从它继承一些信息,所以这里的信息一定要配置正确。
 
需要修改成类似:

mysql schema这里默认是sa_fuwuqu,需要改成一个存在的数据库。

五、设置连接主从数据库服务器的IP 地址和服务器别名,用户名及密码


<dbServername dbServername = "server1"   parent = "abstractServer" >   
               <factoryConfig>   
                       <!-- mysql ip -->   
                         < propertyname propertyname = "ipAddress" > 127.0.0.1 </property>   
                 </factoryConfig>   
         </dbServer>   

替换成类似于:

< dbServername dbServername = "master"   parent = "abstractServer" >   
                 <factoryConfig>   
                         < propertyname propertyname = "ipAddress" > 192.168.1.60 </property>   
                         <propertyname propertyname = "user" > root  </property>   
                        < propertyname propertyname = "password" > dandan  </property>   
                 </factoryConfig>   
         </dbServer>   
   
         < dbServername dbServername = "slave1"   parent = "abstractServer" >   
                 <factoryConfig>   
                         < propertyname propertyname = "ipAddress" > 192.168.1.23 </property>   
                         <propertyname propertyname = "user" > root  </property>   
                         < propertyname propertyname = "password" > dandan  </property>   
                 </factoryConfig>   
         </dbServer>   

--注意:这里写的数据库用户,密码必须是主从允许远程访问的用户,不是主从的本地用户。
注意:此处测试机 205与206上的mysql 用户名都是root/glxx1234 所以在server1及server2中没有配置用户名及密码。

六、定义读写的池

把master节点加入WritePool,把slave节点加入ReadPool

替换为类似于:

七、 配置amoeba.xml
vim amoeba.xml
修改proxy 的端口号,管理帐号及密码
客户端和程序只需要连接proxy的帐号密码即可,相当于中间接封装。

替换为:

这样配置后 链接数据库即可使用 3308端口 用户名 glxx/glxx1234

八、设置默认池及读写分离
一些除了SELECT\UPDATE\INSERT\DELETE的语句都会在defaultPool执行。
我这里将

替换为:

这里记得取消注释writePool和readPool这两行。
--这几行位于文件后面的位置

九、启动amoeba
cd/usr/FuWuQu/amoeba-2.0.1/bin
./amoeba start

十、测试 是否已经读写分离
1、将主库即server1的数据库 服务停止,查看通过 amoeba的中间件连接是否能连上数据库 以及是否可以写入数据(如配置正确,此处连接会失败)
2、停止server2的mysql服务,查看是否能够连接上中间件,以及读写数据(正常情况能够连接上,能写数据,但是不能查询数据)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值