zoukankan      html  css  js  c++  java
  • MySQL主从复制

     

    主服务器配置 my.cnf

    # binary logging is required for replication
    log-bin=mysql-bin
    

    binary logging format - mixed recommended

    binlog_format=mixed

    required unique id between 1 and 2^32 - 1

    defaults to 1 if master-host is not set

    but will not function as a master if omitted

    server-id = 65

    从服务器配置 my.cnf

    server-id       = 75
    relay-log=mysql-relay

    log_salve_update = on [可选 从服务器将其SQL线程执行的更新记入到从服务器自己的二进制日志,当从服务器作为其他服务器的主服务器]
    bin_log = mysql-bin
    read_only = 1 [可选 只读]

     在主服务器建立授权账号

    mysql> grant replication slave on *.* to 'slave75'@'10.16.134.75' identified by '123'; 
    Query OK, 0 rows affected (0.00 sec)
    

    mysql> FLUSH PRIVILEGES;
    Query OK,
    0 rows affected (0.00 sec)

    mysql> show master status;
    +------------------+----------+--------------+------------------+
    | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000014 | 354 | | |
    +------------------+----------+--------------+------------------+
    1 row in set (0.00 sec)

    从服务器设置

    mysql> change master to  master_host='10.16.134.65',  master_user='slave75',  master_password='123', master_port=3306, master_log_file='mysql-bin.000014', master_log_pos=354;
    Query OK, 0 rows affected (0.15 sec)

    Slave_SQL_Running: Yes

    1.程序可能在slave上进行了写操作
    2.也可能是slave机器重起后,事务回滚造成的.
    一般是事务回滚造成的:
    解决办法:
    mysql> slave stop;
    mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
    mysql> slave start;
    解决办法二、
    首先停掉Slave服务:slave stop
    到主服务器上查看主机状态:
    记录File和Position对应的值
    进入master
    mysql> show master status;
    +----------------------+----------+--------------+------------------+
    | File                | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +----------------------+----------+--------------+------------------+
    | localhost-bin.000094 | 33622483 |              |                  | 
    +----------------------+----------+--------------+------------------+
    1 row in set (0.00 sec)
    然后到slave服务器上执行手动同步:
    mysql> change master to 
    > master_host='master_ip',
    > master_user='user', 
    > master_password='pwd', 
    > master_port=3306, 
    > master_log_file=localhost-bin.000094', 
    > master_log_pos=33622483 ;
    1 row in set (0.00 sec)
    mysql> slave start;
    mysql> show slave statusG
    *************************** 1. row ***************************
                   Slave_IO_State: 
                      Master_Host: 10.16.134.65
                      Master_User: slave75
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000014
              Read_Master_Log_Pos: 354
                   Relay_Log_File: mysql-relay.000001
                    Relay_Log_Pos: 4
            Relay_Master_Log_File: mysql-bin.000014
                 Slave_IO_Running: No
                Slave_SQL_Running: No
                  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: 354
                  Relay_Log_Space: 107
                  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: NULL
    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: 65
    1 row in set (0.00 sec)
    

    mysql> start slave;
    Query OK,
    0 rows affected (0.00 sec)

    mysql> show slave statusG
    1. row
    Slave_IO_State: Waiting
    for master to send event
    Master_Host:
    10.16.134.65
    Master_User: slave75
    Master_Port:
    3306
    Connect_Retry:
    60
    Master_Log_File: mysql
    -bin.000014
    Read_Master_Log_Pos:
    354
    Relay_Log_File: mysql
    -relay.000002
    Relay_Log_Pos:
    253
    Relay_Master_Log_File: mysql
    -bin.000014
    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:
    354
    Relay_Log_Space:
    405
    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:
    65
    1 row in set (0.00 sec)

    MySQL5.7之前,一个从库只能有一个主库,MySQL5.7之后支持一从多主架构

    主从延迟的因素

     主库写入二进制日志的时间  [ 控制主库的事务大小,分割大事务 ]

     二进制日志传输时间    [ 使用MIXED日志格式, set binlog_row_image = minimal ]

    MySQL57.配置多线程复制

    stop slave;
    

    set global slave_parallel_type = 'logical_clock';

    set global slave_parallel_workers = 4;

    start slave;

  • 相关阅读:
    洛谷 1443——马的遍历(广度优先搜索)
    jzoj C组 2017.1.21
    jzoj C组 2017.1.20 比赛
    jzoj C组 2017.1.19 比赛
    jzoj C组 2017.1.18 比赛
    jzoj C组 2017.1.17 比赛
    jzoj C组 2017.1.16 比赛
    jzoj C组 2017.1.15比赛
    [LCA][数学]JZOJ 4794 富爷说是一棵树
    [CDQ分治][带权并查集]JZOJ 4769
  • 原文地址:https://www.cnblogs.com/yhq-qhh/p/10176796.html
Copyright © 2011-2022 走看看