Pengaturan kami:
- Master: MariaDB 10.0.21
- Budak: MariaDB 10.0.17
Replikasi bekerja dengan baik sampai saat ini pada titik mana DB budak harus dipulihkan dari dump. Saya melakukan semua langkah yang diperlukan: Dump DB master, transfer dump ke slave, drop DB lama, jalankan dump untuk mengembalikan DB, jalankan CHANGE MASTER
perintah yang sesuai , dan akhirnya START SLAVE
.
Saya menerima kesalahan:
Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'
File log pertama yang dibutuhkan budak dari master adalah mysql-bin.000289
. Saya dapat melihat bahwa ini ada pada master:
Saya juga dapat melihat bahwa indeks log biner pada master tampaknya memiliki entri untuk file log ini:
Replikasi masih tidak berfungsi - saya terus mendapatkan kesalahan yang sama. Saya kehabisan ide - apa yang harus saya periksa selanjutnya?
Diperbarui: Output SHOW SLAVE STATUS\G
seperti yang diminta:
MariaDB [(none)]> SHOW SLAVE STATUS\G
--------------
SHOW SLAVE STATUS
--------------
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 127.0.0.1
Master_User: replication
Master_Port: 1234
Connect_Retry: 60
Master_Log_File: mysql-bin.000289
Read_Master_Log_Pos: 342
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 4
Relay_Master_Log_File: mysql-bin.000289
Slave_IO_Running: No
Slave_SQL_Running: Yes
Replicate_Do_DB: xxx_yyy,xxx_zzz
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: 342
Relay_Log_Space: 248
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: 1236
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 3
Master_SSL_Crl:
Master_SSL_Crlpath:
Using_Gtid: No
Gtid_IO_Pos:
1 row in set (0.00 sec)
Informasi tambahan yang diminta:
root@master [818 18:54:22 /var/lib/mysql]# ls -l /var/lib/mysql/mysql-bin.000289
-rw-rw---- 1 mysql mysql 1074010194 May 19 03:28 /var/lib/mysql/mysql-bin.000289
root@master [819 18:54:29 /var/lib/mysql]# ls mysql-bin.00029*
mysql-bin.000290 mysql-bin.000291 mysql-bin.000292 #(Yes, it was created)
root@master [821 18:56:52 /var/lib/mysql]# mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 6345382
Server version: 10.0.21-MariaDB-log MariaDB Server
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> SHOW BINARY LOGS;
+------------------+------------+
| Log_name | File_size |
+------------------+------------+
| mysql-bin.000279 | 1074114047 |
| mysql-bin.000280 | 1074004090 |
| mysql-bin.000281 | 1074035416 |
| mysql-bin.000282 | 1073895128 |
| mysql-bin.000283 | 1073742000 |
| mysql-bin.000284 | 1074219591 |
| mysql-bin.000285 | 1074184547 |
| mysql-bin.000286 | 1074217812 |
| mysql-bin.000287 | 1022733058 |
| mysql-bin.000288 | 265069 |
| mysql-bin.000289 | 1074010194 |
| mysql-bin.000290 | 1074200346 |
| mysql-bin.000291 | 617421886 |
| mysql-bin.000292 | 265028 |
+------------------+------------+
14 rows in set (0.00 sec)
MariaDB [(none)]> exit
Bye
root@master [821 18:57:24 /var/lib/mysql]# mysqlbinlog mysql-bin.000289 > /tmp/somefile.txt
root@master [822 18:58:13 /var/lib/mysql]# tail /tmp/somefile.txt
# at 1074010124
#160519 3:28:59 server id 5 end_log_pos 1074010151 Xid = 417608063
COMMIT/*!*/;
# at 1074010151
#160519 3:28:59 server id 5 end_log_pos 1074010194 Rotate to mysql-bin.000290 pos: 4
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
root@master [823 18:58:31 /var/lib/mysql]#
/etc/my.cnf.d/server.cnf
(kutipan):
# BINARY LOGGING #
log-bin = /var/lib/mysql/mysql-bin
expire-logs-days = 14
sync-binlog = 1
Sunting: Postion 342 tampaknya ada:
root@master [826 12:15:33 /var/lib/mysql]# grep "end_log_pos 342 " /tmp/somefile.txt
#160517 14:43:13 server id 5 end_log_pos 342 Binlog checkpoint mysql-bin.000288
sumber
Jawaban:
Anda tampaknya tidak terhubung ke master seperti yang Anda pikirkan. Per log biner Anda pada master yang tampaknya Anda miliki:
# 160519 3:28:59 id server 5
Tetapi per MENUNJUKKAN STATUS BUDAK kita melihat:
Dan selanjutnya Anda tampaknya terhubung di localhost, tetapi Anda tersirat master / slave Anda ada di host yang berbeda:
sumber
127.0.0.1:3305
. Saya memperhatikan Master_Server_Id juga, tapi saya pikir itu hanya sisa dari dulu ketika kami menggunakan master yang berbeda. Saya mengharapkan nilaiSHOW SLAVE STATUS
untuk memperbarui setelah kami sepenuhnya membangun kembali replikasi. Bagaimanapun, ini adalah saran yang luar biasa; Saya akan memeriksa tiga kali bahwa kita memang terhubung ke master yang tepat!telnet 127.0.0.1:3305
- Saya bisa melihat bahwa versi MySQL yang dilaporkan cocok dengan versi dari master lama . Saya pikir akar masalahnya kemungkinan karena beberapa kebiasaan DNS di jaringan kami - sepertinya koneksi autossh dibuat secara keliru untuk domain.com, meskipun sudah dikonfigurasi untuk terhubung ke db.domain.com. Sekali lagi terima kasih banyak.Jika semuanya gagal, Anda mungkin perlu mengatur ulang budak dan memulai kembali replikasi. Dari https://www.redips.net/mysql/replication-slave-relay-log-corrupted/ :
sumber
Pesan kesalahan adalah jawabannya.
Lihatlah output dari
SHOW BINARY LOGS
query:Tidak ada mysql-bin.000278 di layar.
Kecuali jika log biner diputar, isi mysql-bin.index salah.
Silakan bandingkan konten
mysql-bin.index
dengan file-file binlog yang sekarang ada dan pastikan semuanya cocok. Anda dapat memperbaikinya dengan Masterkemudian pergi ke Budak dan jalankan
Cobalah !!!
sumber
mysql-bin.000288
alih-alihmysql-bin.000278
? Jika demikian,mysql-bin.000288
tampaknya memang ada. Apakah ini masih memperbaiki masalah?PURGE BINARY LOGS TO 'mysql-bin.000279';
memberi saya kesalahan (seperti yang diharapkan), karena log "279" tidak ada lagi (telah diputar).PURGE BINARY LOGS TO 'mysql-bin.000288';
dieksekusi dengan sukses, dan menghapus semua log biner hingga "288". Sayangnya, saya masih mendapatkan kesalahan.Pembaruan: Jawaban ini mencakup klasifikasi kesalahan umum. Untuk jawaban yang lebih spesifik tentang cara terbaik menangani permintaan persis OP, silakan lihat jawaban lain untuk pertanyaan ini
Salah satu kesalahan replikasi paling kritis Punya kesalahan fatal 1236 Dapat dipicu oleh beberapa alasan, salah satunya adalah judul dari pertanyaan ini.
Kesalahan ini terjadi ketika server slave diperlukan log biner untuk replikasi tidak lagi ada di server database master.
Begitu banyak skenario yang dapat menyebabkan ini:
expire_logs_days
(my.cnf jika Anda mengaturexpire_logs_days
binlog lama berakhir secara otomatis dan dihapus; Ketika MySQL membuka file binlog baru, ia memeriksa binlog lama, dan membersihkan apa pun yang lebih tua dari nilai expire_logs_days)PURGE BINARY LOGS
perintah atau melaluirm -f
perintahcronjob
yang mengarsipkan log biner lama untuk mengklaim ruang diskUntuk mengatasi masalah ini, satu-satunya solusi bersih yang dapat saya pikirkan adalah membuat kembali server slave dari cadangan server master atau dari slave lain dalam topologi replikasi.
Referensi: replikasi mysql mendapat kesalahan fatal
sumber