- รุ่น MySQL หลัก: 5.5.16-1
- MySQL Slave เวอร์ชั่น: 5.5.18-1
สแนปชอตของต้นแบบถูกสร้างโดย:
mysql> FLUSH TABLES WITH READ LOCK;
shell> mysqldump --all-databases --master-data > dbname_`date +%F`.sql
ไฟล์ดัมพ์นี้ถูกอิมพอร์ตบนสลาฟ (ซึ่งเริ่มด้วย--skip-slave-start
ตัวเลือก) โดยไม่มีข้อผิดพลาด:
shell> pv dbname_`date +%F`.sql | mysql -u root -p
แต่ฉันได้รับข้อผิดพลาดต่อไปนี้เมื่อดำเนินการ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, ...
มีเพียงระเบียนเดียวที่มี ID 115846 ในต้นแบบ:
mysql> select count(*) from request_posted where id=115846;
Current database: db
+----------+
| count(*) |
+----------+
| 1 |
+----------+
1 row in set (0.01 sec)
ลองข้ามคำค้นหาด้วย:
mysql> STOP SLAVE;
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> START SLAVE;
ไม่ได้ช่วย ฉันไม่ต้องการข้ามข้อผิดพลาดเหล่านั้นโดยการเพิ่ม:
slave-skip-errors = 1062
ไปยังmy.cnf
ไฟล์เพราะอาจทำให้ทาสไม่สอดคล้องกัน
อะไรคือสาเหตุของข้อผิดพลาดนี้?
UPDATE
นี่ไม่ใช่วิธีที่ฉันมักจะติดตั้งการจำลองแบบ mySQL
ขั้นตอนใดที่คุณคิดว่าฉันไม่ได้ติดตามเอกสาร
ฉันสงสัยว่าคุณจะพบปัญหาเดียวกันหรือไม่หากคุณต้องตั้งค่าการกำหนดค่าทั้งหมดแทนที่จะส่งคำสั่ง mysqldump
ไม่ทำงานได้ตามปกติถ้าฉันเปลี่ยนต้นแบบเป็นพิกัดที่เกี่ยวข้องด้วย
ฉันจะลองวางฐานข้อมูลลงบน Slave ตรวจสอบให้แน่ใจว่าถังขยะนั้นชัดเจนแล้วเริ่มใหม่อีกครั้ง ตรวจสอบตารางในคำถามบนต้นแบบเพื่อให้มั่นใจว่าดัชนีไม่มีข้อผิดพลาด
ลบ (ย้าย) datadir ทั้งหมดเพียงพอหรือไม่ ฉันทำอย่างนั้นและได้รับผลลัพธ์เดียวกัน
ตอบกลับไปที่ @Dmytro Leonenko
'แสดงสถานะทาสก์ \ G' บนสลาฟเพื่อให้แน่ใจว่ามีการกำหนดค่าอย่างเหมาะสม MASTER_LOG_POS คือ 0
มีเพียง 'show slave statug \ G' หลังจากนำเข้า แต่ก่อน 'เริ่มทาส' สามารถให้คำตอบกับเรา
ฉันสำรองข้อมูลไว้ลบทั้งหมดและเรียกใช้mysql_install_db
นำเข้าไฟล์ดัมพ์ดำเนินการchange master to
และนี่คือผลลัพธ์:
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)
ฉันสงสัยว่าทำไม Master_Log_Pos ถึง 4?
--master-data
ตัวเลือกที่มีอยู่แล้วเขียนบันทึกพิกัดไบนารีแฟ้มการถ่ายโอน ฉันต้องการเปลี่ยน master เป็น master_host, master_user, master_password
--master-data
ตัวเลือกเมื่อสร้างภาพรวมข้อมูล? หากยังคงเกิดขึ้นเมื่อฉันใช้--lock-all-tables
ตัวเลือกและchange master to master_log_file='', master_log_pos='', ...
สาเหตุของอะไร?
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1
แบบสอบถามทำให้เกิดข้อผิดพลาดในการเปลี่ยนแปลงอย่างน้อย? การตั้งค่าตำแหน่ง binlog ของทาสถูกต้องหรือไม่?