nhân rộng mysql thành công nhưng nô lệ không nhân rộng


8

Tôi đã tạo ra một cấu hình chủ-mys mys mys và mọi thứ đều ổn. "hiển thị trạng thái tổng thể;" trên nô lệ không hiển thị bất kỳ lỗi. đây là đầu ra

 Slave_IO_State: Waiting for master to send event
                  Master_Host: 109.123.100.58
                  Master_User: replica
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 106
               Relay_Log_File: relay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: mysql-bin.000001
             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: 106
              Relay_Log_Space: 106
              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: 

Tuy nhiên, việc sao chép trên nô lệ dường như không xảy ra khi chủ nhân trải qua thay đổi

Về chủ. TÌNH TRẠNG MASTER

+------------------+----------+--------------+-------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB        |
+------------------+----------+--------------+-------------------------+
| mysql-bin.000001 |   639495 |              | mysql,informationschema |
+------------------+----------+--------------+-------------------------+

trên sản lượng PROCESSLIST nô lệ

+-----+-------------+-----------+------+---------+-------+-----------------------------------------------------------------------+------------------+
| Id  | User        | Host      | db   | Command | Time  | State                                                                 | Info             |
+-----+-------------+-----------+------+---------+-------+-----------------------------------------------------------------------+------------------+
| 174 | system user |           | NULL | Connect | 25777 | Waiting for master to send event                                      | NULL             |
| 175 | system user |           | NULL | Connect | 25777 | Has read all relay log; waiting for the slave I/O thread to update it | NULL             |
| 199 | root        | localhost | NULL | Query   |     0 | NULL                                                                  | show processlist |
+-----+-------------+-----------+------+---------+-------+-----------------------------------------------------------------------+------------------+
3 rows in set (0.00 sec)

Tui bỏ lỡ điều gì vậy


Hai câu hỏi. Bạn có cùng một phiên bản MySQL chạy trên master và Slave không? Bạn có id máy chủ khác được đặt trong cấu hình cho chủ / nô lệ không? chỉnh sửa: chúng ta có thể thấy đầy đủ SHOW MASTER STATUSquá không, bit top bị thiếu tôi nghĩ.

xin lỗi, lỗi của tôi, bit trên cùng là đầu ra cho SHOW SLAVE STATUS \ G. hiển thị trạng thái chủ trên sản lượng nô lệ + ------------------ + ---------- + ------------- - + ------------------------- + | Tập tin | Vị trí | Binlog_Do_DB | Binlog_Ignore_DB | + ------------------ + ---------- + -------------- + ---- --------------------- + | mysql-bin.000004 | 106 | | mysql thông tin | + ------------------ + ---------- + -------------- + ---- --------------------- +
Soyeed

Đừng nhìn SHOW MASTER STATUSvào nô lệ . Thông tin này không liên quan trừ khi nô lệ cũng đang phục vụ như một chủ nhân cho các nô lệ khác ở hạ lưu.
Michael - sqlbot

Nếu bạn SHOW PROCESSLISTở trên bản gốc, bạn có thấy kết nối đến từ nô lệ không? Bạn nên. Ngoài ra, tôi sẽ thử STOP SLAVE IO_THREAD;sau đó START SLAVE IO_THREAD;trên nô lệ và xem đầu ra của SHOW SLAVE STATUS(trên nô lệ) thay đổi như thế nào, nếu có.
Michael - sqlbot

Câu trả lời:


5

Đầu ra bạn trình bày là rất khó hiểu. Một mặt, chủ cho thấy:

mysql-bin.000001   639495 

Slave's PROCESSLISTchỉ ra rằng sao chép hoạt động (luồng IO được kết nối với chủ, luồng SQL đang chờ).

Một SHOW SLAVE STATUSlần nữa , nô lệ tuyên bố tất cả là tốt, nhưng vị trí của chủ là 106.

Có phải tất cả các đầu ra được ban hành gần như cùng một lúc? Nếu không, thì chúng không có giá trị.

Tôi sẽ kiểm tra như sau:

  • Rõ ràng: có 109.123.100.58thực sự là chủ của bạn?
  • Có phải SHOW PROCESSLISTtrên danh sách tổng thể kết nối được thực hiện bởi nô lệ dưới replicangười dùng?
  • Bạn có các server-idcài đặt khác nhau cho chủ và nô lệ?
  • Bạn có bất kỳ replicate-do-*hoặc replicate-ignore-*cài đặt trong mysql.cnftập tin của bạn ?

