侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130555 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

搭建 MySQL主从复制与读写分离

2024-05-10 星期五 / 0 评论 / 0 点赞 / 9 阅读 / 10341 字

搭建 MySQL主从复制与读写分离案例概述 :在实际环境中 ,如果对数据库的读和写都在同一个数据库服务中操作 ,无论实在安全性、高可用性,还是高并发等各个方面都是完全不能满足实际需求的 ,因此 ,一般

搭建 MySQL主从复制与读写分离


案例概述 :

在实际环境中 ,如果对数据库的读和写都在同一个数据库服务中操作 ,无论实在安全性、高可用性,还是高并发等各个方面都是完全不能满足实际需求的 ,因此 ,一般来说都只通过主从复制的方式来同步数据 ,在通过读写分离来提升数据库的并发负载能力 ,这样的方案来进行部署与实施 。

环境拓补图 :

本案环境 :

主机操作系统IP地 址主要软件
主服务器CentOS 7.3 x86_64192.168.217.130NTP
从服务器1CentOS 7.3 x86_64192.168.217.131ntpdate
从服务器2CentOS 7.3 x86_64192.168.217.132ntpdate
amoedaCentOS 7.3 x86_64192.168.217.129jdk-6u14-linux-x64.bin amoeba-mysql-binary-2.2.0.tar.gz
客户端CentOS 7.3 x86_64192.168.217.128mysql

案例实施:

配置主服务器 :

  1. 在主服务器上搭建时间同步服务, 安装NTP :

    yum install ntp -y
  2. 配置 NTP :

    vim /etc/ntp.conf                             #编辑配置文件 添加server 127.127.217.0                     #设置本地是时钟源fudge 127.127.217.0 stratum 8      #设置时间层级为8(限制在15内)#127.127  ntp时间服务器的保留ip地址,作用是使用本机作为客户端的时间服务器
  3. 开启服务 :

    systemctl start ntpd.service systemctl stop firewalld.service setenforce 0
  4. 配置 MySQL 配置文件 :

    vim /etc/my.cnf        #在配置文件添加[mysqld]                     server-id = 11                    #修改   ID 主从不一样log-bin=master-bin            #开启二进制日志log-slave-updates=true     #开启从服务器同步主服务器二进制日志
  5. 重启服务, 进入数据库给从服务器授权 :

    systemctl restart mysqld.service 
    mysql -u root  -pmysql>GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.217.%' IDENTIFIED BY '123456';#允许从服务器使用 myslave账户 登录数据库 mysql> FLUSH PRIVILEGES;    #刷新权限mysql> show master status;       #查看主服务器状态+-------------------+----------+--------------+------------------+-------------------+| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+-------------------+----------+--------------+------------------+-------------------+| master-bin.000001 |      604 |              |                  |                   |+-------------------+----------+--------------+------------------+-------------------+1 row in set (0.00 sec)

    记住主服务器的二进制日志文件名和偏移量 。

配置从服务器 :

  1. 安装 ntpdate 同步时间 :

    yum install ntpdate -y      #从服务器上安装的 [root@localhost ~]# systemctl start ntpdate.service                   #开启服务[root@localhost ~]# /usr/sbin/ntpdate 192.168.217.130            #时间同步6 Jul 09:45:44 ntpdate[2941]: adjust time server 192.168.217.130 offset -0.233224 sec   #同步成功systemctl stop firewalld.service setenforce 0
  2. 配置MySQL配置文件 :

    vim /etc/my.cnf[mysqld]    server-id = 12      # id 不一样  别一台从服务器同样配置 id 不同即可relay-log=relay-log-bin      #开启中继日志relay-log-index=slvae-relay-bin.index      #指定位置和名称
  3. 重启服务 ,进入mysql :

    systemctl restart mysqld.service 
    mysql -u root -pmysql> change master to master_host='192.168.217.130',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=604;   #  主服务器地址、授权用户、二进制日志名称、偏移量 。mysql> start slave;   # 开启从服务器mysql> show slave status/G;                 #查看从服务器状态*************************** 1. row ***************************           Slave_IO_State: Waiting for master to send event              Master_Host: 192.168.217.130              Master_User: myslave              Master_Port: 3306            Connect_Retry: 60          Master_Log_File: master-bin.000001      Read_Master_Log_Pos: 604           Relay_Log_File: relay-log-bin.000002            Relay_Log_Pos: 321    Relay_Master_Log_File: master-bin.000001         Slave_IO_Running: Yes                # 两个为yes 表示同步中        Slave_SQL_Running: Yes              

