zoukankan      html  css  js  c++  java
  • 利用binlog server及Xtrabackup备份集来恢复误删表(drop)

     
    Preface
     
        Today I'm gonna test how to rescue a dropped table from binlog server based on a full Xtrabackup backup set.
     
    Framework
     
    Hostname IP/Port Identity OS Version MySQL Version GTID Mode Binlog Format
    zlm1 192.168.56.100/3306 master CentOS 7.0 5.7.21 on row
    zlm2 192.168.56.101/3306 slave CentOS 7.0 5.7.21 on row
    zlm3 192.168.56.102/3306 binlog server CentOS 7.0 5.7.21 on row
     
    Precedure
     
    Step 1: Create binlog server.
     
    Check the position on master 
    1 zlm@192.168.56.100:3306 [sysbench]>show master status;
    2 +------------------+----------+--------------+------------------+-------------------------------------------------+
    3 | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                               |
    4 +------------------+----------+--------------+------------------+-------------------------------------------------+
    5 | mysql-bin.000098 |      363 |              |                  | 2a4b3562-2ab6-11e8-be7a-080027de0e0e:1-12715693 |
    6 +------------------+----------+--------------+------------------+-------------------------------------------------+
    7 1 row in set (0.00 sec)
    Make binlog server begin to receive binlog.
     1 [root@zlm3 16:25:01 /data]
     2 #mysqlbinlog -R --raw -h192.168.56.100 -urepl -prepl4slave -P3306 --stop-never mysql-bin.000098 &
     3 [1] 4375
     4 mysqlbinlog: [Warning] Using a password on the command line interface can be insecure.
     5 
     6 [root@zlm3 16:26:24 /data]
     7 #ls -l
     8 total 4
     9 drwxr-xr-x 2 mysql mysql  32 Jun 10 03:41 backup
    10 drwxr-xr-x 3 mysql mysql  22 Mar 18 16:05 mysql
    11 -rw-r----- 1 root  root  363 Jul 29 16:26 mysql-bin.000098
    Flush two logs on master.
     1 zlm@192.168.56.100:3306 [sysbench]>flush logs;
     2 Query OK, 0 rows affected (0.06 sec)
     3 
     4 zlm@192.168.56.100:3306 [sysbench]>flush logs;
     5 Query OK, 0 rows affected (0.01 sec)
     6 
     7 zlm@192.168.56.100:3306 [sysbench]>show master status;
     8 +------------------+----------+--------------+------------------+-------------------------------------------------+
     9 | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                               |
    10 +------------------+----------+--------------+------------------+-------------------------------------------------+
    11 | mysql-bin.000100 |      194 |              |                  | 2a4b3562-2ab6-11e8-be7a-080027de0e0e:1-12715693 |
    12 +------------------+----------+--------------+------------------+-------------------------------------------------+
    13 1 row in set (0.00 sec)
    Check whether the newly generated binlogs are successfully transmited to binlog server.
    1 [root@zlm3 16:26:27 /data]
    2 #ls -l
    3 total 12
    4 drwxr-xr-x 2 mysql mysql  32 Jun 10 03:41 backup
    5 drwxr-xr-x 3 mysql mysql  22 Mar 18 16:05 mysql
    6 -rw-r----- 1 root  root  410 Jul 29 16:27 mysql-bin.000098
    7 -rw-r----- 1 root  root  241 Jul 29 16:27 mysql-bin.000099
    8 -rw-r----- 1 root  root  194 Jul 29 16:27 mysql-bin.000100
    Step 2: Destroy the table.
     
    Check target table on master.
     1 zlm@192.168.56.100:3306 [sysbench]>show tables;
     2 +--------------------+
     3 | Tables_in_sysbench |
     4 +--------------------+
     5 | sbtest1            |
     6 | sbtest2            |
     7 | sbtest3            |
     8 | sbtest4            |
     9 | sbtest5            |
    10 | sbtest6            |
    11 +--------------------+
    12 6 rows in set (0.00 sec)
    13 
    14 zlm@192.168.56.100:3306 [sysbench]>select count(*) from sbtest6;
    15 +----------+
    16 | count(*) |
    17 +----------+
    18 |        0 |
    19 +----------+
    20 1 row in set (0.00 sec)
    21 
    22 zlm@192.168.56.100:3306 [sysbench]>insert into sbtest6 values(1,1,'a','b');
    23 Query OK, 1 row affected (0.00 sec)
    24 
    25 zlm@192.168.56.100:3306 [sysbench]>select * from sbtest6;
    26 +----+---+---+-----+
    27 | id | k | c | pad |
    28 +----+---+---+-----+
    29 |  1 | 1 | a | b   |
    30 +----+---+---+-----+
    31 1 row in set (0.00 sec)
    Generate Xtrabackup backup set.
     1 [root@zlm1 16:32:14 ~]
     2 #innobackupex --defaults-file=/data/mysql/mysql3306/my3306.cnf -uroot -pPassw0rd /data/backup
     3 180729 16:32:20 innobackupex: Error: extra argument found -pPassw0rd
     4 180729 16:32:20 innobackupex: Error: extra argument found /data/backup
     5 
     6 [root@zlm1 16:32:20 ~]
     7 #innobackupex -v
     8 innobackupex version 2.4.4 Linux (x86_64) (revision id: df58cf2)
     9 
    10 [root@zlm1 16:32:26 ~]
    11 #innobackupex --defaults-file=/data/mysql/mysql3306/my3306.cnf --user=root --password=Passw0rd /data/backup
    12 180729 16:32:33 innobackupex: Starting the backup operation
    13 ...
    14 
    15 180729 16:32:53 Backup created in directory '/data/backup/2018-07-29_16-32-33'
    16 MySQL binlog position: filename 'mysql-bin.000100', position '476', GTID of the last change '2a4b3562-2ab6-11e8-be7a-080027de0e0e:1-12715694'
    17 180729 16:32:53 [00] Writing backup-my.cnf
    18 180729 16:32:53 [00]        ...done
    19 180729 16:32:53 [00] Writing xtrabackup_info
    20 180729 16:32:53 [00]        ...done
    21 xtrabackup: Transaction log of lsn (1719676169) to (1719676178) was copied.
    22 180729 16:32:53 completed OK!
    Insert one record of "sbtest6" and drop it.
     1 zlm@192.168.56.100:3306 [sysbench]>insert into sbtest6 values(2,2,'c','d');
     2 Query OK, 1 row affected (0.00 sec)
     3 
     4 zlm@192.168.56.100:3306 [sysbench]>show master status;
     5 +------------------+----------+--------------+------------------+-------------------------------------------------+
     6 | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                               |
     7 +------------------+----------+--------------+------------------+-------------------------------------------------+
     8 | mysql-bin.000100 |      758 |              |                  | 2a4b3562-2ab6-11e8-be7a-080027de0e0e:1-12715695 |
     9 +------------------+----------+--------------+------------------+-------------------------------------------------+
    10 1 row in set (0.00 sec)
    11 
    12 zlm@192.168.56.100:3306 [sysbench]>drop tables sbtest6;
    13 Query OK, 0 rows affected (0.02 sec)
    14 
    15 zlm@192.168.56.100:3306 [sysbench]>show master status;
    16 +------------------+----------+--------------+------------------+-------------------------------------------------+
    17 | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                               |
    18 +------------------+----------+--------------+------------------+-------------------------------------------------+
    19 | mysql-bin.000100 |      951 |              |                  | 2a4b3562-2ab6-11e8-be7a-080027de0e0e:1-12715696 |
    20 +------------------+----------+--------------+------------------+-------------------------------------------------+
    21 1 row in set (0.00 sec)
    Shutdown the mysqld on master(mimic the MySQL instance down).
     1 [root@zlm1 16:56:54 /data/backup]
     2 #mysqladmin shutdown
     3 
     4 [root@zlm1 16:57:05 /data/backup]
     5 #ps aux|grep mysqld
     6 mysql     3804  0.0 20.7 1072396 210620 pts/0  Sl   15:52   0:02 mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf
     7 root      4512  0.0  0.0 112640   960 pts/2    R+   16:57   0:00 grep --color=auto mysqld
     8 
     9 [root@zlm1 16:57:10 /data/backup]
    10 #ps aux|grep mysqld
    11 mysql     3804  0.0 20.1 1038828 204780 pts/0  Sl   15:52   0:02 mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf
    12 root      4518  0.0  0.0 112640   956 pts/2    R+   16:57   0:00 grep --color=auto mysqld
    13 
    14 [root@zlm1 16:57:15 /data/backup]
    15 #mysqladmin shutdown
    16 mysqladmin: connect to server at '192.168.56.100' failed
    17 error: 'Can't connect to MySQL server on '192.168.56.100' (111)'
    18 Check that mysqld is running on 192.168.56.100 and that the port is 3306.
    19 You can check this by doing 'telnet 192.168.56.100 3306'
    20 
    21 [root@zlm1 16:57:23 /data/backup]
    22 #ps aux|grep mysqld
    23 root      4529  0.0  0.0 112640   960 pts/2    R+   16:57   0:00 grep --color=auto mysqld
    Copy backup set to zlm2.
     1 [root@zlm1 16:32:53 ~]
     2 #cd /data/backup/
     3 
     4 [root@zlm1 16:37:19 /data/backup]
     5 #ls -l
     6 total 4
     7 drwxr-x--- 7 root root 4096 Jul 29 16:32 2018-07-29_16-32-33
     8 
     9 [root@zlm1 16:37:24 /data/backup]
    10 #scp -r 2018-07-29_16-32-33 zlm2:/data/backup
    11 xtrabackup_logfile                                                                                                 100% 2560     2.5KB/s   00:00    
    12 ibdata1                                                                                                            100%  100MB  50.0MB/s   00:02
    13 ... //Omitted.
    Step 3: Rescue data.
     
    Prepare to restore the backup with "--apply-log" on zlm2.
     1 [root@zlm2 16:38:09 /data/backup]
     2 #ls -l
     3 total 4
     4 drwxr-x--- 7 root root 4096 Jul 29 16:37 2018-07-29_16-32-33
     5 
     6 [root@zlm2 16:38:12 /data/backup]
     7 #innobackupex -v
     8 xtrabackup: recognized server arguments: --datadir=/var/lib/mysql 
     9 innobackupex version 2.4.12 Linux (x86_64) (revision id: 170eb8c)
    10 
    11 [root@zlm2 16:39:13 /data/backup]
    12 #innobackupex --defaults-file=/data/mysql/mysql3306/my3306.cnf -uroot -pPassw0rd --apply-log /data/backup/2018-07-29_16-32-33/
    13 ... //Omitted.
    14 
    15 xtrabackup: starting shutdown with innodb_fast_shutdown = 1
    16 InnoDB: page_cleaner: 1000ms intended loop took 8812ms. The settings might not be optimal. (flushed=0 and evicted=0, during the time.)
    17 InnoDB: FTS optimize thread exiting.
    18 InnoDB: Starting shutdown...
    19 InnoDB: Shutdown completed; log sequence number 1719676456
    20 180729 16:39:39 completed OK!
    Shutdown instance and copy back.
     1 [root@zlm2 16:39:39 /data/backup]
     2 #ps aux|grep mysqld
     3 mysql     3771  0.0 18.7 1071816 190784 pts/0  Sl   15:52   0:01 mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf
     4 root      4451  0.0  0.0 112640   956 pts/1    R+   16:43   0:00 grep --color=auto mysqld
     5 
     6 [root@zlm2 16:43:10 /data/backup]
     7 #mysqladmin shutdown
     8 
     9 [root@zlm2 16:43:15 /data/backup]
    10 #ps aux|grep mysqld
    11 root      4463  0.0  0.0 112640   956 pts/1    R+   16:43   0:00 grep --color=auto mysqld
    12 
    13 [root@zlm2 16:43:18 /data/backup]
    14 #cd /data/mysql/mysql3306/data/
    15 
    16 [root@zlm2 16:43:36 /data/mysql/mysql3306/data]
    17 #rm -rf *
    18 
    19 [root@zlm2 16:43:39 /data/mysql/mysql3306/data]
    20 #cd ../logs
    21 
    22 [root@zlm2 16:43:50 /data/mysql/mysql3306/logs]
    23 #rm -rf *
    24 
    25 [root@zlm2 16:43:53 /data/mysql/mysql3306/logs]
    26 #innobackupex --defaults-file=/data/mysql/mysql3306/my3306.cnf -uroot -pPassw0rd --copy-back /data/backup/2018-07-29_16-32-33/
    27 ... //Omitted.
    Restart instance and check table.
     1 [root@zlm2 16:44:41 /data/mysql/mysql3306/logs]
     2 #cd ../data
     3 
     4 [root@zlm2 16:47:40 /data/mysql/mysql3306/data]
     5 #chown -R mysql.mysql *
     6 
     7 [root@zlm2 16:47:49 /data/mysql/mysql3306/data]
     8 #sh /root/mysqld.sh
     9 
    10 [root@zlm2 16:47:56 /data/mysql/mysql3306/data]
    11 #ps aux|grep mysqld
    12 mysql     4514  3.2 17.9 1071804 182316 pts/1  Sl   16:47   0:00 mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf
    13 root      4547  0.0  0.0 112640   960 pts/1    R+   16:48   0:00 grep --color=auto mysqld
    14 
    15 [root@zlm2 16:48:03 /data/mysql/mysql3306/data]
    16 #mysql
    17 Welcome to the MySQL monitor.  Commands end with ; or g.
    18 Your MySQL connection id is 2
    19 Server version: 5.7.21-log MySQL Community Server (GPL)
    20 
    21 Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
    22 
    23 Oracle is a registered trademark of Oracle Corporation and/or its
    24 affiliates. Other names may be trademarks of their respective
    25 owners.
    26 
    27 Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    28 
    29 zlm@192.168.56.101:3306 [(none)]>use sysbench
    30 Reading table information for completion of table and column names
    31 You can turn off this feature to get a quicker startup with -A
    32 
    33 Database changed
    34 zlm@192.168.56.101:3306 [sysbench]>show tables;
    35 +--------------------+
    36 | Tables_in_sysbench |
    37 +--------------------+
    38 | sbtest1            |
    39 | sbtest2            |
    40 | sbtest3            |
    41 | sbtest4            |
    42 | sbtest5            |
    43 | sbtest6            |
    44 +--------------------+
    45 6 rows in set (0.00 sec)
    46 
    47 zlm@192.168.56.101:3306 [sysbench]>select * from sbtest6;
    48 +----+---+---+-----+
    49 | id | k | c | pad |
    50 +----+---+---+-----+
    51 |  1 | 1 | a | b   |
    52 +----+---+---+-----+
    53 1 row in set (0.00 sec)
    Step 4: Implement a slave with binlog server.
     
    Start mysqld on binlog server.
     1 [root@zlm3 16:50:00 /data/mysql/mysql3306/logs]
     2 #ps aux|grep mysqld
     3 root      4405  0.0  0.0 112640   960 pts/0    R+   16:50   0:00 grep --color=auto mysqld
     4 
     5 [root@zlm3 16:50:08 /data/mysql/mysql3306/logs]
     6 #sh /root/mysqld.sh
     7 
     8 [root@zlm3 16:50:13 /data/mysql/mysql3306/logs]
     9 #ps aux|grep mysqld
    10 mysql     4411 16.5 15.6 498232 159408 pts/0   Rl   16:50   0:00 mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf
    11 root      4429  0.0  0.0 112640   960 pts/0    R+   16:50   0:00 grep --color=auto mysqld
    12 
    13 [root@zlm3 16:51:03 /data/mysql/mysql3306/logs]
    14 #ls -l
    15 total 11216
    16 -rw-r----- 1 root  root      4128 Jul 29 08:42 mysql-bin.000095
    17 -rw-r----- 1 root  root       241 Jul 29 08:42 mysql-bin.000096
    18 -rw-r----- 1 root  root  11461562 Jul 29 09:07 mysql-bin.000097
    19 -rw-r----- 1 mysql mysql      154 Jul 29 16:50 mysql-bin.000098
    20 -rw-r----- 1 mysql mysql       44 Jul 29 16:50 mysql-bin.index
    21 
    22 [root@zlm3 16:51:04 /data/mysql/mysql3306/logs]
    23 #cat mysql-bin.index
    24 /data/mysql/mysql3306/logs/mysql-bin.000098
    Disguise the binlog server is a fake master.
     1 [root@zlm3 16:52:59 /data/mysql/mysql3306/logs]
     2 #rm -f mysql-bin.00009*
     3 [1]+  Done                    mysqlbinlog -R --raw -h192.168.56.100 -urepl -prepl4slave -P3306 --stop-never mysql-bin.000098  (wd: /data)
     4 (wd now: /data/mysql/mysql3306/logs)
     5 
     6 [root@zlm3 17:00:06 /data/mysql/mysql3306/logs]
     7 #ls -l
     8 total 4
     9 -rw-r----- 1 mysql mysql 44 Jul 29 16:50 mysql-bin.index
    10 
    11 [root@zlm3 17:00:27 /data/mysql/mysql3306/logs]
    12 #ps aux|grep mysqlbinlog
    13 root      4475  0.0  0.0 112640   960 pts/0    R+   17:00   0:00 grep --color=auto mysqlbinlog
    14 
    15 [root@zlm3 17:00:38 /data/mysql/mysql3306/logs]
    16 #cp /data/mysql-bin* .
    17 
    18 [root@zlm3 17:02:48 /data/mysql/mysql3306/logs]
    19 #ls -l
    20 -rw-r----- 1 root  root  410 Jul 29 17:01 mysql-bin.000098
    21 -rw-r----- 1 root  root  241 Jul 29 17:01 mysql-bin.000099
    22 -rw-r----- 1 root  root  951 Jul 29 17:01 mysql-bin.000100
    23 -rw-r----- 1 root  root  177 Jul 29 17:03 mysql-bin.index
    24 
    25 [root@zlm3 17:02:54 /data/mysql/mysql3306/logs]
    26 #ls -1 | awk '{print i$0}' i=`pwd`'/'|grep mysql-bin.000 > mysql-bin.index
    27 
    28 [root@zlm3 17:03:06 /data/mysql/mysql3306/logs]
    29 #cat mysql-bin.index 
    30 /data/mysql/mysql3306/logs/mysql-bin.000098
    31 /data/mysql/mysql3306/logs/mysql-bin.000099
    32 /data/mysql/mysql3306/logs/mysql-bin.000100
    33 
    34 [root@zlm3 17:16:14 /data/mysql/mysql3306/logs]
    35 #chown mysql.mysql *
    36 
    37 [root@zlm3 17:17:23 /data/mysql/mysql3306/logs]
    38 #ls -l
    39 total 16
    40 -rw-r----- 1 mysql mysql 410 Jul 29 17:01 mysql-bin.000098
    41 -rw-r----- 1 mysql mysql 241 Jul 29 17:01 mysql-bin.000099
    42 -rw-r----- 1 mysql mysql 951 Jul 29 17:01 mysql-bin.000100
    43 -rw-r----- 1 mysql mysql 177 Jul 29 17:03 mysql-bin.index
    Change the server-uuid of binlog server to be equal with master.
     1 [root@zlm3 18:01:50 /data/mysql/mysql3306]
     2 #cd ../data
     3 
     4 [root@zlm3 18:01:53 /data/mysql/mysql3306/data]
     5 #cat auto.cnf
     6 [auto]
     7 server-uuid=e00ef9f5-6c4b-11e8-8389-080027de0e0e
     8 
     9 [root@zlm3 18:04:11 /data/mysql/mysql3306/data]
    10 #vim auto.cnf
    11 
    12 [root@zlm3 18:04:26 /data/mysql/mysql3306/data]
    13 #cat auto.cnf
    14 [auto]
    15 server-uuid=2a4b3562-2ab6-11e8-be7a-080027de0e0e
    Execute "change master to ... " on zlm2.
    1 zlm@192.168.56.101:3306 [sysbench]>change master to 
    2     -> master_host='192.168.56.102',
    3     -> master_port=3306,
    4     -> master_user='repl',
    5     -> master_password='repl4slave',
    6     -> master_auto_position=1;
    7 Query OK, 0 rows affected, 2 warnings (0.01 sec)
    Start IO_Thread on zlm2.
     1 [root@zlm2 17:12:39 /data/backup/2018-07-29_16-32-33]
     2 #cat xtrabackup_binlog_info
     3 mysql-bin.000100    476    2a4b3562-2ab6-11e8-be7a-080027de0e0e:1-12715694
     4 
     5 zlm@192.168.56.101:3306 [sysbench]>reset master;
     6 Query OK, 0 rows affected (0.00 sec)
     7 
     8 zlm@192.168.56.101:3306 [sysbench]>set @@global.gtid_purged='2a4b3562-2ab6-11e8-be7a-080027de0e0e:1-12715694';
     9 Query OK, 0 rows affected (0.00 sec)
    10 
    11 zlm@192.168.56.101:3306 [sysbench]>start slave io_thread;
    12 Query OK, 0 rows affected (0.00 sec)
    13 
    14 zlm@192.168.56.101:3306 [sysbench]>show slave statusG
    15 *************************** 1. row ***************************
    16                Slave_IO_State: 
    17                   Master_Host: 192.168.56.102
    18                   Master_User: repl
    19                   Master_Port: 3306
    20                 Connect_Retry: 60
    21               Master_Log_File: 
    22           Read_Master_Log_Pos: 4
    23                Relay_Log_File: relay-bin.000001
    24                 Relay_Log_Pos: 4
    25         Relay_Master_Log_File: 
    26              Slave_IO_Running: No
    27             Slave_SQL_Running: No
    28               Replicate_Do_DB: 
    29           Replicate_Ignore_DB: 
    30            Replicate_Do_Table: 
    31        Replicate_Ignore_Table: 
    32       Replicate_Wild_Do_Table: 
    33   Replicate_Wild_Ignore_Table: 
    34                    Last_Errno: 0
    35                    Last_Error: 
    36                  Skip_Counter: 0
    37           Exec_Master_Log_Pos: 0
    38               Relay_Log_Space: 154
    39               Until_Condition: None
    40                Until_Log_File: 
    41                 Until_Log_Pos: 0
    42            Master_SSL_Allowed: No
    43            Master_SSL_CA_File: 
    44            Master_SSL_CA_Path: 
    45               Master_SSL_Cert: 
    46             Master_SSL_Cipher: 
    47                Master_SSL_Key: 
    48         Seconds_Behind_Master: NULL
    49 Master_SSL_Verify_Server_Cert: No
    50                 Last_IO_Errno: 1236
    51                 Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.'
    52                Last_SQL_Errno: 0
    53                Last_SQL_Error: 
    54   Replicate_Ignore_Server_Ids: 
    55              Master_Server_Id: 1023306
    56                   Master_UUID: e00ef9f5-6c4b-11e8-8389-080027de0e0e
    57              Master_Info_File: /data/mysql/mysql3306/data/master.info
    58                     SQL_Delay: 0
    59           SQL_Remaining_Delay: NULL
    60       Slave_SQL_Running_State: 
    61            Master_Retry_Count: 86400
    62                   Master_Bind: 
    63       Last_IO_Error_Timestamp: 180729 18:00:08
    64      Last_SQL_Error_Timestamp: 
    65                Master_SSL_Crl: 
    66            Master_SSL_Crlpath: 
    67            Retrieved_Gtid_Set: 
    68             Executed_Gtid_Set: 2a4b3562-2ab6-11e8-be7a-080027de0e0e:1-12715694
    69                 Auto_Position: 1
    70          Replicate_Rewrite_DB: 
    71                  Channel_Name: 
    72            Master_TLS_Version: 
    73 1 row in set (0.00 sec)
        I was stucked here.Slave IO_Thread could not be started with 1236,although I had replaced the server-uuid and set the variable of gtid_purged.Only if the slave get binlog which contains the incremental data and start the slave SQL_Thread.We can get back our dropped table together with the modification on it.
     
    Supplemented on July 31:
     
        The previous fault of 1236 was due to the wrong configuration of variable "gtid_purged".There were two individual gtids generated by the other masters with different uuid as bellow:
     
     
     
        Therefore,the configuration command should be executed like this:
     
    1 set @@global.gtid_purged='27af30ca-6800-11e8-ad7e-080027de0e0e:1,
    2 2a4b3562-2ab6-11e8-be7a-080027de0e0e:1-12715694,
    3 e00ef9f5-6c4b-11e8-8389-080027de0e0e:1';
        not merely set it like this:
     
    1 set @@global.gtid_purged='2a4b3562-2ab6-11e8-be7a-080027de0e0e:1-12715694';
        Eventually,In order to make the gtid more clear,I executed "reset master" on binlog server(zlm3) and then copyed those necessary binlogs which were transfered from original master.Further more,I changed back the uuid of zlm3.Because I found that there's no need to change it at all.
        The new procedure of demonstration was shown below:
     
      1 zlm@192.168.56.101:3306 [(none)]>set @@global.gtid_purged='2a4b3562-2ab6-11e8-be7a-080027de0e0e:1-12715694';
      2 Query OK, 0 rows affected (0.00 sec)
      3 
      4 zlm@192.168.56.101:3306 [(none)]>change master to master_host='192.168.56.102',master_port=3306,master_user='repl',master_password='repl4slave',master_auto_position=1;
      5 Query OK, 0 rows affected, 2 warnings (0.01 sec)
      6 
      7 zlm@192.168.56.101:3306 [(none)]>start slave io_thread;
      8 Query OK, 0 rows affected (0.00 sec)
      9 
     10 zlm@192.168.56.101:3306 [(none)]>show slave statusG
     11 *************************** 1. row ***************************
     12                Slave_IO_State: Waiting for master to send event
     13                   Master_Host: 192.168.56.102
     14                   Master_User: repl
     15                   Master_Port: 3306
     16                 Connect_Retry: 60
     17               Master_Log_File: mysql-bin.000105
     18           Read_Master_Log_Pos: 194
     19                Relay_Log_File: relay-bin.000001
     20                 Relay_Log_Pos: 4
     21         Relay_Master_Log_File: 
     22              Slave_IO_Running: Yes
     23             Slave_SQL_Running: No
     24               Replicate_Do_DB: 
     25           Replicate_Ignore_DB: 
     26            Replicate_Do_Table: 
     27        Replicate_Ignore_Table: 
     28       Replicate_Wild_Do_Table: 
     29   Replicate_Wild_Ignore_Table: 
     30                    Last_Errno: 0
     31                    Last_Error: 
     32                  Skip_Counter: 0
     33           Exec_Master_Log_Pos: 0
     34               Relay_Log_Space: 3360
     35               Until_Condition: None
     36                Until_Log_File: 
     37                 Until_Log_Pos: 0
     38            Master_SSL_Allowed: No
     39            Master_SSL_CA_File: 
     40            Master_SSL_CA_Path: 
     41               Master_SSL_Cert: 
     42             Master_SSL_Cipher: 
     43                Master_SSL_Key: 
     44         Seconds_Behind_Master: NULL
     45 Master_SSL_Verify_Server_Cert: No
     46                 Last_IO_Errno: 0
     47                 Last_IO_Error: 
     48                Last_SQL_Errno: 0
     49                Last_SQL_Error: 
     50   Replicate_Ignore_Server_Ids: 
     51              Master_Server_Id: 1023306
     52                   Master_UUID: e00ef9f5-6c4b-11e8-8389-080027de0e0e //I changed back the uuid of zlm3 to its previous value.
     53              Master_Info_File: /data/mysql/mysql3306/data/master.info
     54                     SQL_Delay: 0
     55           SQL_Remaining_Delay: NULL
     56       Slave_SQL_Running_State: 
     57            Master_Retry_Count: 86400
     58                   Master_Bind: 
     59       Last_IO_Error_Timestamp: 
     60      Last_SQL_Error_Timestamp: 
     61                Master_SSL_Crl: 
     62            Master_SSL_Crlpath: 
     63            Retrieved_Gtid_Set: 2a4b3562-2ab6-11e8-be7a-080027de0e0e:12715695-12715696 //New gtid was received.
     64             Executed_Gtid_Set: 2a4b3562-2ab6-11e8-be7a-080027de0e0e:1-12715694
     65                 Auto_Position: 1
     66          Replicate_Rewrite_DB: 
     67                  Channel_Name: 
     68            Master_TLS_Version: 
     69 1 row in set (0.00 sec)
     70 
     71 zlm@192.168.56.101:3306 [sysbench]>start slave sql_thread until sql_before_gtids='2a4b3562-2ab6-11e8-be7a-080027de0e0e:12715696';
     72 Query OK, 0 rows affected (0.00 sec)
     73 
     74 zlm@192.168.56.101:3306 [sysbench]>show slave statusG
     75 *************************** 1. row ***************************
     76                Slave_IO_State: Waiting for master to send event
     77                   Master_Host: 192.168.56.102
     78                   Master_User: repl
     79                   Master_Port: 3306
     80                 Connect_Retry: 60
     81               Master_Log_File: mysql-bin.000105
     82           Read_Master_Log_Pos: 194
     83                Relay_Log_File: relay-bin.000002
     84                 Relay_Log_Pos: 696
     85         Relay_Master_Log_File: mysql-bin.000100
     86              Slave_IO_Running: Yes
     87             Slave_SQL_Running: No
     88               Replicate_Do_DB: 
     89           Replicate_Ignore_DB: 
     90            Replicate_Do_Table: 
     91        Replicate_Ignore_Table: 
     92       Replicate_Wild_Do_Table: 
     93   Replicate_Wild_Ignore_Table: 
     94                    Last_Errno: 0
     95                    Last_Error: 
     96                  Skip_Counter: 0
     97           Exec_Master_Log_Pos: 758
     98               Relay_Log_Space: 3360
     99               Until_Condition: SQL_BEFORE_GTIDS
    100                Until_Log_File: 
    101                 Until_Log_Pos: 0
    102            Master_SSL_Allowed: No
    103            Master_SSL_CA_File: 
    104            Master_SSL_CA_Path: 
    105               Master_SSL_Cert: 
    106             Master_SSL_Cipher: 
    107                Master_SSL_Key: 
    108         Seconds_Behind_Master: NULL
    109 Master_SSL_Verify_Server_Cert: No
    110                 Last_IO_Errno: 0
    111                 Last_IO_Error: 
    112                Last_SQL_Errno: 0
    113                Last_SQL_Error: 
    114   Replicate_Ignore_Server_Ids: 
    115              Master_Server_Id: 1023306
    116                   Master_UUID: e00ef9f5-6c4b-11e8-8389-080027de0e0e
    117              Master_Info_File: /data/mysql/mysql3306/data/master.info
    118                     SQL_Delay: 0
    119           SQL_Remaining_Delay: NULL
    120       Slave_SQL_Running_State: 
    121            Master_Retry_Count: 86400
    122                   Master_Bind: 
    123       Last_IO_Error_Timestamp: 
    124      Last_SQL_Error_Timestamp: 
    125                Master_SSL_Crl: 
    126            Master_SSL_Crlpath: 
    127            Retrieved_Gtid_Set: 2a4b3562-2ab6-11e8-be7a-080027de0e0e:12715695-12715696
    128             Executed_Gtid_Set: 2a4b3562-2ab6-11e8-be7a-080027de0e0e:1-12715695
    129                 Auto_Position: 1
    130          Replicate_Rewrite_DB: 
    131                  Channel_Name: 
    132            Master_TLS_Version: 
    133 1 row in set (0.00 sec)
    134 
    135 zlm@192.168.56.101:3306 [sysbench]>select * from sbtest6;
    136 +----+---+---+-----+
    137 | id | k | c | pad |
    138 +----+---+---+-----+
    139 |  1 | 1 | a | b   |
    140 |  2 | 2 | c | d   |
    141 +----+---+---+-----+
    142 2 rows in set (0.00 sec)
    143 
    144 //The incremental data in "sbtest6" had been come again.It was okay this time.

      

    Summary
    • Binlog server act as a master in this experiment.It can prevent data loss such as miss opeartion of dropping tables whenever the master crashes.
    • We can implement as many binlog servers as possible to continuously acquire the binlogs on different masters.
    • If the only purpose is to get back the dropping data,replication filter of "replicate_do_table" is not necessary.
    • The modification of "sever-uuid" is also neglectable operation.Each gtid contains a differten uuid is completely acceptable.It won't influence our replication except for a little bit complex in output.
     
  • 相关阅读:
    mirco新建proto流程
    Ubuntu默认防火墙安装、启用、配置、端口、查看状态相关信息
    Rails核心组件
    Ruby中文乱码问题
    python str转dict
    SQLserver AwaysOn日志文件过大,处理办法
    MySQL的一些小细节
    mysql删除表中重复值
    可恶的自增长标识符
    reset slave all更彻底
  • 原文地址:https://www.cnblogs.com/aaron8219/p/9383884.html
Copyright © 2011-2022 走看看