- 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-start
seç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.cnf
kö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 to
ve 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-data
Seç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-data
Veri anlık görüntüsü oluştururken bu seçeneği kullanmamam gerektiği anlamına mı geliyor ? --lock-all-tables
Seç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=1
Hataya neden olan sorgu en azından değişiyor mu? Bağımlı binlog konumu doğru ayarlandı mı?