Cara menggunakan delete relay bin mysql
Saya berkenalan dengan replikasi server MySQL relatif baru-baru ini, dan ketika saya melakukan berbagai eksperimen dengan penyiapan, saya menuliskan apa yang saya lakukan. Ketika bahannya banyak, muncul ide untuk menulis artikel ini. Saya telah mencoba mengumpulkan tip dan solusi untuk beberapa pertanyaan paling mendasar yang saya temui. Saya akan memberikan tautan ke dokumentasi dan sumber lain di sepanjang jalan. Saya tidak bisa mengklaim sebagai lengkap, tapi semoga artikel ini bermanfaat. Pengenalan kecilReplikasi (dari bahasa Latin replico - saya ulangi) adalah replikasi perubahan data dari server database utama pada satu atau lebih server yang bergantung. Server utama akan dipanggil menguasai, dan tergantung - replika.Perubahan data yang terjadi pada master diulangi pada replika (tetapi tidak sebaliknya). Oleh karena itu, permintaan untuk mengubah data (INSERT, UPDATE, DELETE, dll.) Dijalankan hanya pada master, dan permintaan untuk membaca data (dengan kata lain, PILIH) dapat dijalankan baik pada replika maupun pada master. Proses replikasi pada salah satu replika tidak memengaruhi pengoperasian replika lainnya, dan secara praktis tidak memengaruhi pekerjaan master. Replikasi dilakukan menggunakan log biner yang dikelola di master. Mereka menyimpan semua kueri yang mengarah (atau berpotensi mengarah) ke perubahan dalam database (kueri tidak disimpan secara eksplisit, jadi jika Anda ingin melihatnya, Anda harus menggunakan utilitas mysqlbinlog). Binlog ditransfer ke replika (binlog yang diunduh dari master disebut "relay binlog") dan kueri yang disimpan dijalankan mulai dari posisi tertentu. Penting untuk dipahami bahwa replikasi tidak mentransfer data yang diubah itu sendiri, tetapi hanya permintaan yang menyebabkan perubahan. Selama replikasi, konten database digandakan di beberapa server. Mengapa menggunakan duplikasi? Ada beberapa alasan:
Penyiapan replikasiKatakanlah kita memiliki database MySQL yang berfungsi sudah diisi dengan data dan berjalan. Dan untuk salah satu alasan yang dijelaskan di atas, kami akan mengaktifkan replikasi server kami. Data awal kami:
Pengaturan WizardPastikan untuk menunjukkan ID server unik, jalur untuk log biner dan nama database untuk replikasi di bagian:server-id \u003d 1 log-bin \u003d / var / lib / mysql / mysql-bin replicate-do-db \u003d testdb Pastikan Anda memiliki cukup ruang disk untuk log biner. Tambahkan pengguna replikasi, di bawah hak siapa replikasi akan dilakukan. Hak istimewa "budak replikasi" sudah cukup: Mulai ulang MySQL agar perubahan konfigurasi diterapkan: Jika semuanya berjalan dengan baik, perintah "tampilkan status master" akan menunjukkan sesuatu seperti berikut: Pengaturan replikaTentukan ID server, nama database untuk replikasi dan jalur ke binlog relai di bagian konfigurasi, lalu mulai ulang MySQL:server-id \u003d 2 relai-log \u003d / var / lib / mysql / mysql-relai-bin relai-log-index \u003d /var/lib/mysql/mysql-relay-bin.index replicate-do-db \u003d testdb [email dilindungi]# layanan mysqld restart Kami mentransfer dataDi sini kita harus mengunci database untuk menulis. Untuk melakukan ini, Anda dapat menghentikan pekerjaan aplikasi, atau menggunakan pengaturan flag read_only di wizard (catatan: flag ini tidak berpengaruh pada pengguna dengan hak istimewa SUPER). Jika kita memiliki tabel MyISAM, mari lakukan juga "flush tables":[email dilindungi]\u003e TABEL FLUSH DENGAN KUNCI BACA; [email dilindungi]\u003e SETEL GLOBAL read_only \u003d ON; Mari kita lihat status master dengan perintah "tampilkan status master" dan ingat nilai File dan Posisi (setelah berhasil memblokir master, nilai tersebut tidak boleh berubah): Kami membuat dump database, dan setelah operasi selesai, kami membuka kunci master: Kami mentransfer dump ke replika dan memulihkan data darinya. Mari kita lihat bagaimana proses replikasi dengan perintah "tampilkan status budak": Saya telah menyoroti arti yang paling menarik sekarang. Jika replikasi berhasil dimulai, nilainya harus kurang lebih sama seperti dalam daftar (lihat deskripsi perintah "tampilkan status budak" dalam dokumentasi). Nilai Seconds_Behind_Master dapat berupa bilangan bulat apa pun. Melalui tindakan sederhana ini, kami mendapatkan replika, yang datanya identik dengan data di master.
Tambahkan replikaMisalkan kita sudah memiliki master yang berfungsi dan replika, dan kita perlu menambahkan master lain ke dalamnya. Ini bahkan lebih mudah daripada menambahkan replika pertama ke master. Dan yang jauh lebih menyenangkan adalah tidak perlu menghentikan sang guru untuk ini.Pertama, mari kita siapkan MySQL di replika kedua dan pastikan kita telah memasukkan parameter yang diperlukan di konfigurasi: server-id \u003d 3 replicate-do-db \u003d testdb Sekarang mari kita hentikan replikasi pada replika pertama: Replika akan terus berfungsi secara normal, tetapi datanya tidak lagi mutakhir. Mari kita lihat status dan ingat posisi master, yang dicapai replika sebelum menghentikan replikasi: Kami akan membutuhkan nilai Master_Log_File dan Exec_Master_Log_Pos: Mari buat dump database dan lanjutkan replikasi pada replika pertama: Mari pulihkan data dari dump di replika kedua. Kemudian kami mengaktifkan replikasi: Nilai MASTER_LOG_FILE dan MASTER_LOG_POS masing-masing adalah nilai Master_Log_File dan Exec_Master_Log_Pos dari hasil perintah show slave status pada replika pertama. Menggabungkan replikaTerkadang situasi seperti itu muncul: ada dua database pada master, salah satunya direplikasi pada satu replika, dan yang kedua direplikasi di replika lainnya. Bagaimana cara mengatur replikasi dua database pada kedua replika tanpa membuat dump pada master dan tanpa mematikannya? Cukup sederhana dengan menggunakan perintah "mulai budak sampai".Jadi, kami memiliki master dengan database testdb1 dan testdb2, yang masing-masing direplikasi pada replika-1 dan replika-2. Mari konfigurasikan replikasi kedua database ke replika-1 tanpa menghentikan master. Hentikan replikasi pada replika-2 dengan perintah dan ingat posisi master: [email dilindungi]\u003e BERHENTI BUDAK; [email dilindungi]\u003e TAMPILKAN STATUS BUDAK \\ G Master_Log_File: mysql-bin.000015 Exec_Master_Log_Pos: 231 Mari buat dump database testdb2 dan lanjutkan replikasi (saat ini, manipulasi dengan replika-2 sudah selesai). Kembalikan dump ke replika-1. Situasi di replika-1 adalah sebagai berikut: database testdb1 berada di posisi master yang sama dan terus mereplikasi, database testdb2 dipulihkan dari dump dari posisi yang berbeda. Kami menyinkronkannya. Hentikan replikasi dan ingat posisi master: Pastikan bahwa di konfigurasi pada replika-1, bagian tersebut berisi nama database kedua: Mulai ulang MySQL agar perubahan konfigurasi diterapkan. Ngomong-ngomong, Anda bisa memulai ulang MySQL tanpa menghentikan replikasi - dari log kami akan mengetahui di posisi mana replikasi master berhenti. Sekarang mari kita mereplikasi dari posisi di mana replika-2 dijeda ke posisi di mana kita baru saja menjeda replikasi: Replikasi akan berakhir segera setelah replika mencapai posisi yang ditentukan di bagian hingga, setelah itu kedua database kami akan sesuai dengan posisi master yang sama (di mana kami menghentikan replikasi pada replika-1). Mari kita pastikan ini: Tambahkan nama kedua database ke konfigurasi pada replika-1 di bagian: Penting: setiap database harus dicantumkan di baris terpisah. Casting Master dan ReplikaMungkin perlu untuk mengganti replika ke mode master, misalnya, jika master gagal atau saat melakukan pekerjaan teknis padanya. Untuk mengaktifkan sakelar semacam itu, Anda perlu mengonfigurasi replika seperti master, atau membuatnya master pasif.Mari aktifkan pemeliharaan log biner (selain relay-binlogs) di bagian config: Dan tambahkan pengguna untuk replikasi: Master pasif mereplikasi seperti replika biasa, tetapi selain itu, ia membuat logika biner - yaitu, kita dapat memulai replikasi darinya. Mari kita pastikan ini dengan perintah "show master status": Sekarang, untuk membawa master pasif ke mode aktif, Anda harus menghentikan replikasi di atasnya dan mengaktifkan replikasi di master aktif sebelumnya. Agar pada saat perpindahan data tidak hilang, master aktif harus dikunci untuk menulis. KesimpulanKami menemukan sedikit tentang cara mengatur replikasi di MySQL dan melakukan beberapa operasi dasar. Sayangnya, pertanyaan penting berikut tetap berada di luar cakupan artikel: |