广告
返回顶部
首页 > 资讯 > 数据库 >数据库---mysql主从复制读写分离
  • 620
分享到

数据库---mysql主从复制读写分离

2024-04-02 19:04:59 620人浏览 泡泡鱼
摘要

Http://m.open-open.com/m/lib/view/1413274853450.html 原理及架构分析部署前准备下载好源码包存放位置要与脚本中对应  Mysql-5.5

Http://m.open-open.com/m/lib/view/1413274853450.html 原理及架构分析

部署前准备

下载好源码包存放位置要与脚本中对应  

Mysql-5.5.22.tar.gz,cmake-2.8.6.tar.gz,amoeba-mysql-binary-2.2.0.tar.gz,jdk-6u14-linux-x64.bin

selinux和iptables不做设置,关闭

系统光盘镜像为本地yum源,配置好yum文件

环境介绍:

服务器(master):192.168.100.155

从服务器(slave1,slave2):192.168.100.153-154

代理服务器(amoeba):192.168.100.156

应用客户端(app):192.168.100.157


1.搭建时间服务器:

主节点上安装ntp时间服务:192.168.100.155

yum -y install ntp

sed -i '/^server/s/^/#/g' /etc/ntp.conf 

cat <<END >>/etc/ntp.conf

server 127.127.1.0

fudge 127.127.1.0 stratum 8

END

/etc/init.d/ntpd restart

netstat -utpln |grep ntp

从节点同步时间:192.168.100.153-154

yum -y install ntpdate

/usr/sbin/ntpdate 192.168.100.155


2.安装mysql:192.168.100.153-155

提示:

[root@localhost ~]# cd bin/

[root@localhost bin]# vi mysql_install.sh 

#!/bin/bash

##第一配置yum,安装ncurses依赖包

yum -y install ncurses-*

#解压cmake,安装基础环境

tar zxvf /root/cmake-2.8.6.tar.gz -C /usr/src/

cd /usr/src/cmake-2.8.6

#配置,编译安装cmake

./configure &&gmake &&gmake install

##解压mysql

tar zxvf /root/mysql-5.5.22.tar.gz -C /usr/src/

cd /usr/src/mysql-5.5.22/

#cmake进行配置mysql

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql   #指定安装目录\

-DDEFAULT_CHARSET=utf8   #指定字符集为utf8 \

-DDEFAULT_COLLATioN=utf8_general_ci   ##指定字符校验 \

-DWITH_EXTRA_CHARSETS=all   ##支持额外字符集\

-DSYSCONFDIR=/etc/  ##指定配置文件位置

make &&make install   #编译安装

if [ -e /usr/local/mysql ];then

echo "mysql install successfully."

fi

:wq

[root@localhost bin]# vi mysql_config.sh 

#!/bin/bash

#1.复制配置文件

cp /usr/src/mysql-5.5.22/support-files/my-medium.cnf /etc/my.cnf

#2.添加系统服务

cp /usr/src/mysql-5.5.22/support-files/mysql.server /etc/init.d/mysqld

chmod +x /etc/init.d/mysqld

chkconfig --add mysqld

chkconfig mysqld  on

#3.优化PATH路径,执行命令时方便,单引号双引号都行

grep mysql /etc/profile

if [ $? -eq 0 ];then

echo "PATH is set."

else

echo "export PATH=$PATH:/usr/local/mysql/bin"  >>/etc/profile

source /etc/profile  ##执行文件

fi

#4.初始化mysql,创建用户,赋权

useradd -M -s /sbin/nologin mysql

chown -R mysql:mysql /usr/local/mysql

/usr/local/mysql/scripts/mysql_install_db  \

--basedir=/usr/local/mysql \

--datadir=/usr/local/mysql/data --user=mysql

#5.启动mysql,并设置为开机启动

if [ -e /tmp/mysql.sock ];then

/etc/init.d/mysqld restart

else

/etc/init.d/mysqld start

fi

chkconfig mysqld on

#6.修改密码,并提示密码

mysqladmin -u root passWord '123123'  &&echo "mysql root password is 123123"

:wq

3.配置MySQL主从复制:

1)主服务器配置:192.168.100.155

