3.3.5验证主从同步
#在主服务器上创建一个库 create database ceshi; • 1 • 2
#在从服务器上查看 show databases; • 1 • 2
注:如果需要新加入从服务器,需要先锁住主服务器(防止别人写入数据造成数据丢失),然后将主服务器的数据全部备份到新的从服务器上,然后在新添加的从服务器上 master_log_file 和 master_log_pos 的值是最新的。
锁库
flush tables with read lock;
解锁
unlock tables;
3.4搭建MySQL读写分离
3.4.1安装java环境
总体操作:
################安装 Java 环境############### 1.#下载安装包:jdk-6u14-linux-x64.bin、amoeba-mysql-binary-2.2.0.tar.gz cd /opt 2.#把jdk复制到/usr/local下 cp jdk-6u14-linux-x64.bin /usr/local/ 3.#赋予jdk权限并执行 chmod +x /usr/local/jdk-6u14-linux-x64.bin cd /usr/local/ ./jdk-6u14-linux-x64.bin #一路回车到底,最后输入yes 自动安装 4.#jdk改个名字 mv jdk1.6.0_14/ jdk1.6 5.#配置环境并刷新 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 source /etc/profile #刷新配置文件 java -version
分部演示:
①下载 安装包
②把jdk复制到/usr/local下
cp jdk-6u14-linux-x64.bin /usr/local/
③赋予jdk权限并执行
③赋予jdk权限并执行
chmod +x /usr/local/jdk-6u14-linux-x64.bin cd /usr/local/ ./jdk-6u14-linux-x64.bin #一路回车到底,最后输入yes 自动安装
④把jdk改个名字
mv jdk1.6.0_14/ jdk1.6
⑤配置环境并刷新
配置环境并刷新 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 source /etc/profile #刷新配置文件 java -version #查看版本
3.4.2配置amoeba
总体操作:
############## 安装amoeba ########### 1.#在/usr/local目录下创建amoeba目录 mkdir /usr/local/amoeba 2.#切换至opt解压amoeba cd /opt/ tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba cd /usr/local/ 切换至目录查看 3.#给目录/usr/local/amoeba赋予执行权限 chmod -R 755 /usr/local/amoeba/ 4.#运行amoeba /usr/local/amoeba/bin/amoeba
分部演示:
①在/usr/local目录下创建amoeba目录并解压amoeba
mkdir /usr/local/amoeba 1
②切换至opt解压amoeba
cd /opt/ tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba cd /usr/local/ 切换至目录查看
③给目录/usr/local/amoeba赋予执行权限并运行amoeba
#给目录/usr/local/amoeba赋予执行权限 chmod -R 755 /usr/local/amoeba/ #运行amoeba /usr/local/amoeba/bin/amoeba # 显示amoeba start|stop就算是成功了
3.4.3配置amoeba读写分离
总体操作:
###########配置 Amoeba读写分离 #### 1.#先在Master、slave1、slave2mysql上开放权限给 Amoeba 访问 grant all on *.* to test@'192.168.145.%' identified by '123456'; flush privileges; 2.#备份amoeba配置 cd /usr/local/amoeba/conf/ cp amoeba.xml amoeba.xml.bak cp dbserver.dtd dbserver.dtd.bak 3.#修改amoeba配置 vim amoeba.xml 30 <property name="user">amoeba</property> #设置登录用户名 32<property name="password">123456</property> #设置密码 115<property name="defaultPool">master</property> #设置默认池为master 118<property name="writePool">master</property> #设置写池 119<property name="readPool">slaves</property> #设置读池 vim dbServers.xml 23 <!-- <property name="schema">test</property> --> #23行注释 26<property name="user">test</property> #设置登录用户 28 <!-- mysql password --> #删除 29<property name="password">123456</property> #解决28注释,添加密码 45<dbServer name="master" parent="abstractServer"> #服务池名 48<property name="ipAddress">192.168.145.10</property> #添加地址 52<dbServer name="slave1" parent="abstractServer"> 55<property name="ipAddress">192.168.145.21</property> 复制6行 添加另一从节点 59<dbServer name="slave2" parent="abstractServer"> 62<property name="ipAddress">192.168.145.12</property> 66<dbServer name="slaves" virtual="true"> #定义池名 72<property name="poolNames">slave1,slave2</property> #写上从节点名 4.#启动amoeba,并测试 amoeba start netstat -ntap |grep java
分部演示:
①先在master、slave1、slave2的mysql上开放权限给amoeba访问
grant all on *.* to test@'192.168.145.%' identified by '123456'; flush privileges;
②备份amoeba配置
cd /usr/local/amoeba/conf/ cp amoeba.xml amoeba.xml.bak cp dbserver.dtd dbserver.dtd.bak
③修改amoeba配置
vim amoeba.xml 30 <property name="user">amoeba</property> #设置登录用户名 32<property name="password">123456</property> #设置密码 115<property name="defaultPool">master</property> #设置默认池为master 118<property name="writePool">master</property> #设置写池 119<property name="readPool">slaves</property> #设置读池 vim dbServers.xml 23 <!-- <property name="schema">test</property> --> #23行注释 26<property name="user">test</property> #设置登录用户 28 <!-- mysql password --> #删除 29<property name="password">123456</property> #解决28注释,添加密码 45<dbServer name="master" parent="abstractServer"> #服务池名 48<property name="ipAddress">192.168.137.20</property> #添加地址 52<dbServer name="slave1" parent="abstractServer"> 55<property name="ipAddress">192.168.137.15</property> 复制6行 添加另一从节点 59<dbServer name="slave2" parent="abstractServer"> 62<property name="ipAddress">192.168.137.10</property> 66<dbServer name="slaves" virtual="true"> #定义池名 72<property name="poolNames">slave1,slave2</property> #写上从节点名
④启动amoeba,并测试
amoeba start 或 /usr/local/amoeba/bin/amoeba start & netstat -ntap |grep java
3.4.4进行主从复制测试
①这边就把amoeba机器当成客户机进行测试(也可以使用另一台机器当客户端)
yum install mariadb mariadb-server.x86_64 -y
②登入并查看数据库
mysql -uamoeba -p123456 -h 192.168.145.11 -P8066
③测试同步
#在主服务器服务器上新建表 use class; create table test(id int(10),name char(40)); show tables; #在客户机上,插入数据会同步到所有数据库中 use class; insert intotest values(3,'ll');
④在从服务器上查看
3.4.5进行读写分离测试
①两台从服务器上
stop slave; #关闭同步
#在主服务器 上 insert into test values('4','开'); #在slave1上 insert into test values('2','始'); #在slave2上 insert into test values('3','le');
四、总结
我们重点要熟知mysql的主从复制原理和读写分离的原理,这个是重中之重,必须掌握;MySQL有四种同步方式:异步复制(Async Replication)、同步复制(sync Replication)、半同步复制(Async Replication)、增强半同步复制(lossless Semi-Sync Replication);MySQL读写分离的俩种实现方式:基于程序代码内部实现、基于中间代理层实现。