目录

  • 一、前言
  • 二、主从复制原理
  • 三、环境
  • 配置主数据库
  • 配置从数据库
  • 可能出现的错误
  • 参考资料


一、前言

本文主要介绍如何配置Mysql数据库主从配置,并简要介绍主从复制原理。
使用了虚拟机上的服务器两台来配置一主一从,如果需要配置一主多从,配置方法是一样的.

二、主从复制原理

主从复制实现的效果在于,Slave数据库读取Master数据库的log,log记录了Master数据库的修改情况,从而Slave根据log,去在Slave数据库做同样的操作。

具体来说,这个log叫binlog(二进制log),可以简单理解为它保存的就是主结点的执行SQL语句,但其实还存储了该执行SQL语句的反向操作,例如主结点插入一条数据,实际上保存了删除这条数据的SQL,从而方便回滚。

MySQL主从配置 宝塔 mysql主从配置详解_数据库


主从复制过程中主要包含三个线程:

  • Binlog线程,负责将主库的SQL修改放到二进制日志文件中
  • I/O线程,负责把二进制日志读取到从库服务器
  • SQL线程,负责把I/O线程读取来的文件,转换读取到从库中
三、环境

Centos7 服务器两台

  • 192,168.56.80
  • 192.168.56.85
配置主数据库

使用命令配置 vi /etc/my.cnf

在[mysqld]下面加

log-bin=mysql-bin 
server-id=1

在mysql命令行执行

CREATE USER 'repl'@'192.168.56.%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.56.%';
FLUSH PRIVILEGES;

MySQL主从配置 宝塔 mysql主从配置详解_MySQL主从配置 宝塔_02


使用show master status 查看两个参数,这里先注意一下

MySQL主从配置 宝塔 mysql主从配置详解_mysql_03

配置从数据库

第1步:编辑/etc/my.cnf文件,设置server-id

[mysqld]
server-id=2

这里一定要确定主从数据库的server-id 不同

第2步:在mysql终端设置如下

change master to master_host='192.168.56.80', master_user='repl', master_password='123456', master_log_file='mysql-bin.000002', master_log_pos=877;

第3步:查看从数据库状态

使用 show slave master命令查看

*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.56.80
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: binlog.000004
          Read_Master_Log_Pos: 340
               Relay_Log_File: 3e0b89196ec5-relay-bin.000007
                Relay_Log_Pos: 548
        Relay_Master_Log_File: binlog.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
  			...................
  			.................

如果 Slave_IO_Running: YesSlave_SQL_Running: Yes都是yes的话,就说明没问题。

在主数据库中,进行修改

MySQL主从配置 宝塔 mysql主从配置详解_MySQL主从配置 宝塔_04


查看从数据库

MySQL主从配置 宝塔 mysql主从配置详解_mysql_05


可以看到,从数据库也同时进行了更新.

可能出现的错误

如果有不是yes的,请检查后面的字段,看看是否有error信息,我遇到了如下两个:
Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file

Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these

参考资料