sed -i 's/^log-bin=.*/log-bin=master-bin\nlog-slave-updates=ture/g' /etc/my.cnf

sed -i '/^server-id/s/1/11/g' /etc/my.cnf 

/etc/init.d/mysqld restart

mysql -uroot -p123123

mysql> grant replication slave on *.* to 'myslave'@'192.168.100.%' identified by '123123';

mysql> flush privileges;

mysql> show master status;  ##记住File的及Position的值,此处为master-bin.000001和337

mysql> create database db_test;  ##创建测试数据库

mysql> quit

2)配置从服务器1:192.168.100.153

sed -i '/^server-id/s/1/22/g' /etc/my.cnf

sed -i '/^server-id/arelay-log=relay-log-bin\nrelay-log-index=slave-relay-bin.index' /etc/my.cnf

/etc/init.d/mysqld restart

mysql -uroot -p123123

mysql> change master to master_host='192.168.100.155',master_user='myslave',master_password='123123',master_log_file='master-bin.000001',master_log_pos=337;

mysql> start slave;

mysql> show slave status\G;  ##查看无error即可

mysql> show databases;  ##验证数据库是否同步

mysql> quit

3)配置从服务器2:192.168.100.154

sed -i '/^server-id/s/1/33/g' /etc/my.cnf

sed -i '/^server-id/arelay-log=relay-log-bin\nrelay-log-index=slave-relay-bin.index' /etc/my.cnf

/etc/init.d/mysqld restart

mysql -uroot -p123123

mysql> change master to master_host='192.168.100.155',master_user='myslave',master_password='123123',master_log_file='master-bin.000001',master_log_pos=337;

mysql> start slave;

mysql> show slave status\G;  ##查看无error即可

mysql> show databases;  ##验证数据库是否同步

mysql> quit


4.搭建MySQL读写分离:

1)安装软件:192.168.100.156

yum -y remove java

chmod +x jdk-6u14-linux-x64.bin 

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

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

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

:wq

source /etc/profile

java -version

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  ##验证

2)数据授权给amoeba读写权限:

mysql> grant all on *.* to linuxfan@'192.168.100.%' identified by '123123';   ##在192.168.100.155上完成

mysql> show grants for linuxfan@'192.168.100.%';   ##在192.168.100.153-154上查看是否同步了权限

3)修改配置文件:192.168.100.156

vim /usr/local/amoeba/conf/amoeba.xml

 30                                         <property name="user">amoeba</property>

 31 

 32                                         <property name="password">123456</property>

115                 <property name="defaultPool">master</property>

116 

117                 <property name="writePool">master</property>   ##注意删除<!--  -->的注释

118                 <property name="readPool">slaves</property>

:set nu  ##显示行号

:wq


vim /usr/local/amoeba/conf/dbServers.xml

 25                         <!-- mysql user -->

 26                         <property name="user">linuxfan</property>   ##该用户必须是上一步授权的用户

 27                         

 28                         <!--  mysql password -->   ##修改

 29                         <property name="password">123123</property>  ##删除下一行的“-->”

 44         <dbServer name="master"  parent="abstractServer">   ##修改为master

 45                 <factoryConfig>

 46                         <!-- mysql ip -->

 47                         <property name="ipAddress">192.168.100.155</property>  ##指定正确的master的ip

 51         <dbServer name="slave1"  parent="abstractServer">  ##修改为slave1

 52                 <factoryConfig>

 53                         <!-- mysql ip -->

 54                         <property name="ipAddress">192.168.100.153</property>  ##指定slave1的ip地址

 55                 </factoryConfig>

 56         </dbServer>

 57         <dbServer name="slave2"  parent="abstractServer">  ##添加如下6行,指定slave2的ip

 58                 <factoryConfig>

 59                         <!-- mysql ip -->

 60                         <property name="ipAddress">192.168.100.154</property>

 61                 </factoryConfig>

 62         </dbServer>

 64         <dbServer name="slaves" virtual="true">  ##修改为slaves

 70                         <property name="poolNames">slave1,slave2</property>  ##修改集群的成员名称用逗号隔开

:wq

/usr/local/amoeba/bin/amoeba start&   ##启动代理服务

netstat -utpln |grep 8066  ##验证



5.测试读写分离

1)验证主从复制:192.168.100.157