配置 Amoeda 代理服务器 :

  1. 配置 java 环境变量 :

    cp jdk-6u14-linux-x64.bin /usr/local/cd /usr/local/./jdk-6u14-linux-x64.bin     #运行jdk#之后输入yes 或者 按回车键即可mv jdk1.6.0_14/ /usr/local/jdk1.6     #重命名
    vi /etc/profile     # 添加export JAVA_HOME=/usr/local/jdk1.6      #java家目录export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib     #指定运行库export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin     #识别java命令export AMOEBA_HOME=/usr/local/amoeba     #指定amoeba家目录export PATH=$PATH:$AMOEBA_HOME/bin     # amoeba命令
    source /etc/profile     #刷新环境变量
  2. 配置 amoeba 软件 :

    mkdir /usr/local/amoebatar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/chmod -R 755 /usr/local/amoeba//usr/local/amoeba/bin/amoebaamoeba start|stop     #出现 amoeba start|stop 说明 amoeba 安装成功
  3. 配置 amoeba 读写分离 :

    mysql> grant all on *.* to 'test'@'192.168.217.%' identified by 'abcabc';#在三台mysql上添加权限开放给amoeba访问
    cd /usr/local/amoebavim conf/amoeba.
    30<property name="user">amoeba</property>   #第30、32行 用户名 密码  这是客户端访问 amoeba 所需要的账户密码31 32 <property name="password">123456</property>
    # 把注释去掉 开启服务115<property name="defaultPool">master</property>     #修改 默认池116<property name="writePool">master</property>     #修改 写入池   写操作写 mysql 主服务器117<property name="readPool">slaver</property>     #修改 读入池   读操作读 mysql 从服务器
  4. 配置 dbServers.
    vim conf/dbServers.xml   23                         <property name="schema">test</property>   #把这句话注释  或者在mysql主服务器创建一个test数据库 ,再或者把test修改成mysql主服务器已经存在的数据库名25                         <property name="user">test</property>     #允许amoeba 访问数据库 的账户密码26                         # 把注释去掉 开启服务27                         <property name="password">abcabc</property>
    42         <dbServer name="master"  parent="abstractServer">      #修改  MySQL 主服务器名称43                 <factoryConfig> 44                         <!-- mysql ip -->45                         <property name="ipAddress">192.168.217.130</property>      #修改    主服务器 IP 地址49         <dbServer name="slave1"  parent="abstractServer">     #修改  MySQL 从服务器名称50                 <factoryConfig>51                         <!-- mysql ip -->52                         <property name="ipAddress">192.168.217.131</property>      #修改    从服务器 IP 地址53                 </factoryConfig>54         </dbServer>55 #添加 slave2 56         <dbServer name="slave2"  parent="abstractServer">      #MySQL 从服务器名称57                 <factoryConfig>58                         <!-- mysql ip -->59                         <property name="ipAddress">192.168.217.132</property>      # 从服务器 IP 地址60                 </factoryConfig>61         </dbServer>62         <dbServer name="slaves" virtual="true">     #定义 slaves 池63                 <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">64                         <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->65                         <property name="loadbalance">1</property>66 67                         <!-- Separated by commas,such as: server1,server2,server1 -->68                         <property name="poolNames">slave1,slave2</property>     #修改 slaves 池 所包含slave1 、slave269                 </poolConfig>

  5. 启动 amoeba 服务 :

    /usr/local/amoeba/bin/amoeba start &     #后台启动netstat -anpt | grep java     #查看8066端口systemctl stop firewalld.service setenforce 0

    配置客户端 :

  6. 在客户端安装 mysql :

    yum install -y mysqlmysql -u amoeba -p123456 -h 192.168.217.129 -P8066     #链接 amoeba 代理服务   ip地址是 amoeba 地址

读写分离测试 :

  1. 在客户端创建一个表 ,查看主从服务器是否创建 。

  2. 在一台mysql从服务器表内插入信息 ,在客户端进行查看到的信息应该是一下有信息 、一下没有信息 。因为在读取mysql从服务器是轮流读取 。

    ps:数据库授权给 amoeba 访问的权限账户 、密码和 amoeba 给客户端授予的权限账户 、密码不要搞错 。

广告 广告

评论区