- MySQL Master sürümü: 5.5.16-1
- MySQL Slave sürümü: 5.5.18-1
Master'ın anlık görüntüsü:
mysql> FLUSH TABLES WITH READ LOCK;
shell> mysqldump --all-databases --master-data > dbname_`date +%F`.sql
Bu döküm dosyası, slave'e ( --skip-slave-startseçenekle başlatılan ) hatasız olarak içe aktarılır :
shell> pv dbname_`date +%F`.sql | mysql -u root -p
Ama yürütürken aşağıdaki hatayı aldım 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, ...
Master'da sadece 115846 numaralı bir kayıt var:
mysql> select count(*) from request_posted where id=115846;
Current database: db
+----------+
| count(*) |
+----------+
| 1 |
+----------+
1 row in set (0.01 sec)
Şununla bazı sorguları atlamaya çalışın:
mysql> STOP SLAVE;
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> START SLAVE;
yardım etmedi. Bu hataları ekleyerek atlamak istemiyorum:
slave-skip-errors = 1062
my.cnfköle tutarsız olabileceği için dosyalamak.
Bu hatanın nedeni ne olabilir?
GÜNCELLEME
Bu genellikle mySQL çoğaltmasını ayarlamam
Belgeyi takip etmediğimi düşündüğünüz hangi adımlar?
Mysqldump komutunu iletmek yerine tüm yapılandırmayı ayarlayacaksanız aynı sorunla karşılaşıp karşılaşmayacağınızı merak ediyorum.
Hayır, master'ı karşılık gelen koordinatlarla değiştirirsem normal şekilde çalışır.
Ben köle veritabanı bırakarak denemek istiyorsunuz, binlogs açık olduğundan emin olun ve tekrar başlayın. Ayrıca, dizinlerde hata olmadığından emin olmak için ana tablodaki söz konusu tabloyu kontrol edin.
Tüm veri dizinini silme (taşıma) yeterli mi? Bunu yaptım ve aynı sonucu elde ettim.
@Dmytro Leonenko için yanıt
düzgün yapılandırıldığından emin olmak için slave'de 'slave durumunu göster \ G', MASTER_LOG_POS 0
Yalnızca 'içe aktarma işleminden sonra' köle statüsü göster \ G 'ancak' köle başlat '; bize cevap verebilir
Datadir'i yedekledim, hepsini sildim ve çalıştırdım mysql_install_db, döküm dosyasını içe aktarın, yürütün change master tove sonuçlar burada:
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'un neden 4 olduğunu merak ediyorum?
--master-dataSeçenek zaten döküm dosyasına ikili günlük koordinatları yazma. Sadece master_host, master_user, master_password olarak değiştirmem gerekiyor.
--master-dataVeri anlık görüntüsü oluştururken bu seçeneği kullanmamam gerektiği anlamına mı geliyor ? --lock-all-tablesSeçeneği kullandığımda hala olursa ve change master to master_log_file='', master_log_pos='', ...bunun nedenleri neler olabilir?
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1Hataya neden olan sorgu en azından değişiyor mu? Bağımlı binlog konumu doğru ayarlandı mı?