Khởi động lại sao chép mysql sau sql_error


8

Tôi có hai máy chủ mysql, một chủ và một nô lệ.

Ai đó đã đi đến nô lệ và tạo ra một bảng, sau đó tiếp tục với chủ và tạo ra cùng một bảng. Tất nhiên câu lệnh DDL này đã được sao chép vào Slave, gây ra lỗi, khiến việc sao chép dừng lại ở điểm xảy ra lỗi.

Làm thế nào để tôi khởi động lại quá trình sao chép sau khi bỏ bảng trên Slave hoặc bắt đầu sao chép sau câu lệnh đó?

hiển thị đầu ra trạng thái nô lệ:

mysql> show slave status \G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: xx.xx.xx.xx
                  Master_User: buildbot
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.024536
          Read_Master_Log_Pos: 33489509
               Relay_Log_File: mysqld-relay-bin.049047
                Relay_Log_Pos: 32575097
        Relay_Master_Log_File: mysql-bin.024476
             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: 1050
                   Last_Error: Error 'Table 'checklist' already exists' on query. Default database: 'dbname'. Query: 'CREATE TABLE `checklist` (
  `checklist_id` int(11) NOT NULL AUTO_INCREMENT,
  `description` varchar(768) NOT NULL,
  `url` varchar(512) NOT NULL,
  `active` bit(1) NOT NULL,
  `insert_date` datetime NOT NULL,
  `xcred` int(11) NOT NULL,
  PRIMARY KEY (`checklist_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1'
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 32574952
              Relay_Log_Space: 6766519525
              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: 2013
                Last_IO_Error: error reconnecting to master 'user@xx.xx.xx.xx:3306' - retry-time: 60  retries: 86400
               Last_SQL_Errno: 1050
               Last_SQL_Error: Error 'Table 'checklist' already exists' on query. Default database: 'dbname'. Query: 'CREATE TABLE `checklist` (
  `checklist_id` int(11) NOT NULL AUTO_INCREMENT,
  `description` varchar(768) NOT NULL,
  `url` varchar(512) NOT NULL,
  `active` bit(1) NOT NULL,
  `insert_date` datetime NOT NULL,
  `xcred` int(11) NOT NULL,
  PRIMARY KEY (`checklist_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1'

Câu trả lời:


15

Bạn có thể sử dụng các lệnh sau (trên dấu nhắc mysql):

mysql> STOP SLAVE;
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS;

Giá trị 1đại diện cho số lượng báo cáo để bỏ qua. Bạn có thể làm điều đó nhiều lần cho đến khi nhân rộng được cố định. Bạn có thể xem trang này .


2
+1 Tôi đã sử dụng điều này nhiều lần, tuy nhiên điều quan trọng là phải hiểu những gì bạn đang làm khi bạn chạy nó. Nó có thể dẫn đến các vấn đề toàn vẹn dữ liệu. Trong trường hợp khi một tệp kết xuất đã được tải vào hộp sai (tức là nô lệ không phải chủ) tôi đã bỏ qua 100 truy vấn (lần đầu tiên kiểm tra điều này sẽ không có hại!). Điều này có thể tránh quá trình thiết lập lại toàn bộ bản sao một lần nữa.
Coops

Vâng, bạn đúng. Điều này nên được thực hiện với sự cẩn thận. Nó rất hữu ích trong trường hợp bạn có một truy vấn không hợp lệ đã dừng sao chép. Bạn chỉ có thể bỏ qua nó. Bạn cũng có thể kiểm tra (các) bảng có liên quan sau này để đảm bảo bạn không bị mất dữ liệu giữa chủ và nô lệ.
Khaled

3

Bạn không. Thực tế, bạn cần thiết lập lại bản sao từ đầu như bạn đã làm lần đầu tiên, bởi vì nếu bạn bỏ qua các câu lệnh, bạn có thể mất tính toàn vẹn. Để được an toàn, bạn phải nhân rộng từ một điểm khởi đầu an toàn đã biết.

  • Khóa chủ
  • Kết xuất dữ liệu bằng cách sử dụng --master-data và lưu ý tọa độ binlog (ví dụ: hiển thị trạng thái chính)
  • Mở khóa chủ
  • Tải bãi rác vào nô lệ
  • Bắt đầu sử dụng 'thay đổi chủ' và tọa độ binlog bạn đã ghi lại trước đó
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.