mysql主从传递_Mysql主从同步+读写分离(centos7)

1、数据库主从同步

2、amoeba proxy实现读写分离

实验环境:

Web:    192.168.1.14

Mysql_proxy:      192.168.1.16

Mysql_master:    192.168.1.18

Mysql_slave:       192.168.1.2

主从同步

本地已经搭建好wordpress,搭建过程比较简单,在此文略过。

d21f4ba936354c4509a751a1a1da6114.png

每次实验第一件事,时间同步!(略)

开启主库的binlog功能:

vim /etc/my.cnf

server-id = 1    #主从的id必须是唯一!

log-bin = mybinlog

024365c6bfe0939f9fe26b67ee3b982d.png

在主库对从库授权:

MariaDB [(none)]> grant replication slave on *.* to 'slave'@'192.168.1.%' identified by '123123';

MariaDB [(none)]> flush privileges;

24e466f0dba4823681e9b709fe98f12d.png

将主库同步前的数据进行全备到从库:

首先要锁库!!!

为了防止在同步时有人对数据库进行写数据!!!

MariaDB [(none)]> flush tables with read lock;

4356bb412c92452beaec98823e68b6e2.png

systemctl restart mariadb  //重启数据库 不重启日志文件位置不会生成出来!

重启过后进入数据库查看binlog文件名与位置(从库同步主库需要这两个参数!)

MariaDB [(none)]> show master status;

3dede0bf128c2c88aa56d1925c49a7e9.png

数据库全备:

[root@mysql-master ~]# mysqldump -uroot -p -A --events > backup.sql

8d270afed150488a50028753ceb8e066.png

将备份的数据库传输到从服务器:

[root@mysql-master ~]# scp backup.sql root@192.168.1.2:/root/

88c215695cf84dbd917e833d7a24f1d0.png

修改从库id:

8d489f57568c4dd5bedd87b1fb841f91.png

导入从库:

[root@mysql-slave ~]# systemctl start mariadb

[root@mysql-slave ~]# mysql < backup.sql

811b4adfeba6ff3d3d72c10b59920d6b.png

进行主从复制配置:

MariaDB [(none)]> change master to \

-> master_host = '192.168.1.18',

-> master_port = 3306 ,

-> master_user = 'slave' ,

-> master_password = '123123' ,

-> master_log_file = 'mybinlog.000001' ,

-> master_log_pos = 245 ;

Query OK, 0 rows affected (0.01 sec)

faf42a9182792b389e40e68802db3e6e.png

开启主从同步:

MariaDB [(none)]> start slave;

Query OK, 0 rows affected (0.02 sec)

MariaDB [(none)]> show slave status\G

7b75662fb84f1485ca4074a09d3722dc.png

解锁主库:

bd561e091ae69db73e8777628c434872.png

查看主从服务器数据库文件:

主从同步成功!

0df4629e475b96f4dd1671052bfaa90a.png

21ff55b75742b22ec8716ce813fdd89f.png

主从配置步骤:

a)准备两台数据库环境(多台设备,用mysql多实例),确定能否正常启动运行

b)配置my.cnf文件,主控配置binlog和serverid ,从库配置serverid参数(不能和主库一致),一般从库不开启binlog的(注意:配置参数必须重启才生效)

c)登录主库增加用于从库连接主库同步的账户(授权),且授权replication slave权限

d)登录主库, 整库锁表 show master status进行查看binlog的位置状态

e)Linux命令行备份(mysqldump),将数据拷贝到从库上

f)解锁主库

g)把主库已有数据导入到从库,根据主库获取到的binlog的位置进行从库同步change master to

h)开启从库同步 start slave

i)从库show slave status,用于检测同步状态,并在主库去测试

amoeba proxy实现读写分离

Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy。它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行。基于此可以实现负载均衡、读写分离、高可用性等需求。

Amoeba相当于一个SQL请求的路由器,目的是为负载均衡、读写分离、高可用性提供机制,而不是完全实现它们。用户需要结合使用MySQL的 Replication等机制来实现副本同步等功能。

3ed7f0e271e27589cebdf53c929f047b.png

安装JDK:

[root@LB ~]# cp jdk-6u14-linux-x64.bin /usr/local/

