• Mysql 主从复制与读写分离


    一、MYSQL主从复制的原理:

    MySQL的主从复制和MySQL的读写分离两者有着紧密联系,首先要部署主从复制,只有主从复制完成了,才能在此基础上进行数据的读写分离。

    1 >MySOL支持的复制类型
      (1)基于语句的复制。在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。
    (2)基于行的复制。把改变的内容复制过去.而不是把命令在从服务器上执行一遍。
      (3)混合类型的复制。默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制.
    二、 MySQL读写分离原理
    简单来说.读写分离就是只在主服务器上写,只在从服务器上读。基本的原理是让主数据库处理事务性查询,而从数据库处理select查询。数据库复制被用来把事务性查询导致的变更同步到群集中的从数据库。

    目前较为常见的MySQL读写分离分为两种

    1)基于程序代码内部实现
    在代码中根据select、insert进行路由分类,这类方法也是目前生产环境应用最广泛的。优点是性能较好.因为在程序代码中实现.不需要增加额外的设备作为硬件开支;缺点是需要开发人员来实现.运维人员无从下手。
    2)基于中间代理层实现
    代理一般位于客户端和服务器之间,代理服务器接到客户端的请求后通过判断后转发到后端数据库.有两个代表性程序。

    三、实验操作:

    部署配置实验

    实验环境

    虚拟机 3台 centos7.9

    网卡NAT模式 数量 1

    组件包mysql-5.6.36.tar.gz  cmake-2.8.6.tar.gz

    设备

    IP

    备注

    Centos01

    192.168.160.51

    Amoeba

    Centos02

    192.168.160.52

    Master

    Centos03

    192.168.160.53

    Slave

    3.1 MySQL安装:

    安装组件包:

    yum -y install gcc gcc-c++ ntp vim net-tools ncurses-devel autoconf

    上传mysql安装包 mysql-5.6.36.tar.gz  cmake-2.8.6.tar.gz 解压cmakne

    1. tar zxf cmake-2.8.6.tar.gz
    2. 编译安装cmake
    3. cd cmake-2.8.6
    4. ./configure && gmake && gmake install

    解压MySQL

    tar zxf mysql-5.6.36.tar.gz

    编译安装MySQL

    1. cd mysql-5.6.36
    2. cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all
    3. make && make install

    创建组和用户:

    1. groupadd mysql
    2. useradd -M -s /sbin/nologin mysql -g mysql

    修改MySQL安装目录权限 复制模默认配置文件

    1. chown -R mysql:mysql /usr/local/mysql
    2. cp support-files/my-default.cnf /etc/my.cnf

    mysql数据库初始化:

    ./scripts/mysql_install_db --user=mysql  --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

    添加MySQL到系统服务:

    1. cp support-files/mysql.server /etc/init.d/mysqld
    2. chmod +x /etc/init.d/mysqld
    3. chkconfig --add mysqld

    启动MySQL服务:

    Systemctl start mysql

    添加MySQL操作指令系统:

    1. echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile && . /etc/profile
    2. 登入测试 mysql -u root

    3.2 MySQL主从复制

    1. cat << EOF >> /etc/ntp.conf
    2. server 127.127.1.0
    3. fudge 127.127.1.0 stratum 8
    4. EOF;
    5. systemctl start ntpd

    Ntp服务 slave配置

    1. yum -y install ntpdate
    2. ntpdate 192.168.160.51

    主服务器 master修改配置文件

    1. sed -i 's/# server_id = .*/server_id = 11/' /etc/my.cnf
    2. sed -i '/server_id = 11/a\log_bin = master-bin' /etc/my.cnf
    3. sed -i '/log_bin = master-bin/a\log-slave-updates = true' /etc/my.cnf
    4. systemctl restart mysqld

    创建授权用户 myslave  123456

    1. mysql -u root
    2. grant replication slave on *.* to 'myslave'@'192.168.10.%' identified by '123456';
    3. flush privileges;

    查看节点状态:

    show master status;

     从服务器配置 slave修改配置文件

    1. sed -i 's/# server_id = .*/server_id = 22/' /etc/my.cnf
    2. sed -i '/server_id = 22/a\relay-log = relay-log-bin' /etc/my.cnf
    3. sed -i '/relay-log = relay-log-bin/a\relay-log-index = slave-relay-bin.index' /etc/my.cnf
    4. systemctl restart mysqld

    连接主服务器:

    1. mysql -u root
    2. change master to master_host='192.168.10.52',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=837;
    3. start slave;
    4. show slave status\G;

     

     3.2 MySQL 读写分离:

    部署Java 运行环境上传安装包 jdk-6u14-linux-x64.bin

    1. chmod +x jdk-6u14-linux-x64.bin
    2. ./jdk-6u14-linux-x64.bin
    3. mv jdk1.6.0_14 /usr/local/jdk1.6

     添加Java运行环境变量:

    1. vim /etc/profile
    2. export JAVA_HOME=/usr/local/jdk1.6
    3. export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
    4. export PATH=$JAVA_HOME/lib:/$JAVA_HOME/jre/bin:$PATH:$HOME/bin
    5. export AMOEBA_HOME=/usr/local/amoeba/
    6. java -version

     部署amoeba 、上传amoeba软件包、创建amoeba主目录

    1. mkdir /usr/local/amoeba
    2. tar zxf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba
    3. tar zxf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba

  • 相关阅读:
    动态库.lib与.dll关系、visual studio工程库路径配置浅析
    Flutter基础入门-环境搭建并Helloworld
    玩转数组高级技法,成为JS高手
    将文件移动到ubuntu/linux/centos虚拟机上
    Flink SQL--- Over Aggregation
    【Vue基础十三】---Vuex的求和案例--map辅助函数的使用
    华为认证考试HCIA H12-811 Datacom数通考试真题题库【带答案刷题必过】【第二部分】
    C++基础知识(五)--- 智能指针类&字符串类
    用Roslyn玩转代码之一: 解析与执行字符串表达式
    交割合约(期货合约)是什么?
  • 原文地址:https://blog.csdn.net/xw19979790869/article/details/136455574