多台服务器有多个ip导致使用使用数据库的时候不方便
所以出现了调度器:读写分离
之前分离实验只读没有效果?把服务器作为只读
启动数据库服务
进入数据库
show variables like ‘%read%’;可以看到有一条是read_only
flush tables with read lock;锁定所有,只能读,不能写
解锁的话就是unlocktables;锁定之后主机改变数据库内容,从机解锁之后才会看到效果
哈哈,我知道只读为什么不行了,因为之前创建用户赋予权限的时候赋予了all所有权限,即超级super权限,只读对super权限(all权限的用户无效),要在给予权限的时候指明权限:grant create,drop on...
注意只读只用在/etc/my.cnf里面添加read_only=1即可,要重启服务
set read_only=1;报错是全局变量
set global read_only=1;
show variables like ‘%read%’;
show databases;验证超级用户能不能写
能
先删掉wing
进入数据库,selectuser,host,password from mysql.user where user=’wing’;
update mysql.user set password=’’ where user=’wing’;
flush privileges;
grant all on *.* to wing@’%’;
再验证普通用户能不能写
能dropdatabase db3;也能写能删
show variables like ‘read_only’;
flush tables with read_only;报错
vim /etc/my.cnf
read_only=1保存退出
重启数据库服务
在验证发现还是能写
换一台机器访问操作还是能写
vim /etc/my.cnf再添加
innodb_read_only=1保存退出
不能写了,成功了!以上这种啊,只是其他用户不能写,root用户还是能写的,下面的锁就对root也有效:
flush tables with read lock;锁定所有,只能读,不能写
解锁的话就是unlocktables;锁定之后主机改变数据库内容,从机解锁之后才会看到效果
哈哈,我知道只读为什么不行了,因为之前创建用户赋予权限的时候赋予了all所有权限,即超级super权限,只读对super权限(all权限的用户无效),要在给予权限的时候指明权限:grant create,drop on...
注意只读只用在/etc/my.cnf里面添加read_only=1即可,要重启服务
又考虑到一个问题,如果不能写的话那AB复制的主机也写不了数据了,试一下
主:
从:show slavestatus发现I/O线程是conecting,connecting
mysql -uslave -pslave -h ip;
\q
可能是数据不同步
删除中继日志,和sql挂掉一样处理
弄好之后使I/O线程和SQL线程都为YES才算弄好AB复制
上面设置的只读是在从机上操作的,只对从机进行不能写操作,对主机能写操作就实现了我们想要的效果
总结AB复制使从机不能写的方法:
从机:
vim /etc/my.cnf添加
read_only=1
innodb_read_only=1保存退出,其实不需要innodb_read_only=1这个,只需要read_only这个即可
注意写完了之后重启数据库服务即可
flush tables with read lock;锁定所有,只能读,不能写
解锁的话就是unlocktables;锁定之后主机改变数据库内容,从机解锁之后才会看到效果
哈哈,我知道只读为什么不行了,因为之前创建用户赋予权限的时候赋予了all所有权限,即超级super权限,只读对super权限(all权限的用户无效),要在给予权限的时候指明权限:grant create,drop on...
注意只读只用在/etc/my.cnf里面添加read_only=1即可,要重启服务
为了避免主机的主坏了,多加一台主机,主备
mode = read-write
destinations = 192.168.10.11,192.168.10.14这个是只认第一个ip,若第一个ip坏了才认第二个
弄两个主机作为主
然后将其中一个主机下面弄从机
多主不能同步日志,那个主下面的从就不能同步了
show variables like ’%slave%’;
log-slave-updates不知道在哪一台主机开启这个选项,可以试试
老师试试(先做的主从):主主
从机
清除中继日志重启服务
主机:
清除中继日志重启服务
主机:
进入数据库
查看master状态
从机:
进入数据库
change master to写完
start slave;
查看slave状态
成功
打开log日志
重启服务
再查看一下slave状态
成功
grant replication slave on *.* to slave@’zhu’identified by ‘123’;授权replication用户
start slave;
show master status\G查看master状态
主机:
进入数据库
change master to写完
从机:
创建数据库、表、插入数据
主机:
看同步过来没,发现确实同步了
从机:
show variables like ‘log_slave_updates’;
主机:
my.cnf里面添加log_slave_updates=1
重启服务
进入数据库
看log_slave_updates打开了没有
show binlog events in ‘binlog.000002’(新的日志);
ameoba:amoeba:是amoeba而不是ameoba
amoeba额摸一把(变形虫)
同样的端口和ip自动调动
不是通过端口,而是通过请求来实现,更加自动化
首先关闭主从服务
ameoba:192.168.10.14
master:192.168.10.11
slave1:192.168.10.12
slave2:192.168.10.13
从机:
stop slave;
主机:
stop slave;
分别在主机、从机1、从机2上创建一个相同的库、表,内容不一样
amoeba机(代理机):
scp -r amoeba需要jdk
cd amoeba
ls
tar xzvf jdk-7u67
ls
mv jdk1.7.0 /usr/local/jdk1.7
/usr/local/jdk1.7/bin/java -version
vim /etc/profile.d/java.sh
exprot JAVA_HOME=/usr/local/jdk1.7
export PATH=$JAVA_HOME/bin:$PATH保存退出
. /etc/profile.d/java.sh
java -version若这一步没有问题说明java环境配置好了
tar xf amoeba-mysql-binary-2.2.0.tar.gz
ls
发现解压之后是散的
mkdir /usr/local/amoeba
tar xf amoeba-mysql-binary-2.2.0.tar.gz -C/usr/local/amoeba
cd /usr/local/amoeba
ls
cd conf
ls
amoeba.xml和dbServers.xml是我们要弄清楚的
vim dbServers.xml
需要创建一个账户,代理服务器来登陆,第20行
主机和两个从机都执行下面的操作:
grant all on *.* to amoeba@代理服务器ip192.168.10.14identified by ‘123’;
flush privileges;
amoeba机:
需要创建一个账户,代理服务器来登陆,第26行:
mysql user的为amoeba
将26行复制到27行
name=”password” 123
46行name=”master”
49行ip11
53行name=”slave1”
56行ip12
将53行的整个dbServer复制到结束标签下面
name=”slave2”
ip为13
下面有个multiPool是分组,名字可以自己取,name=”readonly”,下面的property name=”loadbalance” 1
property name=”poolNames” master,slave1,slave2
账户和密码
客户端有哪些台
负载均衡的机器有哪些,定义一个负载均衡组
保存退出
vim amoebal.xml
第11行8066下面ipAddr 10.14
30行root
密码没有写
31行>admin<
33行密码为123
下面有个filter不用管
116行最后一个propertyname >master<默认连接到哪一台服务器
120行:把注释去掉:确定读服务器是那些
writePoll >master<
readPool >readonly<
保存退出
/usr/local/amoeba/bin/amoeba start &报错太小了
vim /usr/local/amoeba/bin/amoeba
找到58行把最后一个改成Xss256K
/usr/local/amoeba/bin/amoeba start &再启动
netstat -luantp | grep 8066
别人来啦:
mysql -uadmin -p123 -h代理 -P8066
select * from DB1.T1;可以实现读轮循环
create database DB2;
create database DB3;
主机:
有DB2和DB3,
从机1没有,从机2也没有DB2,DB3
写的话只会写入到主机里面
这是刚才amoeba.xml里面写的writePool和readPool
名字是在dbServers.xml里面定义
读操作在主机、从机1、从机2循环
写操作在主机里面
真是想不到云计算amoeba还会利用java包jdk
是amoeba而不是ameoba
/usr/local/amoeba/bin/amoeba stop是关闭服务
为什么在数据库里面可以查到主或从的表,在外面就只能查从,不能查主,而且在外面的话写两遍查询的可以查主和从的数据表,那是因为分配的少了,至少3台(1主两从)才能看到真正的效果。