文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

mysql主从复制及读写分离(附安装包)

2024-04-02 19:55

关注

实验目的:
在实际生产环境中,如果对数据库的读和写都在同一个数据库服务器中操作,无论在安全性、高可用性,还是高并发等各个方面都是完全不能满足实际需求的,因此,一般需要通过主从复制(master-slave)的方式来同步数据,再通过读写分离提升数据库的并发负载能力。
主从复制
(一)原理
复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。
(二)mysql支持的复制类型

(1)基于语句的复制: 在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。一旦发现没法精确复制时, 会自动选着基于行的复制。
(2)基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍. 从mysql5.0开始支持
(3)混合类型的复制: 默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。

(三)复制工作过程
mysql主从复制及读写分离(附安装包)
(1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
(2) slave将master的binary log events拷贝到它的中继日志(relay log);
(3) slave重做中继日志中的事件,将更改应用到自己的数据上。
此外,在master中也有一个工作线程:和其它MySQL的连接一样,slave在master中打开一个连接也会使得master开始一个线程。复制过程有一个很重要的限制——复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作。

读写分离
(一)原理
简单来说,读写分离就是只在主服务器上写,只在从服务器上读。基本原理是让主数据库处理事务性查询,而从数据库处理select查询。数据库复制被用来把事务性查询导致的变更同步到群集中的从数据库中。
(二)读写分离工作过程
基于中间代理层实现:Mysql-Proxy Amoeba'
本实验中用amoeba实现
mysql主从复制及读写分离(附安装包)
实验拓扑:
mysql主从复制及读写分离(附安装包)
实验环境:

主机 操作系统 IP地址 主要软件
master CentOS-7-x86_64 192.168.37.128 mysql-5.5.24
slave1 CentOS-7-x86_64 192.168.37.131 mysql-5.5.24
slave2 CentOS-7-x86_64 192.168.37.132 mysql-5.5.24
amoeba CentOS-7-x86_64 192.168.37.130 jdk-6u14-linux-x64.bin ;amoeba-mysql-binary-2.2.0.
client CentOS-7-x86_64 192.168.37.130 ---

实验安装包:
链接:https://pan.baidu.com/s/1bHbR0fPzmVrZf5rGB3UNCA 密码:8tho

实验过程:
一、时间同步
主服务器:
1、安装ntp,编辑配置文件

   yum install ntp -y                     #如果已安装忽略此步骤
   vim /etc/ntp.conf                     #末尾添加
   server 127.127.37.0             #本地是时钟源
   fudge 127.127.37.0 stratum 8          #设置时间层级为8/时钟可以扩散8层

2、开启服务

   systemctl start ntpd.service        #开启服务
   systemctl stop firewalld.service
   setenforce 0

从服务器:
3、安装ntp、ntpdate,开启服务

yum install ntp ntpdate -y          #如果已安装忽略此步骤
systemctl start ntpd.service        
systemctl stop firewalld.service
setenforce 0

4、开启时间同步

/usr/sbin/ntpdate 192.168.37.128

mysql主从复制及读写分离(附安装包)
二、主从复制
5、在三台服务器上手工编译安装mysql5.5(操作过程概述如下)
//安装环境

yum install gcc gcc-c++ make cmake ncurses-devel bison libaio-devel

//解压安装包

mkdir /opt/abc
mount.cifs //192.168.37.1/SHARE /opt/abc
tar zxvf /opt/abc/mysql-5.5.24.tar.gz -C /opt/

//编译安装

cd /opt/mysql-5.5.24
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DSYSCONFDIR=/etc \
-DMYSQL_DATADIR=/home/mysql/ \
-DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_SSL=system \
-DMYSQL_TCP_PORT=3306 \
-DENABLE_DOWNLOADS=1 \
-DWITH_SSL=bundled

make && make install

//mysql配置文件复制

cp support-files/my-medium.cnf /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 35 mysqld on

//环境变量设置

echo "PATH=$PATH:/usr/local/mysql/bin/" >> /etc/profile
. /etc/profile #(注意:"."后面有空格)

//创建管理用户mysql
useradd -s /sbin/nologin mysql
chown -R mysql.mysql /usr/local/mysql

//数据初始化

/usr/local/mysql/scripts/mysql_install_db \
--user=mysql \
--ldata=/var/lib/mysql \
--basedir=/usr/local/mysql \
--datadir=/home/mysql

//让系统识别mysql

ln -s /var/lib/mysql/mysql.sock /home/mysql/mysql.sock
vi /etc/init.d/mysqld
basedir=/usr/local/mysql
datadir=/home/mysql

//开启服务

service mysqld start

6、主服务器:
//编辑配置文件

vim /etc/my.cnf
service mysqld restart
mysql

mysql主从复制及读写分离(附安装包)
//给从服务器授权

mysql>grant replication slave on . to 'myslave'@'192.168.37.%' identified by '123456'; #授权给myslave用户
#replication 复制
mysql>flush privileges; #刷新权限
mysql>show master status; #查看主服务器日志文件

mysql主从复制及读写分离(附安装包)

7、从服务器:
//编辑配置文件

vim /etc/my.cnf
service mysqld restart
注意:此处启动失败,可重新加载环境变量,或者查看进程是否被占用,重新启动即可
mysql

mysql主从复制及读写分离(附安装包)
mysql主从复制及读写分离(附安装包)
//从服务器同步主服务器
slave1:
注意:指定主服务器(操作前查看主服务器日志文件位置,会不断变化)
mysql主从复制及读写分离(附安装包)

change master to master_host='192.168.37.128',master_user='myslave',master_password='123456',master_log_file='master-bin.000005',master_log_pos=107;
start slave; #开启主从复制
show slave status \G; #看到两个yes

mysql主从复制及读写分离(附安装包)
slave2:

change master to master_host='192.168.37.128',master_user='myslave',master_password='123456',master_log_file='master-bin.000005',master_log_pos=828;
start slave; #开启主从复制
show slave status \G; #看到两个yes

mysql主从复制及读写分离(附安装包)
8、测试主从复制:主服务器上create database aaa,查看从服务器上是否存在数据库aaa
mysql主从复制及读写分离(附安装包)
mysql主从复制及读写分离(附安装包)

三、Amoeba安装(识别java语言)与配置
9、首先关闭防火墙

systemctl stop firewalld.service
setenforce 0

10、共享jdk安装包,复制到/usr/local目录下

mkdir /opt/abc
mount.cifs //192.168.37.1/SHARE /opt/abc
cd /opt/abc
cp jdk-6u14-linux-x64.bin /usr/local

11、执行jdk文件

./jdk-6u14-linux-x64.bin

mysql主从复制及读写分离(附安装包)
12、使系统识别jdk文件,其工作目录全部放到/usr/local下

mv jdk1.6.0_14/ /usr/local/jdk1.6

13、环境变量修改,系统可以运用安装文件的命令

vim /etc/profile
mysql主从复制及读写分离(附安装包)
source /etc/profile #刷新,使环境变量生效

14、安装amoeba

mkdir /usr/local/amoeba #新建目录
cd /opt/abc
tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/ #解压安装包到新建目录下
chmod -R 755 /usr/local/amoeba/ #保证755权限

15、开启amoeba

/usr/local/amoeba/bin/amoeba

mysql主从复制及读写分离(附安装包)

16、在三台服务器上添加权限,开放给amoeba访问

mysql>grant all on . to test@'192.168.37.%' identified by '123.com';
mysql>flush privileges;

17、配置代理服务器amoeba

vim /usr/local/amoeba/conf/amoeba.xml #配置文件

mysql主从复制及读写分离(附安装包)
mysql主从复制及读写分离(附安装包)

vim conf/dbServers.xml #数据库配置文件
26行
<property name="user">"test"</property> 用test身份读取mysql数据
29行
<property name="password">123.com</property>
42--主服务器地址
<dbServer name="master" parent="abstractServer">
<factoryConfig>
<property name="ipAddress">192.168.37.128</property>
50--从服务器
<dbServer name="slave1" parent="abstractServer">
<factoryConfig>
<property name="ipAddress">192.168.37.131</property>
64行--服务器池
<dbServer name="slaves" virtual="true">
<property name="poolNames">slave1,slave2</property>

18、开启amoeba,查看端口

/usr/local/amoeba/bin/amoeba start&
netstat -ntap | grep java

四、客户机测试(此处客户机与amoeba同用一台虚拟机)
19、简易安装mysql

yum install mysql -y

20、登录mysql,进行如下操作

mysql -u amoeba -p123456 -h 192.168.37.130 -P8066

mysql主从复制及读写分离(附安装包)

21、从服务器:(作测试使用,实际生产环境不会停掉)

stop slave;

主服务器:只负责写入,amoeba读不到

insert into info values(1,'zhangsan',99);

slave1:

insert into info values(2,'lisi',88);

slave2:

insert into info values(3,'wangwu',77);

mysql主从复制及读写分离(附安装包)
在客户机查看:
mysql主从复制及读写分离(附安装包)

至此,实验已全部完成!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