MySQL一主两从集群安装部署

一、mysql简介
  MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般企业的开发都选择 MySQL 作为软件数据库。
二、什么是主从复制
  主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是准实时的业务数据库。
三、主从复制的作用
  1、做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。
  2、架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。
  3、读写分离,使数据库能支撑更大的并发。在报表中尤其重要。由于部分报表sql语句非常的慢,导致锁表,影响前台服务。如果前台使用master,报表使用slave,那么报表sql将不会造成前台锁,保证了前台速度。
四、主从复制的原理
  4.1 主从复制原理
    1.数据库有个bin-log二进制文件,记录了所有sql语句。
    2.我们的目标就是把主数据库的bin-log文件的sql语句复制过来。
    3.让其在从数据的relay-log重做日志文件中再执行一次这些sql语句即可。
    4.下面的主从配置就是围绕这个原理配置
    5.具体需要三个线程来操作:
      1) binlog输出线程:每当有从库连接到主库的时候,主库都会创建一个线程然后发送binlog内容到从库。在从库里,当复制开始的时候,从库就会创建两个线程进行处理:
      2) 从库I/O线程:当start slave语句在从库开始执行之后,从库创建一个I/O线程,该线程连接到主库并请求主库发送binlog里面的更新记录到从库上。从库I/O线程读取主库的binlog输出线程发送的更新并拷贝这些更新到本地文件,其中包括relay log文件。
      3) 从库的SQL线程:从库创建一个SQL线程,这个线程读取从库I/O线程写到relay log的更新事件并执行。
    可以知道,对于每一个主从复制的连接,都有三个线程。拥有多个从库的主库为每一个连接到主库的从库创建一个binlog输出线程,每一个从库都有它自己的I/O线程和SQL线程。
    架构图如下:
在这里插入图片描述

4.2 主从复制流程
    1.主库db的更新事件(update、insert、delete)被写到binlog
    2.主库创建一个binlog dump thread,把binlog的内容发送到从库
    3.从库启动并发起连接,连接到主库
    4.从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log
    5.从库启动之后,创建一个SQL线程,从relay log里面读取内容,从Exec_Master_Log_Pos位置开始执行读取到的更新事件,将更新内容写入到slave的db
  流程图如下:
在这里插入图片描述
五、主从复制搭建
  5.1 服务器列表

在这里插入图片描述
5.2 数据库安装
  1. 关闭服务器防火墙,命令如下:
    systemctl stop firewalld.service
    systemctl disable firewalld.service
  2. 上传mysql_install.tar.gz到服务器的data目录下。
  3. 解压数据库安装文件,解压命令如下:
    cd /data
    tar -zxvf mysql_install.tar.gz
  4. 执行安装命令
    cd /data/mysql_init
    ./mysql_install.sh
  5. 在安装好以后,会提示输入密码。这里设置密码123456
在这里插入图片描述
  6. 在其他两台机器上执行以上4个步骤,完成其他两台数据库的安装。
5.3 主从配置
  1. 在三台机器上分别建立2个数据库,order和orader2,字符编码为utf-8。命令如下:
  mysql -uroot -p123456 -h192.168.145.185 -P3306
在这里插入图片描述
  CREATE DATABASE order CHARACTER SET utf8 COLLATE utf8_general_ci;
  CREATE DATABASE order2 CHARACTER SET utf8 COLLATE utf8_general_ci;
在这里插入图片描述

2. master节点配置,编辑my.cnf,命令和内容如下:
    vi /etc/my.cnf
    修改内容如下:
在这里插入图片描述
    在[mysqld]下面增加
    #server-id给数据库服务的唯一标识
    server-id=1
    #log-bin设置此参数表示启用binlog功能,并指定路径名称
    log-bin=/data/mysql/data/mysql-bin.log
    sync_binlog=0
    ##设置日志的过期天数
    expire_logs_days=7
    binlog-do-db=order
    binlog-do-db=order2
    binlog-ignore-db=information_schema
    binlog-ignore-db=sys
    binlog-ignore-db=mysql
    binlog-ignore-db=performance_schema
  注:
    server-id用于标识唯一的数据库,在从库必须设置为不同的值。
    binlog-ignore-db:表示同步的时候忽略的数据库
    binlog-do-db:指定需要同步的数据库

  3. 重启master节点的mysql,命令如下:
    systemctl restart mysqld
  4. 重新登陆mysql,查看主库信息,命令如下:
    mysql -uroot -p123456 -h192.168.145.183 -P3306
    show master status;
在这里插入图片描述
  这里得到File和Position的信息,记住这个信息,后面要使用。
  5. slave节点配置,编辑my.cnf,命令和内容如下:
    vi /etc/my.cnf
    修改内容如下:
在这里插入图片描述
    在[mysqld]下面增加
    server-id=2
    log-bin=/data/mysql/data/mysql-bin.log
    binlog-ignore-db=information_schema
    binlog-ignore-db=sys
    binlog-ignore-db=mysql
    replicate-do-db=order
    replicate-do-db=order2
    replicate-ignore-db=mysql
    log-slave-updates
    slave-skip-errors=all
    slave-net-timeout=60
  注:
    server-id用于标识唯一的数据库,在从库必须设置为不同的值。
    binlog-ignore-db:表示同步的时候忽略的数据库
    binlog-do-db:指定需要同步的数据库

  6. 重启slave节点的mysql,命令如下:
    systemctl restart mysqld
  7. 启动slave节点,命令如下:
    mysql -uroot -p123456 -h192.168.145.184 -P3306
    stop slave;
    change master to master_host=‘192.168.145.183’,master_user=‘root’,master_password=‘123456’,master_log_file=‘mysql-bin.000001’, master_log_pos=154;
    start slave;
在这里插入图片描述
  8. 查看slave节点信息,命令如下:
在这里插入图片描述
  上面的信息有Slave_IO_Running: Yes和Slave_SQL_Running: Yes,证明主从同步成功。
5.4 测试主从复制
  1.使用Navicat连接三台mysql数据库服务器打开orader数据库,在order库下建立pro_order数据表。建表语句如下:
CREATE TABLE pro_order (
id bigint(20) NOT NULL,
pro_order_code varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
pro_order_name varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (id) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
在这里插入图片描述   看到184,185两台slave节点服务器自动同步表,至此mysql主从复制已经搭建完成。