准备环境
先准备三台虚拟机做主从复制
关闭防火墙
主从复制
要求一主两从
(主) 192.168.1.110
(从1) 192.168.1.122
(从2) 192.168.1.125
三台虚拟机都要安装mariadb
命令:yum -y install mariadb mariadb-server
编辑主配置文件
vim /etc/my.cnf
写入一下内容
server-id=1 编号
log-bin=mysql-binlog 启动日志
log-slave-updates=true 开启主从复制
随后重启:systemctl restart mariadb
(主)
(从1)
(从2)
登录MySQL
命令:MySQL -uroot -p
创建用户
grant replication slave on *.* to 'cjf'@'192.168.1.%' identified by '123456';
用户名:cjf 密码:123456
授予用户权限
命令:grant replication slave on *.* to 'cjf'@'192.168.1.%';
刷新
命令:flush privileges;
使用从服务器验证
(从1)
命令:mysql -ucjf -p123456 -h 192.168.1.110
(从2)
在主库上获取当前正在写入的二进制日志文件名和位置信息:
命令:show master status
从1 从2 服务器都写入
CHANGE MASTER TO
MASTER_HOST='192.168.1.110',(ip地址)
MASTER_USER='cjf',(用户名)
MASTER_PASSWORD='123456',(密码)
MASTER_LOG_FILE='mysql-binlog.000003',(名字)
MASTER_LOG_POS=674;(位置)
从1 、从2
输入命令:start slave;启动从服务器复制.
此时,从库将开始连接主库,并复制主库上的数据。当主从同步顺利进行时,执行以下命令可查看主从复制状态:
命令:show slave status\G;
两个yes表示成功
验证:
主库
使用 show databases 查看 主服务器数据库此刻的数据表
使用 show databases 查看 从服务器数据库此刻的数据表
在主服务器上使用命令:create database a; 创建a数据表
从库就会自动复制主库内容
amoeba服务
概念:
基本的原理是让主数据库处理事务性查询,而从数据库处理select查询,数据库复制被用来把事务性查询导致的改变更新同步到集群中的从数据库
只在主服务器上写,只在从服务器上读
登录amoeba服务,他本身连接主和从数据库,根据操作不同调用相应数据库,和负载均衡相似
至少五台主机
一台主数据库 192.168.1.110
两台以上从数据库 192.168.1.122 192.168.1.125
一台maoeba服务器 192.168.1.135
一个客户端 192.168.1.140
负载均衡,高可用性,SQL过滤,读写分离
端口8066
安装java环境
做以下步骤之前需要把原本的java删掉
命令: rm -rf /usr/bin/java
安装jdk 需要降jdk版本
把准备好的jdk包安装到虚拟机
做到这一步敲回车
ls 查看jdk已经出来了
把jdk移动到 /usr/local/下起名为 jdk1.6(1.6代表版本)
命令: mv jdk1.6.0_31/ /usr/local/jdk1.6
打开jdk 变量
vim /etc/profile
并添加以下内容(意思大概就是告诉系统你这个软件在哪)
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$HOME/bin
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin
输入命令:source /etc/profile
source 此命令是让文件生效
输入:Java -version
查看Java版本是否为1.6了
然后给其执行权限
命令:chmod +x jdk1.6
下一步安装amoeba
首先创建amoeba路径目录
mkdir /usr/local/amoeba
输入rz打开窗口找到amoeba的包点击打开
然后解压
解压到刚才创建的目录当中去
tar xf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
然后给其755的权限
递归把它目录的权限改成755
chmod -R 755 /usr/local/amoeba/
给完权限之后主从服务器都要给amoeba访问权限
命令:grant all on *.* to 'test'@'192.168.200.%' identified by '123.com';
tast用户是amoeba的默认用户
flush privileges;
(主)
(两从)
然后在amoeba服务器vim打开 /usr/local/amoeba/conf/amoeba.xml
vim /usr/local/amoeba/conf/amoeba.xml
在相应的行数修改一下内容
用户连接amoeba的设置
30 <property name="user">amoeba</property>
用户名
32 <property name="password">123456</property>
连接amaeba的密码
115 <property name="defaultPool">master</property>
默认池
118 <property name="writePool">master</property>
写的池
119 <property name="readPool">slaves</property>
读的池
配置完以上内容还是在amoeba
vim /usr/local/amoeba/conf/dbServers.xml
22 端口号
<property name="port">3306</property>
23 连接mysql的用户,MySQl授权的用户
<property name="schema">test</property>
这个用户可以不改,如果数据库设置的其他用户的话,只要下面的用户名是设置的用户即可
否则可以登录但是查不到数据显示断开数据连接
26 登录用户和授权用户一致
<property name="user">test</property>
29 MySQL授权的密码
<property name="password">123.com</property>
(以下【】里内容要复制进去)
【<dbServer name="slave2" parent="abstractServer">
<factoryConfig>
<!-- mysql ip -->
<property name="ipAddress">192.168.1.125</property>
</factoryConfig>
</dbServer>】
45 定义master 48 master的IP地址
<dbServer name="master" parent="abstractServer">
<property name="ipAddress">192.168.200.111</property>
52-56 定义从和从IP,几个从数据库几段
<dbServer name="slave1" parent="abstractServer">
<property name="ipAddress">192.168.200.112</property>
65 定义读的池slave
<dbServer name="slaves" virtual="true">
68 轮询
71 从数据库slave1 slave2
property name="loadbalance">1</property>
<property name="poolNames">slave1,slave2</property>
启动放入后台
命令: /usr/local/amoeba/bin/amoeba start &
等8066端口号出来
测试
客户端安装
yum -y install mariadb*
登录amoeba
mysql -uamoeba -p123456 -h 192.168.1.135 -P 8066
写入是主,读是从
关闭从的从数据功能不在同步数据,开启立马同步
用客户机进入读写分离amoeda服务器
mysql -uamoeba -p123456 -h 192.168.1.135 -P 8066
并USE mydb进入创建表
创建名为stst的数据表
CREATE TABLE stst (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
email VARCHAR(50),
created_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
随后在stst数据表中插入内容
INSERT INTO stst (name, email) VALUES ('John Doe', 'john.doe@example.com'),('Jane Smith','jane.smith@example.com');
查询 `stst` 表中的所有数据
SELECT * FROM stst;
验证过程
主插入数据
INSERT INTO stst (name, email) VALUES ('John Doe', 'john.doe@example.com'),('Jane Smith','jane.smith@example.com');
关掉两个从
然后从插入数据
从1
INSERT INTO stst (name, email) VALUES ('John Doe', '111@example.com'),('Jane Smith','jane.smith@111');
从2
INSERT INTO stst (name, email) VALUES ('John Doe', '222@example.com'),('Jane Smith','jane.smith@222');
再用客户端查看表就会看到轮巡
SELECT * FROM stst;