目录
为什么进行复制?
保证数据的完整性
谁复制谁?
从角色复制主角色的数据
主从服务数据的流向过程
主mysql将完成的sql语句放在mysql-bin.00000x里面保存
主mysql中的dump进程检测数据变化则通知从数据库的i/o进程
从数据库的i/o进程把数据放入本地的中继日志
从数据库的sql线程读取本地中继日志数据,并同步到自己的数据库中
mysql中的主从复制默认是异步复制
因为只有数据变化时dump进程才会通知从服务器 这样就会出现问题.如果主数据库坏了,如果现在写数据的话就会出现数据丢失
问题的解决办法
解决数据丢失的问题-------半同步复制
解决从数据库复制延迟的问题-------并行复制
mysql的主从复制的设置
需要主数据库1个 从服务器两个
一 设置时间同步
首先需要设置时间同步不然从服务器获取数据就会延迟或者异常
yum install ntp ntpdate -y 安装ntp软件来达到时间的同步
ntpdate ntp.aliyun.com 主服务器同步阿里云的时间 从服务器亦可以同步阿里云或者主服务器的时间都是可以的
vim /etc/ntp.conf 编辑ntp的配置文件
systemctl start ntpd 开启时间同步
从服务器也需要装时间同步
二 更改主从服务器配置文件
先改主服务器vim /etc/my.cn
systemct restart mysqld
进入mysql中配置
flush privileges; 刷新权限表
show master status; 查看主服务器数据库状态
从服务器的配置
vim /etc/my.cnf
然后进入数据库中
start slave; 开启从服务器
show slave status\G查看从服务器状态
另一台服务器也是同理
测试数据同步
在主服务器创建一个数据库
三在amoeba搭载读写分离
因为 Amoeba 基于是 jdk1.5 开发的,所以官方推荐使用 jdk1.5 或 1.6 版本,高版本不建议使用。
cd /opt/
cp jdk-6u14-linux-x64.bin /usr/local/
cd /usr/local/
chmod +x jdk-6u14-linux-x64
./jdk-6u14-linux-x64.bin
//按yes,按enter
mv jdk1.6.0_14/ /usr/local/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 刷新下profile
java -version
##安装 Amoeba软件##
mkdir /usr/local/amoeba
tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
chmod -R 755 /usr/local/amoeba/
/usr/local/amoeba/bin/amoeba
配置amoeba服务
vim amoeba.xml
/usr/local/amoeba/bin/amoeba start& 启动
netstat -anpt | grep java #查看8066端口是否开启,默认端口为TCP 8066
这样就显示你的读写分离是正常的
四 验证读写分离实验
原理在主服务器上插入库和表 库和表会显示在amoeba上在从服务器上插入表不会显示在amoeba上
查看从服务器
关闭两个从服务器的同步数据stop slave;
mysql -u amoeba -p123456 -h 192.168.133.6 -P8066登陆amoeba账户
在验证写的在主服务器在插入一个数据
打开从服务器的同步
start slave;
/