zoukankan      html  css  js  c++  java
  • mysql主从复制的简单配置示例

    一:介绍

    我们利用主从数据库来实现读写分离,从而用从数据库来分担主数据库的读压力,提高数据库的并发访问;主数据库只负责写操作,从数据库负责读操作;从而就会涉及到主数据库上的数据变动需要同步到从数据库上。

    二:示意图

    1、主从复制的过程介绍

    在上面的模型中,Mysql-A就是主服务器,即master,Mysql-B就是从服务器,即slave。

    在Mysql-A的数据库事件(例如修改数据库的sql操作语句),都会存储到日志系统A中,然后Mysql-B会通过网络获取日志系统A中的日志。Mysql-B获取到日志后,写入本地日志系统B,然后一条条的将数据库事件在数据库Mysql-B中完成,从而完成主从复制。

    日志系统A,是MYSQL的日志类型中的二进制日志,也就是专门用来保存修改数据库表的所有动作,即bin log,注意MYSQL会在执行语句之后,释放锁之前,写入二进制日志,确保事务安全。

    日志系统B,不是二进制日志,由于它是从MYSQL-A的二进制日志复制过来的,并不是自己的数据库变化产生的,有点接力的感觉,称为中继日志,即relay log。

    通过上面的机制,可以保证Mysql-A和Mysql-B的数据库数据一致,但是时间上肯定有延迟,即Mysql-B的数据是滞后的。因此,会出现这样的问题,Mysql-A的数据库操作是可以并发的执行的,但是Mysql-B只能从relay log中一条一条的读取执行。若Mysql-A的写操作很频繁,Mysql-B很可能就跟不上了。

    2、主从复制的详细过程

    (1)Master开启bin-log功能,binlog日志文件用于记录数据库的增删改操作。

    (2)需要开启三个线程,Master:I/O线程;Slave:I/O线程,SQL线程。

    (3)Slave start;通过I/O线程连接Master,并且请求某个bin-log文件中的position之后的内容。

    (4)Master服务器收到Slave I/O线程发过来的日志请求信息,然后Master I/O线程将bin-log内容、position返回给Slave IO线程。

    (5)Slave服务器收到bin-log日志内容,将bin-log日志内容写入到relay-log中继日志,创建一个master.info文件,该文件记录master IP、用户名、密码、master bin-log名称、bin-log position。

    (6)Slave已经开启了sql线程,由sql线程实时监测relay-log日志内容是否有更新,如果有更新,则解析文件中的sql语句,并在Slave数据库中执行相同的操作语句。

    注:可以通过show slave status G  来查看具体的中继日志路径以及连接的master的其他信息。

    三:主从复制的配置过程

    在两台centos7虚拟机上安装mysql,主服务器ip:192.168.216.134,从服务器ip:192.168.216.135,并分别创建test数据库。

    1:主(master)服务器的配置

    (1)、修改配置文件my.cnf

    [mysqld]
    datadir=/usr/local/mysql/data
    port = 3306
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
    symbolic-links=0
    max_connections=400
    innodb_file_per_table=1
    #表名大小写不明感,敏感为
    lower_case_table_names=1
    
    server-id=134  //服务器唯一id,可以用ip的最后一个ip段来标识,不重复即可
    log_bin=master-bin //启动bin log二进制日志,存放数据同步语句;开启这个配置的数据库即为master
    binlog_do_db=test   //指定需要记录二进制日志的数据库,即需要同步的数据库名

    (2)、创建用于从(slave)机器从主(master)机器上获取bin log文件的账号

    wangbo 和 wangbo123是从数据库连接主数据库时的用户名和密码

    192.168.%.%是允许连接该主服务器的从数据库的ip

    (3)、重启mysql服务

    (4)、查看主服务器状态

    File栏的master-bin.000001即为bin log二进制文件名称,Position栏的154即为position;从服务器连接主服务器时需要用到上步骤中创建的用户名、密码和此步骤中的这两个参数。

    2:从(slave)服务器的配置

    (1)、修改配置文件my.cnf

    [mysqld]
    datadir=/usr/local/mysql/data
    port = 3306
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
    symbolic-links=0
    max_connections=400
    innodb_file_per_table=1
    #表名大小写不明感,敏感为
    lower_case_table_names=1
     
    server-id=135    //服务器唯一id,可以使用ip最后一个段,只要不重复即可
    relay-log=slave-relay-bin    //启动relay log中继日志,开启此配置的服务器即为slave

    (2)、重启服务器

    (3)、连接主服务器

    master_host即为主服务器的ip,master_port主服务器port,master_user主服务器创建的账号,master_password主服务器创建的密码,master_log_file主服务器的binlog日志文件名,master_log_pos主服务器binlog日志文件中的position。

    (4)、启动slave数据同步

    start slave后从服务器便开启I/O线程,去主服务器中获取bin log日志中position后的日志内容;获取到的日志存放到从服务器的relay log中,以便从服务器的SQL线程执行日志中的语句,进行数据的同步。

    (5)、查看从服务器状态

    从第一行中的Slave_Io_State:Waiting for master to send event可以看到slave的io线程在等待着master中有数据库数据更新事件。

    红框里的两个yes,分别表示slave的I/O线程和slave的SQL线程都正在运行,则说明主从模式配置成功,下面就可以操作主服务器的数据库,并查看从服务器中的同名数据库的变化。

  • 相关阅读:
    Metasploit advanced命令使用技巧
    Metasploit命令info使用技巧
    Kali Linux 2020.1b发布了
    设置USB无线网卡为监听模式大学霸IT达人
    解决ifconfig命令未找到
    Metasploit新增技巧提示功能
    Wireshark运算符!=无法正常工作
    解决Kali Linux XFCE桌面Tab无法补全
    Nessus更新到8.9.1
    ASP入门(七)-Response小案例
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13302416.html
Copyright © 2011-2022 走看看