zoukankan      html  css  js  c++  java
  • centos7搭建mysql5.7主从同步

    主从基本概念

    mysql主从同步定义

    主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)。因为复制是异步进行的,所以从服务器不需要一直连接着主服务器,从服务器甚至可以通过拨号断断续续地连接主服务器。通过配置文件,可以指定复制所有的数据库,某个数据库,甚至是某个数据库上的某个表。

    使用主从同步的好处:

    • 通过增加从服务器来提高数据库的性能,在主服务器上执行写入和更新,在从服务器上向外提供读功能,可以动态地调整从服务器的数量,从而调整整个数据库的性能。
    • 提高数据安全-因为数据已复制到从服务器,从服务器可以终止复制进程,所以,可以在从服务器上备份而不破坏主服务器相应数据
    • 在主服务器上生成实时数据,而在从服务器上分析这些数据,从而提高主服务器的性能

    主从同步机制

    Mysql服务器之间的主从同步是基于二进制日志机制,主服务器使用二进制日志来记录数据库的变动情况,从服务器通过读取和执行该日志文件来保持和主服务器的数据一致。

    在使用二进制日志时,主服务器的所有操作都会被记录下来,然后从服务器会接收到该日志的一个副本。从服务器可以指定执行该日志中的哪一类事件(譬如只插入数据或者只更新数据),默认会执行日志中的所有语句。

    每一个从服务器会记录关于二进制日志的信息:文件名和已经处理过的语句,这样意味着不同的从服务器可以分别执行同一个二进制日志的不同部分,并且从服务器可以随时连接或者中断和服务器的连接。

    主服务器和每一个从服务器都必须配置一个唯一的ID号(在my.cnf文件的[mysqld]模块下有一个server-id配置项),另外,每一个从服务器还需要通过CHANGE MASTER TO语句来配置它要连接的主服务器的ip地址,日志文件名称和该日志里面的位置(这些信息存储在主服务器的数据库里)

    配置主从的前提条件

    有很多种配置主从同步的方法,可以总结为如下的步骤:

    1.在主服务器上,必须开启二进制日志机制和配置一个独立的ID

    2.在每一个从服务器上,配置一个唯一的ID,创建一个用来专门复制主服务器数据的账号

    3.在开始复制进程前,在主服务器上记录二进制文件的位置信息

    4.如果在开始复制之前,数据库中已经有数据,就必须先创建一个数据快照(可以使用mysqldump导出数据库,或者直接复制数据文件)

    5.配置从服务器要连接的主服务器的IP地址和登陆授权,二进制日志文件名和位置

    开始配置主从

    前提先把MYSQL都安装好

    我这有两台ECS

      主:192.168.1.1

      从:192.168.1.2

    1.修改主my.cnf,增加以下参数

    log-bin=mysql-bin #slave会基于此log-bin来做replication 
    server-id=1 #master的标示 
    innodb_flush_log_at_trx_commit=1 
    sync_binlog=1

    2.在主上授权个同步账号

    grant replication slave on *.* to 'slave'@'%' identified by 'Huawei12#';

    3.在主数据库上查看服务器信息

    show master status;

    +------------------+----------+--------------+------------------+-------------------+
    | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000002 | 1449 | | | |
    +------------------+----------+--------------+------------------+-------------------+

    4.修改从my.cnf,增加以下参数

    server-id = 2
    relay-log = slave-relay-bin
    relay-log-index = slave-relay-bin.index

    5.在从数据库执行同步语句

    CHANGE MASTER TO MASTER_HOST='192.168.1.1',MASTER_USER='slave',MASTER_PASSWORD='Huawei12#', MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=1449;
    Query OK, 0 rows affected, 2 warnings (0.05 sec)

    6.启动Slave数据同步

    start slave;

    7.查看同步状态

    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 192.168.1.1
                      Master_User: slave
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000002
              Read_Master_Log_Pos: 1449
                   Relay_Log_File: slave-relay-bin.000002
                    Relay_Log_Pos: 935
            Relay_Master_Log_File: mysql-bin.000002
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
                  Replicate_Do_DB: 
              Replicate_Ignore_DB: 
               Replicate_Do_Table: 
           Replicate_Ignore_Table: 
          Replicate_Wild_Do_Table: 
      Replicate_Wild_Ignore_Table: 
                       Last_Errno: 0
                       Last_Error: 
                     Skip_Counter: 0
              Exec_Master_Log_Pos: 1449
                  Relay_Log_Space: 1142
                  Until_Condition: None
                   Until_Log_File: 
                    Until_Log_Pos: 0
               Master_SSL_Allowed: No
               Master_SSL_CA_File: 
               Master_SSL_CA_Path: 
                  Master_SSL_Cert: 
                Master_SSL_Cipher: 
                   Master_SSL_Key: 
            Seconds_Behind_Master: 0
    Master_SSL_Verify_Server_Cert: No
                    Last_IO_Errno: 0
                    Last_IO_Error: 
                   Last_SQL_Errno: 0
                   Last_SQL_Error: 
      Replicate_Ignore_Server_Ids: 
                 Master_Server_Id: 1
                      Master_UUID: 9434af48-d8de-11e7-9288-fa163e5ea0f0
                 Master_Info_File: /opt/data/mysql/master.info
                        SQL_Delay: 0
              SQL_Remaining_Delay: NULL
          Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
               Master_Retry_Count: 86400
                      Master_Bind: 
          Last_IO_Error_Timestamp: 
         Last_SQL_Error_Timestamp: 
                   Master_SSL_Crl: 
               Master_SSL_Crlpath: 
               Retrieved_Gtid_Set: 
                Executed_Gtid_Set: 
                    Auto_Position: 0
             Replicate_Rewrite_DB: 
                     Channel_Name: 
               Master_TLS_Version: 
    1 row in set (0.00 sec)
    View Code

    :如同步状态有错误,根据具体的错误来判定,一般用于主键冲突或者更新失败错误,进行手动跳过。

    stop slave ;
    set global sql_slave_skip_counter=1
    start slave;
    不要让懒惰占据你的大脑,不让要妥协拖跨你的人生。青春就是一张票,能不能赶上时代的快车,你的步伐掌握在你的脚下,good luck
  • 相关阅读:
    [异常解决] JLINK 与STM32的SWD连接接线方式
    2、利用蓝牙定位及姿态识别实现一个智能篮球场套件(二)——CC2540/CC2541基于广播的RSSI获得
    [Intel Edison开发板] 05、Edison开发基于MRAA实现IO控制,特别是UART通信
    1、利用蓝牙定位及姿态识别实现一个智能篮球场套件(一)——用重写CC2541透传模块做成智能手环
    [Intel Edison开发板] 04、Edison开发基于nodejs和redis的服务器搭建
    [Intel Edison开发板] 03、Edison开发IDE入门及跑官方提供的DEMO
    [Intel Edison开发板] 02、Edison开发板入门
    [Intel Edison开发板] 01、Edison开发板性能简述
    [每日电路图] 10、两种MOS管的典型开关电路
    [每日电路图] 9、介绍一种低价简单的4.2V锂电池充电及稳压(LDO)电路——RT9193,SD8017
  • 原文地址:https://www.cnblogs.com/guigujun/p/7989231.html
Copyright © 2011-2022 走看看