Sayt bo'limlari
Muharrir tanlovi:
- Nima uchun noutbukga kichik SSD kerak va unga Windows-ni o'rnatishga arziydimi?
- Ramka kiritish. Ramkalar yaratish. noframes zaxirasini ta'minlash
- Windows tizimini qayta tiklash Hech qachon tugamaydigan avtomatik tiklashga tayyorgarlik
- Dasturlar yordamida flesh-diskni ta'mirlash Noutbukdagi USB portni qanday tuzatish kerak
- Disk tuzilishi buzilgan, o'qish mumkin emas, nima qilishim kerak?
- Qattiq disk kesh xotirasi nima va u nima uchun kerak?Kesh hajmi nima uchun javob beradi?
- Kompyuter nimadan iborat?
- Tizim blokining tuzilishi - qaysi komponentlar kompyuterning ishlashi uchun javobgardir Tizim blokining ichki qurilmalari xususiyatlari
- Qattiq diskni SSD ga qanday o'zgartirish mumkin
- Kirish qurilmalari kiradi
Reklama
MySQL da replikatsiya asoslari. MySQL ma'lumotlar bazasi replikatsiyasini sozlash Master dasturini o'rnatish va sozlash |
Hammaga xayrli kun! Bugun bizning maqolamizda "master-qul" turini replikatsiya qilishni o'rnatish misollarini ko'rib chiqamiz. Bir oz nazariyaNega replikatsiya kerak? Avvalo, bu asosiy MySQL serveri ishlamay qolganda xavfsizlik tarmog'idir, keyin siz slave serverga o'tishingiz va ishlashni davom ettirishingiz mumkin. Ikkinchidan, bu asosiy serverdan faqat yozish uchun foydalanish va tobe serverda o'qish operatsiyalarini bajarish orqali asosiy Mysql serveridagi yukni kamaytirish imkoniyatidir. Replikatsiya qanday sodir bo'ladi? Asosiy server binloglarni yozadi, unda ma'lumotlar bazasida (ma'lumotlar bazalari) bajariladigan operatsiyalarni ko'rsatadi va jurnaldagi ofsetni boshidan joriy yozuv (pozitsiya)gacha eslab qoladi. To'g'ri server masterga ulanadi, pozitsiya qiymatlarini solishtiradi va jurnaldagi o'zgarishlarni o'z pozitsiyasining qiymatidan boshlab va master pozitsiyasining qiymati bilan yakunlanadi. U tobe serverdagi ma'lumotlar bazalariga o'zgartirishlarni (buyruqlarni) qo'llaydi. Master-ni o'rnatish va sozlashBosh serverda my.cnf ni o'zgartiramiz: Server-id = 1 - server identifikatorini ko'rsating log_bin = /var/log/mysql/mysql-bin.log - jurnal nomi va yo'li Kichik tushuntirish: sukut bo'yicha, sehrgar barcha ma'lumotlar bazalari uchun binloglarni yozadi, buni "binlog-do-db" yordamida o'zgartirish mumkin. Muayyan ma'lumotlar bazasidan foydalanilganda qiymatlar jurnallarda qayd etiladi, boshqa ma'lumotlar bazalaridagi o'zgarishlar qayd etilmaydi. Bu yerda siz jurnallarni qancha kun saqlash kerakligini, ularning maksimal hajmini belgilashingiz mumkin (expire_logs_days va max_binlog_size parametrlari). MySQL-ga foydalanuvchini qo'shing, uning huquqlari asosida replikatsiya qilinadi: replikatsiya qulini YO'QING *.* TO user_name@ip_slave_server TO "parol" BILAN Identifikatsiya qilinadi; replikatsiya tobe - foydalanuvchiga binloglarni o'qish imkonini beruvchi imtiyoz. ip_slave_server - foydalanuvchi ulanadigan serverning IP-si. MySQL serverini qayta ishga tushiring: /etc/init.d/mysql-ni qayta ishga tushiring Keling, magistrning ishini tekshiramiz: Asosiy holatni ko'rsatish; Siz binlog nomini va uning o'rnini ko'rishingiz kerak. Ma'lumotlar bazasida buyruqlarni bajarishda pozitsiya o'zgaradi. Tobeni sozlashmy.cnf fayliga o'zgartirishlar kiritamiz: Server-id = 2 - tobe server identifikatori asosiy identifikatordan farq qilishi kerak. relay-log = /var/lib/mysql/mysql-relay-bin - ikkilik jurnal kabi ma'lumotlar bazasidagi o'zgarishlarni tavsiflovchi voqealarni o'z ichiga olgan raqamlangan fayllar to'plamidan iborat. relay-log-index = /var/lib/mysql/mysql-relay-bin.index - ishlatilayotgan barcha relay jurnali fayllari nomlarini o'z ichiga olgan indeks fayli. replicate-do-db = replikatsiya qilinadigan ma'lumotlar bazasi. Muhim eslatma! O'zaro JB ni tashkil qilishda (bir ma'lumotlar bazasidan foydalanilganda va ma'lumotlar boshqa ma'lumotlar bazasida yangilanganda), binlog-do-db asosiy server sozlamalarida ko'rsatilishi shart emas, binlog- va barcha ma'lumotlar bazalari uchun yozilishi kerak va tobe sozlamalari o'rniga replicate-do dan foydalanish kerak -db replicate-wild-do-table=db_name.% belgilang, bu erda db_name replikatsiya qilingan ma'lumotlar bazasi nomidir. MySQL serverini qayta ishga tushiring: /etc/init.d/mysql-ni qayta ishga tushiring Replikatsiyani yoqishSET GLOBAL faqat o'qish uchun = ON; Keling, ustaning holatiga qaraylik: Asosiy holatni ko'rsatish; Biz Fayl va Position qiymatlarini eslaymiz (yoki yaxshiroq, ularni yozib oling). Position qiymati hozir o'zgarmasligi kerak. Biz masterni mysqldump buyrug'i yordamida o'chirib tashlaymiz: Mysqldump -uname -ppassword db_master_name > dump_db, bu yerda nom – foydalanuvchi nomi, parol – parol, db_master_name – ma’lumotlar bazasi nomi, dump_db – dump nomi. Damp tugagandan so'ng biz ma'lumotlar bazasiga yozishga ruxsat beramiz: SET GLOBAL faqat o'qish uchun = OFF; Biz axlatni qulga o'tkazamiz va uni kengaytiramiz Mysql -uname -ppassword db_slave_name< dump_db Replikatsiyani sozlash MASTERNI MASTER_HOSTGA O'ZGARTIRING = "master ip", MASTER_USER = "foydalanuvchi_nomi", MASTER_PASSWORD = "parol", MASTER_LOG_FILE = "jurnal nomi", MASTER_LOG_POS = pozitsiya; master ip - master joylashgan serverning IP-si, foydalanuvchi nomi - biz masterda yaratgan foydalanuvchi nomi, jurnal nomi - ma'lumotlar bazasini tashlab yuborish amalga oshirilganda masterdagi Fayl qiymati, joylashuv - Position qiymati ma'lumotlar bazasi dumpi yaratilganda master. Qulni boshlaylik: Qulni ishga tushirish; Keling, replikatsiya qanday ketayotganini ko'rib chiqaylik: Masterda: KO'RSATISH MASTER STATUS\G To'g'ridan-to'g'ri: SLAVE STATUS\G Asosiy serverdagi xavfsizlik sozlamalari/etc/mysql/my.cnf-dagi bog'lanish manzili parametri ulanishni kutayotganda MySQL serveri qaysi IP-manzilni tinglashini belgilaydi. Odatda u bog'lanish manzili = 127.0.0.1 qiymatiga ega. Biroq, tobe serverni o'rnatgandan so'ng, biz tobe serverdan ulanishga ruxsat berishimiz kerak va mahalliy ulanishlar ishlashi kerak. Ulanish manzili faqat bitta IP dan yoki barchasidan ulanishga ruxsat berishi mumkin. Chunki ulanish uchun bir nechta ipni ko'rsatishimiz kerak, biz bog'lanish manzili = 127.0.0.1 bilan qatorni sharhlaymiz. Endi MySQL serveri barcha IP manzillardan ulanishlarni qabul qiladi, bu juda xavflidir. iptables bu muammoni hal qilishga yordam beradi: Iptables -I INPUT -p tcp -s ip_slave_server-a --dport 3306 -j ACCEPT -birinchi navbatda tobe serverning IP-manzilidan ulanishga ruxsat bering iptables -I INPUT -p tcp --dport 3306 -j DROP -keyin ulanishni rad eting boshqa barcha IP manzillar. Endi bizda master-slave rejimida ishlaydigan 2 ta MySQL server bo'ladi, bu sayt ishonchliligini sezilarli darajada oshiradi va ba'zi Drupal saytlari uchun ish tezligini oshirishga yordam beradi. Keyingi maqolada biz asosiy server ishlamay qolganda asosiy va tobe rejimlarni almashtirishni ko'rib chiqamiz. Men MySQL serverlarining replikatsiyasi bilan nisbatan yaqinda tanishdim va konfiguratsiya bilan turli tajribalar o'tkazar ekanman, men uchun nima ishlaganini yozdim. Men juda ko'p material to'plaganimda, ushbu maqolani yozish g'oyasi paydo bo'ldi. Men duch kelgan ba'zi eng asosiy muammolar bo'yicha maslahatlar va echimlarni to'plashga harakat qildim. Yo'lda men hujjatlar va boshqa manbalarga havolalar beraman. Men buni to'liq tasvirlab bera olmayman, lekin maqola foydali bo'ladi deb umid qilaman. Qisqacha kirishReplikatsiya (lotincha replico - takrorlayman) - asosiy ma'lumotlar bazasi serveridan bir yoki bir nechta qaram serverlarga ma'lumotlar o'zgarishini takrorlash. Biz asosiy serverga qo'ng'iroq qilamiz usta, va qaram - nusxalar.Magistrda sodir bo'lgan ma'lumotlar o'zgarishi replikalarda takrorlanadi (lekin aksincha emas). Shuning uchun ma'lumotlarni o'zgartirish bo'yicha so'rovlar (INSERT, UPDATE, DELETE va boshqalar) faqat masterda bajariladi, ma'lumotlarni o'qish uchun so'rovlar (boshqacha aytganda, SELECT) ham replikalarda, ham masterda bajarilishi mumkin. Replikalarning birida takrorlash jarayoni boshqa replikalarning ishlashiga ta'sir qilmaydi va deyarli ustaning ishiga ta'sir qilmaydi. Replikatsiya masterda saqlanadigan ikkilik jurnallar yordamida amalga oshiriladi. Ular ma'lumotlar bazasidagi o'zgarishlarga olib keladigan (yoki potentsial olib keladigan) barcha so'rovlarni saqlaydi (so'rovlar aniq saqlanmaydi, shuning uchun ularni ko'rishni istasangiz, mysqlbinlog yordam dasturidan foydalanishingiz kerak bo'ladi). Binloglar replikalarga o'tkaziladi (masterdan yuklab olingan binlog "relay binlog" deb ataladi) va saqlangan so'rovlar ma'lum bir pozitsiyadan boshlab bajariladi. Shuni tushunish kerakki, replikatsiya paytida o'zgartirilgan ma'lumotlarning o'zi emas, balki faqat so'rovlar o'zgarishlarga olib keladi. Replikatsiya bilan ma'lumotlar bazasi tarkibi bir nechta serverlarda takrorlanadi. Nega dublikatsiyaga murojaat qilish kerak? Bir nechta sabablar bor:
Replikatsiyani sozlashAytaylik, bizda allaqachon ma'lumotlar bilan to'ldirilgan va yoqilgan ishlaydigan MySQL ma'lumotlar bazasi mavjud. Va yuqorida tavsiflangan sabablardan biriga ko'ra, biz serverimiz replikatsiyasini yoqmoqchimiz. Bizning dastlabki ma'lumotlarimiz:
Sehrgar sozlamalariBo'limda noyob server identifikatorini, ikkilik jurnallar yo'lini va replikatsiya uchun ma'lumotlar bazasi nomini ko'rsatishni unutmang:server-id = 1 log-bin = /var/lib/mysql/mysql-bin replicate-do-db = testdb Ikkilik jurnallar uchun diskda etarli joy mavjudligiga ishonch hosil qiling. Replikatsiya foydalanuvchisini qo'shamiz, uning huquqlari ostida replikatsiya amalga oshiriladi. "Replikatsiya qul" imtiyozi etarli bo'ladi: Konfiguratsiyadagi o'zgarishlar kuchga kirishi uchun MySQL-ni qayta ishga tushiring: Agar hamma narsa yaxshi bo'lsa, "bosh maqomini ko'rsatish" buyrug'i shunday ko'rsatilishi kerak: Replikatsiya sozlamalariKonfiguratsiya bo'limida server identifikatorini, replikatsiya uchun ma'lumotlar bazasi nomini va relay binloglariga yo'lni belgilaymiz, keyin MySQL-ni qayta ishga tushiramiz:server-id = 2 relay-log = /var/lib/mysql/mysql-relay-bin relay-log-index = /var/lib/mysql/mysql-relay-bin.index replicate-do-db = testdb Root@replica# xizmati mysqld-ni qayta ishga tushiring Ma'lumotlarni uzatishBu erda biz yozish uchun ma'lumotlar bazasini bloklashimiz kerak. Buning uchun siz ilovalarni to'xtatishingiz yoki masterdagi faqat o'qish belgisidan foydalanishingiz mumkin (diqqat: bu bayroq SUPER imtiyozli foydalanuvchilarga ta'sir qilmaydi). Agar bizda MyISAM jadvallari bo'lsa, keling, "jadvallarni tozalash" ham qilaylik:mysql@master> JADVALLARNI O'QISH QULFI BILAN YUVLASH; mysql@master> SET GLOBAL faqat o'qish uchun = ON; "Master statusini ko'rsatish" buyrug'i bilan usta holatini ko'rib chiqamiz va Fayl va Position qiymatlarini eslaymiz (magistrni muvaffaqiyatli bloklagandan so'ng ular o'zgarmasligi kerak): Biz ma'lumotlar bazasini o'chirib tashlaymiz va operatsiya tugagandan so'ng biz masterning qulfini olib tashlaymiz: Biz dumpni replikaga o'tkazamiz va undan ma'lumotlarni tiklaymiz. Keling, "qul holatini ko'rsatish" buyrug'i bilan replikatsiya qanday ketayotganini ko'rib chiqamiz: Men hozir eng qiziqarli qadriyatlarni ta'kidladim. Agar replikatsiya muvaffaqiyatli boshlansa, ularning qiymatlari ro'yxatdagi bilan taxminan bir xil bo'lishi kerak (hujjatlardagi "qul holatini ko'rsatish" buyrug'ining tavsifiga qarang). Seconds_Behind_Master qiymati har qanday butun son bo'lishi mumkin. Ushbu oddiy qadamlar orqali biz ma'lumotlari masterdagi ma'lumotlar bilan bir xil bo'lgan nusxani olamiz.
Replikalarni qo'shishAytaylik, bizda allaqachon ishlaydigan usta va replika mavjud va biz ularga yana bittasini qo'shishimiz kerak. Buni ustaga birinchi nusxani qo'shishdan ko'ra qilish osonroq. Va bundan ham yoqimlisi shundaki, buning uchun ustani to'xtatishning hojati yo'q.Birinchidan, ikkinchi nusxada MySQL-ni sozlaymiz va konfiguratsiyaga kerakli parametrlarni kiritganimizga ishonch hosil qilamiz: server-id = 3 replicate-do-db = testdb Endi birinchi replikada replikatsiyani to'xtatamiz: Replika odatdagidek ishlashda davom etadi, ammo undagi ma'lumotlar endi joriy bo'lmaydi. Keling, holatni ko'rib chiqaylik va replikatsiya replikatsiyani to'xtatishdan oldin erishgan asosiy pozitsiyani eslaylik: Bizga kerak bo'lgan qiymatlar Master_Log_File va Exec_Master_Log_Pos bo'ladi: Keling, ma'lumotlar bazasi dumpini yaratamiz va birinchi replikada replikatsiyani davom ettiramiz: Keling, ikkinchi nusxadagi axlatxonadan ma'lumotlarni tiklaylik. Keyin replikatsiyani yoqing: MASTER_LOG_FILE va MASTER_LOG_POS qiymatlari mos ravishda Master_Log_File va Exec_Master_Log_Pos qiymatlari bo'lib, birinchi replikadagi "qul holatini ko'rsatish" buyrug'i natijasidir. Replikalarni birlashtirishBa'zan quyidagi holat yuzaga keladi: masterda ikkita ma'lumotlar bazasi mavjud bo'lib, ulardan biri bitta replikada, ikkinchisi esa boshqasida takrorlanadi. Ikkala nusxada ikkita ma'lumotlar bazasini replikatsiya qilishni masterga tashlamasdan yoki uni o'chirmasdan qanday sozlash mumkin? Oddiy qilib aytganda, "to'lni ishga tushirishgacha" buyrug'idan foydalaning.Shunday qilib, bizda testdb1 va testdb2 ma'lumotlar bazalari mavjud bo'lib, ular mos ravishda replika-1 va replika-2 replikalarida takrorlanadi. Keling, masterni to'xtatmasdan ikkala ma'lumotlar bazasining replikatsiyasini replika-1 ga sozlaymiz. Buyruq bilan replika-2 da replikatsiyani to'xtating va masterning o'rnini eslang: mysql@replica-2> TO'XT QUL; mysql@replica-2> QO'L HOLATINI KO'RSATISH\G Master_Log_File: mysql-bin.000015 Exec_Master_Log_Pos: 231 Testdb2 ma'lumotlar bazasining axlatini yaratamiz va replikatsiyani davom ettiramiz (bu replika-2 bilan manipulyatsiyani yakunlaydi). Biz dumpni replika-1 ga tiklaymiz. Replika-1da vaziyat quyidagicha: testdb1 ma'lumotlar bazasi bitta asosiy pozitsiyada va replikatsiya qilishda davom etmoqda, testdb2 ma'lumotlar bazasi boshqa pozitsiyadan chiqindixonadan tiklandi. Keling, ularni sinxronlashtiramiz. Keling, replikatsiyani to'xtatamiz va usta pozitsiyasini eslaylik: Replika-1 konfiguratsiyasida ikkinchi ma'lumotlar bazasi nomi bo'limda ko'rsatilganligiga ishonch hosil qilaylik: Konfiguratsiyadagi o'zgarishlar kuchga kirishi uchun MySQL-ni qayta ishga tushiramiz. Aytgancha, replikatsiyani to'xtatmasdan MySQL-ni shunchaki qayta ishga tushirish mumkin edi - jurnaldan biz master replikatsiyaning qaysi pozitsiyasida to'xtaganini bilib olamiz. Keling, replika-2 to'xtatilgan joydan biz replikatsiyani to'xtatib qo'ygan holatga takrorlaymiz: Replikatsiya qadar bo'limida ko'rsatilgan pozitsiyaga etib borishi bilan replikatsiya tugaydi, shundan so'ng bizning ikkala ma'lumotlar bazamiz bir xil asosiy pozitsiyaga to'g'ri keladi (biz replika-1da replikatsiyani to'xtatdik). Keling, bunga ishonch hosil qilaylik: Keling, ikkala ma'lumotlar bazasining nomlarini bo'limdagi replika-1 uchun konfiguratsiyaga qo'shamiz: Muhim: har bir ma'lumotlar bazasi alohida qatorda ko'rsatilishi kerak. Kasting ustasi va nusxasiReplikani asosiy rejimga o'tkazish kerak bo'lishi mumkin, masalan, master ishlamay qolganda yoki unda texnik ishlarni bajarishda. Bunday almashtirishni amalga oshirish uchun siz replikani master kabi sozlashingiz yoki uni amalga oshirishingiz kerak passiv usta.Keling, bo'limdagi konfiguratsiyada ikkilik jurnalni (reley binloglaridan tashqari) yoqaylik: Va replikatsiya uchun foydalanuvchi qo'shing: Passiv master oddiy replika kabi replikatsiyani amalga oshiradi, lekin qo'shimcha ravishda u binar logiyalarni yaratadi - ya'ni biz undan replikatsiyani boshlashimiz mumkin. Buni "master statusini ko'rsatish" buyrug'i bilan tekshiramiz: Endi passiv masterni faol rejimga o'tkazish uchun siz undagi replikatsiyani to'xtatishingiz va avvalgi faol masterda replikatsiyani yoqishingiz kerak. O'tish vaqtida ma'lumotlar yo'qolmasligini ta'minlash uchun, faol usta yozish bloklangan bo'lishi kerak. XulosaBiz MySQL-da replikatsiyani qanday o'rnatish va ba'zi bir asosiy operatsiyalarni bajarish haqida biroz bilib oldik. Afsuski, quyidagi muhim savollar ushbu maqola doirasidan tashqarida qolmoqda:
E'tiboringiz uchun rahmat! Teglar: teglar qo'shish Replikatsiya - ob'ektning bir nechta nusxalari tarkibini sinxronlashtirish mexanizmi. Bu jarayon ma'lumotlarni bir manbadan boshqa ko'plab manbalarga va aksincha nusxalashni nazarda tutadi. Belgilar:
MySQL-da replikatsiyani o'rnatish uchun siz quyida tavsiflangan harakatlar ketma-ketligiga rioya qilishingiz kerak, ammo bu dogma emas va parametrlar sharoitga qarab o'zgarishi mumkin. Asosiy serverda my.cnf faylini tahrirlang va mysqld bo'limiga quyidagi qatorlarni qo'shing: Server-id = log-bin = mysql-bin log-bin-index = mysql-bin.index log-error = mysql-bin.err relay-log = relay-bin relay-log-info-fayl = relay-bin. info relay-log-index = relay-bin.index expire_logs_days=7 binlog-do-db =
Tobeda my.cnf faylini tahrirlang va mysqld bo'limiga quyidagi qatorlarni qo'shing: Server-id = master-host = master master-user = replikatsiya master-parol = parol master-port = 3306 relay-log = relay-bin relay-log-info-file = relay-log.info relay-log-index = relay-log.index replicate-do-db = Asosiy serverda ma'lumotlarni takrorlash huquqiga ega replikatsiya foydalanuvchisini qo'shing: "Parol" BILAN Identifikatsiya qilingan "replikatsiya" @ "replika" GA *.* BO'YICHA GRANT REPLIKATSIYA QILIShI Keling, asosiy serverdagi takrorlangan ma'lumotlar bazalarini dasturiy ravishda yoki MySQL funksiyasidan foydalangan holda ma'lumotlarni o'zgartirishni bloklaylik: Mysql@master> JADVALLARNI O'QISH QULFI BILAN YUVLASH; mysql@master> SET GLOBAL faqat o'qish uchun = ON; Qulfni ochish uchun quyidagi buyruqdan foydalaning: Mysql@master> SET GLOBAL faqat o'qish uchun = OFF; Keling, asosiy serverdagi (yoki bizga kerak bo'lgan) barcha ma'lumotlar bazalarining zaxira nusxalarini yarataylik: Root@master# tar -czf mysqldir.tar.gz /var/lib/mysql/ yoki mysqldump yordam dasturidan foydalanish: Root@master# mysqldump -u root -p --lock-all-tables > dbdump.sql Keling, ikkala serverni ham to'xtatamiz (ba'zi hollarda siz usiz ham qilishingiz mumkin): Root@master# mysqlamdin -u root -p shutdown root@replica# mysqlamdin -u root -p shutdown Katalogni nusxalash orqali tobe serverda takrorlangan ma'lumotlar bazalarini tiklaylik. Replikatsiya boshlanishidan oldin ma'lumotlar bazalari bir xil bo'lishi kerak: Root@replica# cd /var/lib/mysql root@replica# tar -xzf mysqldir.tar.gz yoki MySQL funksionalligi bo'lsa, to'g'ri serverda MySQL-ni to'xtatishning hojati yo'q edi: Root@replica# mysql -u root -p< dbdump.sql Keling, MySQL-ni asosiy serverda (keyin, agar kerak bo'lsa, tobe serverda) ishga tushiramiz: Root@master# /etc/init.d/mysql start root@replica# /etc/init.d/mysql start Keling, asosiy va tobe serverlarning ishlashini tekshiramiz: Mysql@replica> qulni ishga tushirish; mysql@replica> QO'L HOLATINI KO'RSATISH\G mysql@master> MASTER STATUSNI KO'RSATISH\G Tobe serverda master.info faylidagi jurnallarni tekshiring, unda ma'lumotlar bazasidagi ma'lumotlarni o'zgartirish so'rovlari bo'lishi kerak. Shunday qilib, bu ikkilik fayl avval matn formatiga aylantirilishi kerak: Root@replica# mysqlbinlog master.info > master_info.sql Agar xatolar yuzaga kelsa, siz quyidagi buyruqlardan foydalanishingiz mumkin: Mysql@replica> qulni to'xtatish; mysql@replica> SLAVEni RESET; mysql@master> MASTERni RESET; va ma'lumotlar bazalarini blokirovka qilishdan boshlab barcha amallarni takrorlang. Replikatsiya serverlarini issiq qo'shish uchun siz quyidagi sintaksisdan foydalanishingiz mumkin: Mysql@replica> QO'L HOLATINI KO'RSATISH\G mysql@master> MASTER STATUSNI KO'RSATISH\G mysql@replica-2> MASTERNI MASTER_HOST GA O'ZGARTIRISh = "master", MASTER_USER ="replikatsiya", MASTER_PASSWORD MASTER_PASSWORD = "l-s"m bin.000004 ", MASTER_LOG_POS = 155; mysql@replica-2> SLAVE START; Holatlardan olingan ma'lumotlar joriy jurnal faylining joylashuvi va nomini ko'rsatadi. Asinxron replikatsiya bilan bir nusxadagi yangilanish bir xil tranzaksiyada emas, balki ma'lum vaqtdan keyin boshqalarga tarqaladi. Shunday qilib, asinxron replikatsiya kechikish yoki kutish vaqtini kiritadi, bu vaqt davomida individual replikalar bir xil bo'lmasligi mumkin. Ammo bu turdagi replikatsiyaning ijobiy tomonlari ham bor: asosiy server ma'lumotlar sinxronizatsiyasi haqida qayg'urmasligi kerak, siz foydalanuvchilar uchun muammosiz ma'lumotlar bazasini (masalan, zaxira nusxasini yaratish uchun) qul mashinasida bloklashingiz mumkin. Foydalanilgan manbalar ro'yxati
Saytdagi har qanday materiallardan to'liq yoki qisman foydalanganda manba sifatida havolani aniq ko'rsatishingiz kerak. Hozirgi kunda MySQL ma'lumotlar bazasi deyarli hamma joyda qo'llaniladi. MySQLsiz ishlaydigan veb-saytni tasavvur qilib bo'lmaydi. Albatta, ba'zi istisnolar mavjud, ammo bozorning asosiy qismini ushbu ma'lumotlar bazasi tizimi egallaydi. Va eng mashhur dastur bu MariaDB. Loyiha kichik bo'lsa, uni ishga tushirish uchun bitta server kifoya qiladi, unda barcha xizmatlar joylashgan: veb-server, ma'lumotlar bazasi serveri va pochta serveri. Ammo loyiha kattalashganda, siz har bir xizmat uchun alohida server ajratishingiz yoki hatto bitta xizmatni bir nechta serverlarga bo'lishingiz kerak bo'lishi mumkin, masalan, MySQL. Barcha serverlarda bir vaqtning o'zida ma'lumotlar bazalarining sinxron holatini saqlab qolish uchun siz replikatsiyadan foydalanishingiz kerak. Ushbu maqolada MariaDB Galera Cluster yordamida MySQL replikatsiyasini qanday sozlashni ko'rib chiqamiz. MARIADB GALERA NIMA?MariaDB Galera - bu MariaDB uchun master-master klaster tizimi. MariaDB 10.1 dan boshlab, Galera Server va MariaDB Server dasturlari bitta paketda keladi, shuning uchun siz darhol barcha kerakli dasturlarni olasiz. Ayni paytda MariaDB Galera faqat InnoDB va XtraDB ma'lumotlar bazasi dvigatellari bilan ishlashi mumkin. Replikatsiyadan foydalanishning afzalliklaridan biri bu sayt ma'lumotlar bazasiga ortiqcha qo'shilishdir. Agar ma'lumotlar bazalaridan biri ishlamay qolsa, darhol boshqasiga o'tishingiz mumkin. Barcha serverlar bir-biri bilan sinxronlashtirilgan holatni saqlab turadi va hech qanday yo'qolgan tranzaktsiyalar yo'qligini ta'minlaydi. MariaDB Galera-ning asosiy xususiyatlari:
MYSQL REPLIKASINI SOZLASHUshbu qo'llanmada biz Ubuntu 16.04 va MariaDB 10.1 versiyasidan misol sifatida foydalanamiz. Boshlashdan oldin tizimingizni to'liq yangilang: sudo apt-get update -y Biz konfiguratsiyani bir nechta tugunlarga joylashtirganimiz sababli, ularning barchasida yangilash operatsiyalarini bajarishimiz kerak. MariaDB ma'lumotlar bazasi serveri hali o'rnatilmagan bo'lsa, uni o'rnatishingiz kerak. Avval omborni va uning kalitini qo'shing: sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8 sudo add-apt-repository "deb http://ftp.utexas.edu/mariadb/repo/10.1/ubuntu xenial main" sudo apt-get update -y Paket ro'yxatini yangilash tugagach, MariaDB-ni buyruq bilan o'rnating: sudo apt o'rnating mariadb-server rsync -y To'g'ridan-to'g'ri sinxronizatsiya qilish uchun bizga rsync paketi kerak bo'ladi. O'rnatish tugallangach, mysql_secure_installation skripti yordamida ma'lumotlar bazasini himoyalashingiz kerak: sudo mysql_secure_installation Odatiy bo'lib, mehmonlarga kirishga ruxsat beriladi, test ma'lumotlar bazasi mavjud va ildiz foydalanuvchisi uchun parol o'rnatilmagan. Bularning barchasini tuzatish kerak. Batafsil maqolada o'qing. Muxtasar qilib aytganda, siz bir nechta savollarga javob berishingiz kerak: Ildiz uchun joriy parolni kiriting (hech biri uchun kiriting): Hamma narsa tayyor bo'lgach, MySQL ma'lumotlar bazalari takrorlanadigan tugunlarni o'rnatishga o'tishingiz mumkin. Birinchidan, birinchi tugunni o'rnatishni ko'rib chiqaylik. Siz barcha sozlamalarni my.cnf ga qo'yishingiz mumkin, ammo bu maqsadlar uchun /etc/mysql/conf.d/ papkasida alohida fayl yaratganingiz ma'qul. Ushbu qatorlarni qo'shing:
Bu erda 192.168.56.101 manzili joriy tugunning manzilidir. Keyin boshqa serverga o'ting va u erda bir xil fayl yarating: sudo vi /etc/mysql/conf.d/galera.cnf
Xuddi shunday, bu erda tugun manzili 192.168.0.103. Keling, ikkita serverli misolga to'xtalib o'tamiz, chunki bu tizimning ishlashini namoyish qilish uchun etarli va siz wsrep_cluster_address maydoniga qo'shimcha IP-manzilni kiritish orqali boshqa server qo'shishingiz mumkin. Endi asosiy parametrlarning qiymatlari nimani anglatishini ko'rib chiqamiz va ishga tushirishga o'tamiz:
MySQL replikatsiyasini sozlash deyarli tugallandi. Ishga tushirishdan oldin qolgan oxirgi qadam xavfsizlik devorini o'rnatishdir. Avval Ubuntu - UFW da iptables qoidalarini boshqarish vositasini yoqing: Keyin quyidagi portlarni oching: sudo ufw 3306/tcp ga ruxsat beradi MARIADB GALERA ISHLATILADIBarcha tugunlarni muvaffaqiyatli o'rnatganimizdan so'ng, birinchi tugundagi Galera klasterini ishga tushirishimiz kerak. Klasterni ishga tushirishdan oldin MariaDB xizmati barcha serverlarda to'xtatilganligiga ishonch hosil qilishingiz kerak: sudo galera_new_cluster Klaster ishlayotganligini va unga nechta mashina ulanganligini buyruq bilan tekshirishingiz mumkin: Endi faqat bitta mashina bor, endi boshqa serverga o'ting va u erda tugunni ishga tushiring: sudo systemctl MySQL-ni ishga tushiring Ishga tushirish muvaffaqiyatli yoki yo'qligini va buyruqda xatoliklar mavjudligini tekshirishingiz mumkin: sudo systemctl status MySQL Keyin xuddi shu buyruqni bajarish orqali siz yangi tugun avtomatik ravishda klasterga qo'shilganligini tekshirasiz: mysql -u root -p -e ""wsrep_cluster_size" kabi holatni ko'rsatish" Replikatsiya qanday ishlashini tekshirish uchun birinchi tugunda ma'lumotlar bazasini yarating va u haqiqatan ham boshqalarga qo'shilganligini tekshiring: mysql -u root -p MariaDB [(yo'q)]> test_db ma'lumotlar bazasini yaratish; mysql -u root -p MariaDB [(yo'q)]> ma'lumotlar bazalarini ko'rsatish; Ko'rib turganingizdek, ma'lumotlar bazasi boshqa mashinada avtomatik ravishda paydo bo'ladi. MySQL ma'lumotlarini replikatsiya qilish ishlamoqda. |
Mashhur:
Yangi
- Ramka kiritish. Ramkalar yaratish. noframes zaxirasini ta'minlash
- Windows tizimini qayta tiklash Hech qachon tugamaydigan avtomatik tiklashga tayyorgarlik
- Dasturlar yordamida flesh-diskni ta'mirlash Noutbukdagi USB portni qanday tuzatish kerak
- Disk tuzilishi buzilgan, o'qish mumkin emas, nima qilishim kerak?
- Qattiq disk kesh xotirasi nima va u nima uchun kerak?Kesh hajmi nima uchun javob beradi?
- Kompyuter nimadan iborat?
- Tizim blokining tuzilishi - qaysi komponentlar kompyuterning ishlashi uchun javobgardir Tizim blokining ichki qurilmalari xususiyatlari
- Qattiq diskni SSD ga qanday o'zgartirish mumkin
- Kirish qurilmalari kiradi
- Yozilgan dasturlash tili Ushbu o'zgaruvchilar turlari bilan nima qilish kerak