• stop slave->reset slave->start slave 复制从哪个位置开始?reset slave all呢?


    reset slave
    首先来看下当前master-slave情况

    mysql> prompt u@h,p:d>\_
    PROMPT set to 'u@h,p:d>\_'
    
    # master
    mydba@192.168.85.129,3306:test> show master status;
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000007 |      120 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    
    # slave
    mydba@192.168.85.129,3307:test> show slave statusG
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 192.168.85.129
                      Master_User: repl
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000007
              Read_Master_Log_Pos: 120
                   Relay_Log_File: mysql-relay-bin.000011
                    Relay_Log_Pos: 283
            Relay_Master_Log_File: mysql-bin.000007
                 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: 120
                  Relay_Log_Space: 15247
                  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: 6
                      Master_UUID: 02a05b2c-0557-11e7-bb02-000c29493a20
                 Master_Info_File: /usr/local/mysql3307/log/master.info
                        SQL_Delay: 0
              SQL_Remaining_Delay: NULL
          Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
               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
    1 row in set (0.00 sec)
    View Code

    此时主从处于同步状态,接着在从库上执行reset slave,并查看同步情况

    # slave
    mydba@192.168.85.129,3307:test> stop slave;
    Query OK, 0 rows affected (0.20 sec)
    
    mydba@192.168.85.129,3307:test> reset slave;
    Query OK, 0 rows affected (0.07 sec)
    
    mydba@192.168.85.129,3307:test> start slave;
    Query OK, 0 rows affected (0.05 sec)
    
    mydba@192.168.85.129,3307:test> show slave statusG
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 192.168.85.129
                      Master_User: repl
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000007
              Read_Master_Log_Pos: 120
                   Relay_Log_File: mysql-relay-bin.000003
                    Relay_Log_Pos: 283
            Relay_Master_Log_File: mysql-bin.000001
                 Slave_IO_Running: Yes
                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: 1051
                       Last_Error: Error 'Unknown table 'test.a'' on query. Default database: 'test'. Query: 'DROP TABLE `a` /* generated by server */'
                     Skip_Counter: 0
              Exec_Master_Log_Pos: 120
                  Relay_Log_Space: 498471
                  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: 1051
                   Last_SQL_Error: Error 'Unknown table 'test.a'' on query. Default database: 'test'. Query: 'DROP TABLE `a` /* generated by server */'
      Replicate_Ignore_Server_Ids: 
                 Master_Server_Id: 6
                      Master_UUID: 02a05b2c-0557-11e7-bb02-000c29493a20
                 Master_Info_File: /usr/local/mysql3307/log/master.info
                        SQL_Delay: 0
              SQL_Remaining_Delay: NULL
          Slave_SQL_Running_State: 
               Master_Retry_Count: 86400
                      Master_Bind: 
          Last_IO_Error_Timestamp: 
         Last_SQL_Error_Timestamp: 170719 15:35:08
                   Master_SSL_Crl: 
               Master_SSL_Crlpath: 
               Retrieved_Gtid_Set: 
                Executed_Gtid_Set: 
                    Auto_Position: 0
    1 row in set (0.00 sec)
    View Code
    Slave_IO_Running: I/O线程是否启动并且成功连接到master
    Slave_SQL_Running: SQL线程是否启动
    Master_Log_File:I/O线程当前正在读取的主服务器二进制日志文件的名称
    Read_Master_Log_Pos:在当前的主服务器二进制日志中,I/O线程已经读取的位置
    Relay_Log_File:SQL线程当前正在读取和执行的中继日志文件的名称
    Relay_Log_Pos:在当前的中继日志中,SQL线程已读取和执行的位置
    Relay_Master_Log_File:包含SQL线程最近执行的事件的主服务器二进制日志文件的名称
    Exec_Master_Log_Pos:在主服务器二进制日志中(Relay_Master_Log_File),SQL线程已执行的位置。主服务器的二进制日志中的(Relay_Master_Log_File,Exec_Master_Log_Pos)对应于在中继日志中的(Relay_Log_File,Relay_Log_Pos)

    从上面结果可知,SQL线程已经停止;SQL线程已经执行的主服务器二进制日志文件的名称mysql-bin.000001,SQL线程已执行的位置120
    主库查看二进制日志

    # master
    mydba@192.168.85.129,3306:test> show binlog events in 'mysql-bin.000001';
    +------------------+------+-------------+-----------+-------------+------------------------------------------------------------+
    | Log_name         | Pos  | Event_type  | Server_id | End_log_pos | Info                                                       |
    +------------------+------+-------------+-----------+-------------+------------------------------------------------------------+
    | mysql-bin.000001 |    4 | Format_desc |         6 |         120 | Server ver: 5.6.35-log, Binlog ver: 4                      |
    | mysql-bin.000001 |  120 | Query       |         6 |         234 | use `test`; DROP TABLE `a` /* generated by server */       |
    | mysql-bin.000001 |  234 | Query       |         6 |         319 | use `test`; flush general logs                             |
    | mysql-bin.000001 |  319 | Query       |         6 |         404 | use `test`; flush general logs                             |
    | mysql-bin.000001 |  404 | Query       |         6 |         501 | use `test`; create table aaa(a int)                        |
    | mysql-bin.000001 |  501 | Query       |         6 |         617 | use `test`; DROP TABLE `aaa` /* generated by server */     |
    | mysql-bin.000001 |  617 | Query       |         6 |         737 | use `test`; DROP TABLE `bittest` /* generated by server */ |
    | mysql-bin.000001 |  737 | Query       |         6 |         853 | use `test`; DROP TABLE `tb1` /* generated by server */     |
    | mysql-bin.000001 |  853 | Query       |         6 |         969 | use `test`; DROP TABLE `tb2` /* generated by server */     |
    | mysql-bin.000001 |  969 | Query       |         6 |        1086 | use `test`; DROP TABLE `test` /* generated by server */    |
    | mysql-bin.000001 | 1086 | Query       |         6 |        1187 | use `test`; create table credro(id int)                    |
    | mysql-bin.000001 | 1187 | Query       |         6 |        1306 | use `test`; DROP TABLE `credro` /* generated by server */  |
    | mysql-bin.000001 | 1306 | Query       |         6 |        1407 | use `test`; create table credro(id int)                    |
    | mysql-bin.000001 | 1407 | Query       |         6 |        1526 | use `test`; DROP TABLE `credro` /* generated by server */  |
    | mysql-bin.000001 | 1526 | Stop        |         6 |        1549 |                                                            |
    +------------------+------+-------------+-----------+-------------+------------------------------------------------------------+
    15 rows in set (0.00 sec)
    
    mydba@192.168.85.129,3306:test> show master logs;
    +------------------+-----------+
    | Log_name         | File_size |
    +------------------+-----------+
    | mysql-bin.000001 |      1549 |
    | mysql-bin.000002 |       143 |
    | mysql-bin.000003 |       143 |
    | mysql-bin.000004 |    480108 |
    | mysql-bin.000005 |       143 |
    | mysql-bin.000006 |     14771 |
    | mysql-bin.000007 |       120 |
    +------------------+-----------+
    7 rows in set (0.00 sec)
    View Code

    Log_name=mysql-bin.000001,Pos=120对应的是语句是use `test`; DROP TABLE `a`;其后还有很多操作语句。
    由此可知,stop slave->reset slave->start slave 它的连接信息没有丢失,只是同步的起始位置发生了变化,之前执行过的操作还需再次执行导致同步异常。
    为了后续操作直接使用change master到master status位置

    # slave
    mydba@192.168.85.129,3307:test> stop slave;
    Query OK, 0 rows affected (0.01 sec)
    
    mydba@192.168.85.129,3307:test> change master to
        -> master_host='192.168.85.129',
        -> master_port=3306,
        -> master_user='repl',
        -> master_password='repl',
        -> master_log_file='mysql-bin.000007',
        -> master_log_pos=120;
    Query OK, 0 rows affected, 2 warnings (0.04 sec)
    
    mydba@192.168.85.129,3307:test> start slave;
    Query OK, 0 rows affected (0.02 sec)
    View Code

    reset slave all
    首先来看下当前master-slave情况

    # master
    mydba@192.168.85.129,3306:test> show master status;
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000007 |      120 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.01 sec)
    
    # slave
    mydba@192.168.85.129,3307:test> show slave statusG
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 192.168.85.129
                      Master_User: repl
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000007
              Read_Master_Log_Pos: 120
                   Relay_Log_File: mysql-relay-bin.000002
                    Relay_Log_Pos: 283
            Relay_Master_Log_File: mysql-bin.000007
                 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: 120
                  Relay_Log_Space: 456
                  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: 6
                      Master_UUID: 02a05b2c-0557-11e7-bb02-000c29493a20
                 Master_Info_File: /usr/local/mysql3307/log/master.info
                        SQL_Delay: 0
              SQL_Remaining_Delay: NULL
          Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
               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
    1 row in set (0.00 sec)
    View Code

    此时主从处于同步状态,接着在从库上执行reset slave all,并查看同步情况

    # slave
    mydba@192.168.85.129,3307:test> stop slave;
    Query OK, 0 rows affected (0.00 sec)
    
    mydba@192.168.85.129,3307:test> reset slave all;
    Query OK, 0 rows affected (0.01 sec)
    
    mydba@192.168.85.129,3307:test> start slave;
    ERROR 1200 (HY000): The server is not configured as slave; fix in config file or with CHANGE MASTER TO
    View Code

    使用change master to

    mydba@192.168.85.129,3307:test> change master to
        -> master_host='192.168.85.129',
        -> master_port=3306,
        -> master_user='repl',
        -> master_password='repl',
        -> master_log_file='mysql-bin.000007',
        -> master_log_pos=120;
    Query OK, 0 rows affected, 2 warnings (0.02 sec)
    
    mydba@192.168.85.129,3307:test> start slave;
    Query OK, 0 rows affected (0.01 sec)
    View Code

    参考网上的说法reset slave和reset slave all所做的操作如下
    1、删除master.info和relay-log.info文件;
    2、删除所有的relay log(包括还没有应用完的日志),创建一个新的relay log文件;
    如果不加all参数,那么所有的连接信息仍然保留在内存中,包括主库地址、端口、用户、密码等。这样可以直接运行start slave命令而不必重新输入change master to命令,而运行show slave status也仍和没有运行reset slave一样,有正常的输出(ShanFish补充:运行show slave status有输出,但里面的取值有变化,部分同步会出现异常)。但如果加了all参数,那么这些内存中的数据也会被清除掉,运行show slave status输出为空。
    如果主服务器部分二进制日志删除(expire_logs_days),比如mysql-bin.000001被删除,那么reset slave后再启动会指向哪个位置?

  • 相关阅读:
    DAO模式多表联查
    使用ADO.NET访问数据库
    连接查询和分组查询
    模糊查询和聚合函数
    poj 1220 NUMBER BASE CONVERSION
    poj 1964 City Game
    Odd number problem
    POJ 2983 M × N Puzzle
    L O V E
    【Mybatis】【3】处理大于号小于号及其他特殊字符
  • 原文地址:https://www.cnblogs.com/ShanFish/p/7133654.html
Copyright © 2020-2023  润新知