yum -y install mysql

mysql -uamoeba -p123456 -h 192.168.100.156 -P 8066   ##登录db集群192.168.100.157

mysql>show databases;

mysql> use db_test;

mysql> create table linuxfan(id int(10),name varchar(10),address varchar(20));

在192.168.100.153-155上查看结果:

mysql -uroot -p123123 

mysql> use db_test;

mysql> show tables;   ##已然同步


2)关闭slave1,slave2的复制功能:192.168.100.153-154

mysql> stop slave;


3)分别在master,slave1,slave2上创建不同的数据:

master:

mysql> insert into linuxfan values(1,'hehe','this is master');

slave1:

mysql> insert into linuxfan values(2,'hehe','this is slave1');

slave2:

mysql> insert into linuxfan values(3,'hehe','this is slave2');


4)应用客户端验证读:192.168.100.157

mysql> select * from linuxfan;  ##第一次查询

+------+------+----------------+

| id   | name | address        |

+------+------+----------------+

|    2 | hehe | this is slave1 |

+------+------+----------------+

1 row in set (0.02 sec)


mysql> select * from linuxfan;   ##第二次查询

+------+------+----------------+

| id   | name | address        |

+------+------+----------------+

|    3 | hehe | this is slave2 |

+------+------+----------------+

1 row in set (0.01 sec)

mysql> select * from linuxfan;   ##第三次查询

+------+------+----------------+

| id   | name | address        |

+------+------+----------------+

|    2 | hehe | this is slave1 |

+------+------+----------------+

1 row in set (0.00 sec)


5)应用客户端上验证写:

mysql> insert into linuxfan values(4,'hehe','app write test');  ##写入数据

Query OK, 1 row affected (0.02 sec)


mysql> select * from linuxfan;   ##查不到刚写入的数据

+------+------+----------------+

| id   | name | address        |

+------+------+----------------+

|    3 | hehe | this is slave2 |

+------+------+----------------+

1 row in set (0.01 sec)


master上验证:

mysql> select * from linuxfan;   ##查到数据

+------+------+----------------+

| id   | name | address        |

+------+------+----------------+

|    1 | hehe | this is master |

|    4 | hehe | app write test |

+------+------+----------------+

2 rows in set (0.00 sec)


总结

app写入数据时,amoeba会将数据路由到master上进行存储,app读取数据时,amoeba会将读的请求以轮询的方式发给slaves组(slave1+slave2),实现读写分离。

master和slaves间配置了主从复制,保证了数据的一致性。

主从复制实现高可用   读写分离实现高性能

您可能感兴趣的文档:

--结束END--

本文标题: 数据库---mysql主从复制读写分离

