扩展:主主复制
如果需要将一个slave1服务器作为另一台slave2的master,
1):在slave1上修改my.cnf,在[mysqld]模块添加
log-bin=master-bin
log-slave-updates=true
并重启mysql
2):在slave1上执行以下命令创建一个授权用户,用于在slave2上链接slave1
mysql> grant replication slave on *.* to 'myslave'@'192.168.10.%' identified by '123456' ;
mysql> flush privileges;
mysql> show master status;
3):show出来的信息做为slave2上连接slave1时的参数
重启Mysql服务不会影响主从关系
搭建Mysql读写分离
1:在主机amoeba上安装java环境
[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 ~]# vi /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
[root@localhost local]# source /etc/profile
[root@localhost local]# java -version ##查询版本,确定java安装成功
2:安装并配置amoeba
[root@localhost local]# 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/amoeba
amoeba start|stop ##有此提示表示成功
3:配置amoeba读写分离
(1)在三个mysql服务器中开放权限给amoeba访问(只在master中即可,会复制到slave中)
mysql> grant all on *.* to test@'192.168.10.%' identified by '123.com';
(2)在amoeba上配置amoeba.xml文件
[root@localhost amoeba]# systemctl stop firewalld
[root@localhost ~]# cd /usr/local/amoeba/conf
[root@localhost conf]# vi amoeba.xml
修改红色部分,此处设置的是mysql客户端连接amoeba时用的账号和密码
amoeba ##30行
123456 ##32行
${amoeba.home}/conf/access_list.conf
。。。。。。。。略。。。。。。。
${amoeba.home}/conf/rule.xml
${amoeba.home}/conf/ruleFunctionMap.xml
${amoeba.home}/conf/functionMap.xml
1500
master ##115行
master ##118行
slaves ##119行此处的注释去掉
true
(3)编辑dbServer.xml文件
[root@localhost conf]# vi dbServers.xml
修改(注意去掉注释),slave2的复制一个slave1(如果只有一个从服务器,就不用复制)
test ##26行
123.com ##29行,去掉注释符
。。。。。。。。。略。。。。。。。。。。
master" parent="abstractServer"> ##45行
192.168.1.102 ##48行
slave1" parent="abstractServer"> ##52行
192.168.1.103 ##55行
slaves" virtual="true"> ##59行
1
slave1 ##65行(如果有多个从服务器,就再写上一个,逗号分隔)
(4)启动amoeba软件
[root@localhost ~]# cd /usr/local/amoeba/
[root@localhost amoeba]# bin/amoeba start &
注:当在前台运行某个作业时,终端被该作业占据;而在后台运行作业时,它不会占据终端。可以使用&命令把作业放到后台执行
[root@localhost amoeba]# netstat -anpt | grep java
如果能看到8066和3306两个端口号,证明amoeba是正常开启的。
4:测试
(1):在client上
[root@localhost yum.repos.d]# yum -y install mariadb
[root@localhost yum.repos.d]# mysql -u amoeba -p 123456 -h 192.168.1.12 -P 8066
Enter password: ##密码:123456
(2):在master服务器上创建表
mysql> use db_test;
mysql> create table zang (id int(10),name varchar(10),address varchar(20));
(3):在两个slave服务器上
mysql> stop slave;
(4):在master服务器上
mysql> insert into zang values ('1','zhang','this_is_master');
(5):在slave1上
mysql> use db_test;
mysql>insert into zang values ('2','zhang','this_is_slave1');
(6):在slave2上
mysql> use db_test;
mysql>insert into zang values ('3','zhang','this_is_slave2');
(7):在client上查询三次
mysql> use db_test;
mysql> select * from zang;
对比三次的输出,验证读操作,发现没有在master写入的数据,而slave上写的能查到
(8):在client上
mysql>insert into zang values ('4','zhang','this_is_client');
mysql> select * from zang; ##发现在client上查询不到自己写的数据
(9):在master上
mysql> select * from zang; ##能查到在client上写入的数据,说明写操作在master上
(10):在slave上
mysql> select * from zang; ##发现没有数据,说明写入的操作是在master上
导出导入数据库:
[root@localhost ~]# mysqldump -u root -p --database auth > /opt/auth.sql
[root@localhost data]# mysql -u root -p < /opt/ auth.sql