[root@LB ~]# cd /usr/local/

[root@LB local]# ls

bin  etc  games  include  jdk1.6.0_14  jdk-6u14-linux-x64.bin  lib  lib64  libexec  sbin  share  src

[root@LB ~]# chmod a+x jdk-6u14-linux-x64.bin

[root@LB ~]# ./jdk-6u14-linux-x64.bin  //安装的时候会有个协议,一直翻到最下面然后 输入 yes 开始安装

b93b27efd6e4ecab9adeeaf9f466fb4c.png

做个软连接:(看个人习惯,可以不做)

[root@LB local]# ln -s jdk1.6.0_14/  jdk1.6

a4c79ac32840e29f9738906abbb2874c.png

添加系统环境变量:

[root@LB ~]# vim /etc/profile//在最后加

export JAVA_HOME=/usr/local/jdk1.6

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin

export AMOEBA_HOME=/usr/local/amoeba

export PATH=$PATH:$AMOEBA_HOME/bin

a90557970d2539c31f25597e563d722f.png

重新读取生效/etc/profile

[root@LB ~]# source /etc/profile

573afb0cda2e4c8e1703476d021ab84d.png

二进制安装amoeba:

[root@LB ~]# mkdir /usr/local/amoeba

[root@LB ~]# chmod 775 /usr/local/amoeba

[root@LB ~]# tar zxf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/    //解压二进制安装文件 不需要安装 解压就能用!!!

[root@LB amoeba]# bin/amoeba

amoeba start|stop

在mysql server上给amoebe权限,amoeba将以这个身份登录mysql:

MariaDB [(none)]> grant all on *.* to "amoeba"@"192.168.1.%" identified by "123123";

MariaDB [(none)]> flush privileges;

34ae351864e100110cbbb7727a5d506f.png

修改amoeba主配置文件:

[root@LB ~]# vim /usr/local/amoeba/conf/amoeba.xml

---30行--

amoeba

----32行---------

123123            //提供客户端连接amoeba时需要使用这里设定的账号

(这里的账号密码和amoeba连接后端数据库服务器的密码无关)

---117-去掉注释-

master   //默认数据库池为master

master   //设置可写入数据池的服务器为master

slaves    //设置可读数据库服务器池为slaves

05e160b6b08875f3185fcd3820150fc8.png

53dcbc667161b7df8754abb48944fbbe.png

配置amoeba访问数据库配置文件

[root@LB ~]# vim /usr/local/amoeba/conf/dbServers.xml

3306

wordpress   //配置默认的缺省数据库(这个数据库就是后端指定的库)

amoeba  //设置amoeba连接后端数据库服务器的账号和密码,在所有后端数据库上创建该用户,并授权amoeba服务器可连接

123123

____________________________________________________________________________________

192.168.1.18

192.168.1.2

1

slave1   //这里定义slaves池中的所有成员

2d293dfc69e5b3e722c5deaaa968c829.png

dc0cc32d2b44571a65eaa326d6559f0c.png

启动amoeba服务:

[root@LB ~]# /usr/local/amoeba/bin/amoeba start

e4feb1b67d784f23564029c3fb31e809.png

[root@LB ~]# netstat -anpt | grep java

7154cda2e7659bd7a17195a7790da63d.png

将web数据库中的数据库连接地址改成amoeba代理的地址,端口改为8066:

[root@WEB ~]# vim /var/www/html/wp-config.php

[root@WEB ~]# systemctl restart httpd

15bac23910ae648d5cf9d04a8a10ed3b.png

成功!

373ea607cf1d9023bc634c57048ea5b5.png

还可以通过下面的方法来验证amoeba代理是否成功

[root@mysql-master ~]# mysql -h192.168.1.16 -uroot -p -P8066  //-P 通过amoeba的8066端口代理到后端数据库的3306

bb62f73240dc34aa4fc5d11d14830c1d.png

总结:其实amoeba是自带数据库同步的,不需要手动配置的同步数据库,但是会手动配置同步很重要!

注意在第一次同步后,在从服务器上是没有写的权限的!!!

实验过程很艰难,如有错误,还请各位大佬指点!感谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值