本文链接: https://www.lsjlt.com/news/36498.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 数据库---mysql主从复制读写分离
    http://m.open-open.com/m/lib/view/1413274853450.html 原理及架构分析部署前准备下载好源码包存放位置要与脚本中对应  mysql-5.5...
    99+
    2022-10-18
  • MySQL数据库主从复制与读写分离
    目录一.主从复制主从复制三线程主从复制的过程:主从复制的策略:主从复制高延迟二.读写分离读写分离概念读写分离原因与场景总结一.主从复制        主从复制:在实际的生产中,为了解...
    99+
    2022-11-12
  • MySQL 主从复制与读写分离
             在实际生产环境中,如果对数据库的读写都在同一块数据库服务器中操作,无论是在安全性、高可用性,还是高并发等各个...
    99+
    2022-10-18
  • MYSQL的主从复制与读写分离
    在实际生产环境中,如果对数据库的读和写都在同一个数据库服务器中操作,无论是安全性,高可用性,还是高并发性等各个方面都是不能满足实际需求,因此,一般来说都是通过主从复制的方式来同步诗句,再通过读写分离来提升数...
    99+
    2022-10-18
  • Mysql数据库的主从复制与读写分离精讲教程
    目录前言一、MySQL主从复制1.支持的复制类型2.主从复制的工作过程是基于日志3.请求方式4.主从复制的原理5.MySQL集群和主从复制分别适合在什么场景下使用6.为什么使用主从复...
    99+
    2022-11-12
  • Mysql数据库的主从复制与读写分离怎么实现
    这篇文章主要介绍“Mysql数据库的主从复制与读写分离怎么实现”,在日常操作中,相信很多人在Mysql数据库的主从复制与读写分离怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Mysql数据库的主从复制...
    99+
    2023-06-21
  • 详解MySQL主从复制及读写分离
    目录前言一、相关概述二、读写分离三、MySQL主从复制实验部署四、MySQL读写分离实验前言 在企业实际应用中,成熟的业务通常数据量都比较大,而单台MySQL服务器在安全性、高可用性...
    99+
    2022-11-12
  • MySQL(4)-AB主从复制与读写分离
        本篇博客介绍的是通过 主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy)来提升数据库的并发负载能力实现mysql高可用性    首先 , 我们先了解AB主...
    99+
    2022-10-18
  • MySQL主从复制与读写分离的原理
    这篇文章主要为大家分享MySQL主从复制与读写分离的原理。文中还介绍了如何配置和验证主从复制与读写分离的实验,希望大家通过这篇文章能有所收获。MySQL主从复制与读写分离一、前言前面我们已经对MySQL数据...
    99+
    2022-10-18
  • 搭建mysql的主从复制和读写分离
    搭建mysql的主从复制和读写分离   +--------+           &...
    99+
    2022-10-18
  • CentOS7上部署Mysql主从复制与读写分离
    在实际生产环境中,如果对数据库的读和写都在同一个数据库服务器中操作,无论是在安全性,高可用性,还是高并发等各方面都是完全不能满足实际需求的,因此一般来说都是通过主从复制(Master-Slave)的方式来同...
    99+
    2022-10-18
  • mysql主从复制及读写分离(附安装包)
    实验目的:在实际生产环境中,如果对数据库的读和写都在同一个数据库服务器中操作,无论在安全性、高可用性,还是高并发等各个方面都是完全不能满足实际需求的,因此,一般需要通过主从复制(master-slave)的...
    99+
    2022-10-18
  • amoeba实现mysql读写分离+主从复制架构
    一、环境系统:centos6.5mysql版本:mysql5.6master服务器:192.168.1.21slave服务器: 192.168.1.100master写 slave读二、实现mysql主从复...
    99+
    2022-10-18
  • Mysql主从复制与读写分离图文详解
    文章思维导图 为什么使用主从复制、读写分离 主从复制、读写分离一般是一起使用的。目的很简单,就是为了提高数据库的并发性能。 你想,假设是单机,读写都在一台MySQL上面完成,性...
    99+
    2022-11-11
  • mysql主从及读写分离
     主从同步1 主配置把237配置为主数据库服务器  授权用户从42数据库服务器连接自己的时候有拷贝数据的权限grant   replication &nbs...
    99+
    2022-10-18
  • SpringBoot环境-MySQL主从复制,读写分离的实现
    目录 概述 环境 主从复制 读写分离 概述  记录在MySQL数据库中主从复制以及SpringBoot环境操作MySQL数据库读写分离的实现步骤。  背景 :因为我们在对数据库进行操作时,如果读写操作都由一台数据库承担的话压...
    99+
    2023-09-06
    mysql 数据库 java linux
  • mysql主从复制读写分离与高可用配置
    一、说明 前面我们说了mysql的安装配置(并提供一键安装脚本),mysql语句使用以及备份恢复mysql数据;本次要介绍的是mysql的主从复制,读写分离;及高可用MHA;环境如下:master:Cent...
    99+
    2022-10-18
  • 利用Amoeba实现MySQL主从复制和读写分离
    在实际生产环境中,如果对数据库的读和写都在同一个数据库服务器中操作,无论是在安全性、高可用性,还是高并发等各个方面都是完全不能满足实际需求的,因此,一般来说都是通过主从复制(Master-Slave)的方式...
    99+
    2022-10-18
  • MySQL中如何实现主从复制与读写分离
    MySQL中如何实现主从复制与读写分离,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1,mysql的配置CentOS 5.x,6.0编译安装N...
    99+
    2022-10-18
  • MySQL中怎么实现主从复制及读写分离
    MySQL中怎么实现主从复制及读写分离?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、相关概述主从复制:主数据库(Master)发送更新事件到从数据库(Slave),从数...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作