- Phiên bản MySQL Master: 5.5.16-1
- Phiên bản nô lệ của MySQL: 5.5,18-1
Ảnh chụp nhanh của chủ được tạo bởi:
mysql> FLUSH TABLES WITH READ LOCK;
shell> mysqldump --all-databases --master-data > dbname_`date +%F`.sql
Tệp kết xuất này được nhập vào nô lệ (được bắt đầu bằng --skip-slave-start
tùy chọn) mà không gặp lỗi:
shell> pv dbname_`date +%F`.sql | mysql -u root -p
Nhưng tôi đã gặp lỗi sau khi thực hiện mysql> start slave;
:
Last_SQL_Errno: 1062
Last_SQL_Error: Error 'Duplicate entry '115846' for key
'PRIMARY'' on query. Default database: 'db'. Query: 'INSERT INTO
request_posted (id, user_id, channel, message, link, picture, name, ...
Chỉ có một bản ghi với ID 115846 trên bản gốc:
mysql> select count(*) from request_posted where id=115846;
Current database: db
+----------+
| count(*) |
+----------+
| 1 |
+----------+
1 row in set (0.01 sec)
Hãy thử bỏ qua một số truy vấn với:
mysql> STOP SLAVE;
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> START SLAVE;
đã không giúp đỡ. Tôi không muốn bỏ qua những lỗi đó bằng cách thêm:
slave-skip-errors = 1062
để my.cnf
nộp vì nó có thể mang lại nô lệ không nhất quán.
Điều gì có thể là lý do cho lỗi này?
CẬP NHẬT
Đây không phải là cách tôi thường thiết lập sao chép myQuery
Những bước mà bạn nghĩ rằng tôi không làm theo tài liệu?
Tôi tự hỏi nếu bạn sẽ gặp phải vấn đề tương tự nếu bạn thiết lập toàn bộ cấu hình thay vì truyền lệnh mysqldump.
Không, nó hoạt động như bình thường nếu tôi cũng thay đổi chủ thành tọa độ tương ứng.
Tôi sẽ thử bỏ cơ sở dữ liệu vào nô lệ, đảm bảo các binlog rõ ràng và bắt đầu lại. Đồng thời kiểm tra bảng trong câu hỏi trên bản gốc để đảm bảo các chỉ mục không có lỗi.
Là xóa (di chuyển) tất cả các datadir đủ? Tôi đã làm điều đó và nhận được kết quả tương tự.
Trả lời @Dmytro Leonenko
'hiển thị trạng thái nô lệ \ G' trên nô lệ để đảm bảo rằng nó được định cấu hình đúng, MASTER_LOG_POS là 0
Chỉ 'hiển thị statug nô lệ \ G' sau khi nhập nhưng trước 'bắt đầu nô lệ;' có thể cho chúng tôi câu trả lời
Tôi đã sao lưu datadir, xóa tất cả và chạy mysql_install_db
, nhập tệp kết xuất, thực thi change master to
và đây là kết quả:
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: x.x.x.x
Master_User: xx
Master_Port: 3306
Connect_Retry: 60
Master_Log_File:
Read_Master_Log_Pos: 4
Relay_Log_File: mysqld-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File:
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: 0
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: NULL
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
1 row in set (0.00 sec)
Tôi đang tự hỏi tại sao Master_Log_Pos là 4?
--master-data
tùy chọn đã được viết tọa độ ghi nhị phân để các tập tin dump. Tôi chỉ cần thay đổi master thành master_host, master_user, master_password.
--master-data
tùy chọn khi tạo ảnh chụp nhanh dữ liệu? Nếu nó vẫn xảy ra khi tôi sử dụng --lock-all-tables
tùy chọn và change master to master_log_file='', master_log_pos='', ...
, nguyên nhân có thể là gì?
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1
Truy vấn gây ra lỗi ít nhất có thay đổi không? Là thiết lập vị trí binlog nô lệ chính xác?