yeah đầu ra là cùng một lúc. 1. vâng 109.123.100.58 là chủ. 2. không 3. có 4. không. Hiển thị danh sách quy trình trên các chương trình chính '+-------+------+-----------+------+---------+------+-------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +-------+------+-----------+------+---------+------+-------+------------------+ | 23243 | root | localhost | NULL | Query | 0 | NULL | SHOW PROCESSLIST | +-------+------+-----------+------+---------+------+-------+------------------+
Soyeed

3
2-không ?? Weirder theo phút. Tôi rất không chắc chắn rằng nô lệ của bạn thực sự được kết nối với chủ chính.
Shlomi Noach

1
Cảm ơn vì tiền hỗ trợ! Trong trường hợp của tôi, tôi đã sao chép M-> S1-> S2 và id máy chủ S2 của tôi khớp với id máy chủ M của tôi.
Aaron R.

1

Tốt hơn so với sử dụng binlog-ign-db là sử dụng bộ lọc phía nô lệ. Tôi đã bị mắc kẹt trong một tình huống tương tự, vâng, tôi phải mất cả ngày để tìm ra:

Tôi đã bỏ lỡ một cái gì đó lớn !!!

Sự khác biệt giữa

--replicate-do-db=
--replicate-do-table=

Về phía nô lệ. Và

--replicate-do-table='mydb.%'

không làm việc cho tôi trên bàn. Tôi đã phải sử dụng

--replicate-do-db='mydb'

Tôi đoán điều này sẽ làm việc cho một ký tự đại diện

--replicate-wild-do-table='mydb.%'

... Bây giờ để tìm ra cách sao chép cùng một bảng từ nhiều chủ. Được rồi, tôi đã hiểu ra, MySQL không hỗ trợ nó nguyên bản; MariaDB 10 không.

Tôi cũng gặp một vấn đề khác ban đầu: Mật khẩu của tôi dài hơn 32 ký tự. Boo!


1

Tôi cũng đã gặp vấn đề này. Nguyên nhân sâu xa là có chủ server_id=0. MariaDB có hành vi đặc biệt cho server_id=0mà sẽ không cho phép sao chép lại làm việc.

Server_id phải là duy nhất cho mỗi máy chủ trong nhóm sao chép. Nếu để ở 0, mặc định cho đến MariaDB 10.2.1, một nô lệ sẽ không kết nối với chủ và chủ sẽ từ chối tất cả các kết nối nô lệ.

Khi tôi bắt đầu lập chỉ mục dựa trên 1, mọi thứ đều hoạt động tốt.


-2

Bạn đã không nói với nô lệ mà DB sẽ sao chép: biến Replicate_Do_DB trống.

Cố gắng thêm dòng

sao chép-do-db = name_of_db (trong đó "name_of_db" là tên của cơ sở dữ liệu để sao chép)

trong my.cnf của bạn (trên nô lệ) và khởi động lại máy chủ nô lệ.

EDIT: Tôi không nghĩ rằng câu trả lời của tôi là giải pháp phù hợp, trong khi đó ;-)

Có lẽ hãy xem trang này thay thế: http://dev.mysql.com/doc/refman/5.1/en/replication-probols.html


Tôi không nghĩ đó là chính xác. Bạn có thể thấy rằng 639495 byte đã được ghi vào binlog của chủ

Câu hỏi là tại sao sao chép không hoạt động - không phải nếu một cái gì đó được viết vào binlog. Thông thường, TÌNH TRẠNG SHOW MASTER không hiển thị thêm thông tin.

xin lỗi xấu của tôi .. hiển thị năng suất trạng thái tổng thể+------------------+----------+--------------+-------------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+-------------------------+ | mysql-bin.000004 | 106 | | mysql,informationschema | +------------------+----------+--------------+-------------------------+
Soyeed

Ngoài ra tôi đã nói rằng nếu tôi không có ý định sao chép-do-db thì nó sao chép tất cả các cơ sở dữ liệu. thay vào đó tôi đã cóentry binlog_ignore_db = mysql binlog_ignore_db = informationschema
Soyeed

1
Không làm theo lời khuyên trong câu trả lời này, vì bạn không cần nói cho cơ sở dữ liệu biết lược đồ nào cần sao chép (mặc định cho tất cả các lược đồ) và điều này rất có thể sẽ phá vỡ bản sao của bạn và có lẽ không phải là thứ bạn đang tìm kiếm. Bạn muốn (99,999%) để nhân rộng tất cả các lược đồ.
Shlomi Noach
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.