Олон өгөгдлийн сангийн Mysql хуулбар. MySQL дээр хуулбарлах гэж юу вэ? Бид Slave сервер дээр дараагийн үйлдлүүдийг хийдэг

Өгөгдлийн хуулбар mysqlөгөгдлийн сангийн яг хуулбарыг нэг серверээс авах боломжийг олгодог - мастер сервер (тэргүүлэх сервер) нэг буюу хэд хэдэн өөр сервер (боол сервер). Анхдагч байдлаар, Mysql хуулбар нь асинхрон байна.
Энэ нь мастер сервер ямар ч хяналтгүй бөгөөд боол серверүүд бүртгэлийн файлыг уншиж байгаа эсэх, үүнийг зөв хийж байгаа эсэхийг мэдэхгүй гэсэн үг юм.
Эдгээр үйл явцыг хянадаг синхрон ба хагас синхрончлолын бусад төрлүүд байдаг.
Тохиргооноос хамааран та мэдээллийн сан болон бие даасан мэдээллийн сангийн хүснэгтийг хоёуланг нь хуулбарлаж болно.

Та хуулбарыг юунд ашиглаж болох вэ:
1. Гүйцэтгэлийг сайжруулахын тулд хостуудын хооронд хуваарилалтыг ачаална.
Ийм схемд мастер зангилаа унших, бичих үйлдлүүдийг гүйцэтгэх бөгөөд мастер зангилаанд бүртгүүлсэн зангилаа нь унших суурь болж өгөх бөгөөд ингэснээр бид мастер серверийг унших үйлдлээс чөлөөлнө.
2. Өгөгдлийн аюулгүй байдал, засвар үйлчилгээ хийхэд хялбар, учир нь боол зангилаа нь зөвхөн унших боломжтой өгөгдөл агуулдаг тул захиалагчийн өгөгдөлд өөрчлөлт оруулах нь хязгаарлагдмал байх болно, засвар үйлчилгээ хийхэд хялбар - програмын ажиллагааг тасалдуулахгүйгээр мэдээллийн санд үйлчлэх процессуудыг ажиллуулах чадвар.
3. Холын зайд өгөгдөл түгээх. Та байршлаас үл хамааран дурын хост дээр мэдээллийн хуулбар үүсгэж болно
mysqlдараах хуулбарлах аргуудыг дэмждэг:
Уламжлалт - арга нь мастерийн хоёртын бүртгэлийн файлаас үйл явдлыг хуулбарлахад үндэслэсэн бөгөөд бүртгэлийн файлуудыг шаарддаг. Мастер болон боол серверүүдийн хоорондох байрлалууд синхрончлогдсон байх ёстой.
Глобал гүйлгээний танигч GTID ашиглах арга (гүйлгээний арга)
mysqlдараах төрлийн синхрончлолыг дэмждэг:
асинхрон (нэг талын синхрончлол)
хагас синхрон (захиалагчдын хэсэгчилсэн хяналт)
синхрон (захиалагчдыг бүрэн хянах)

Mysql мэдээллийн санг хуулбарлах уламжлалт аргыг тохируулах

Үйл ажиллагааны зарчим
Мастер сервер агуулсан бинүндсэн мэдээллийн санд гарсан бүх өөрчлөлтийг бүртгэдэг бүртгэлийн файлууд, нэрийг тайлбарласан файл бинфайлууд, түүнчлэн сүүлийн үндсэн өгөгдөл бүртгэгдсэн бүртгэл дэх байрлал
Боолын зангилаа нь нэрсийн талаархи мэдээлэл бүхий мастераас өгөгдлийг хүлээн авдаг бинфайлууд болон бүртгэлийн файл дахь байрлал.

Шидтэний тохиргоо
my.iniөвөрмөц танигч агуулсан байх ёстой - 1-ээс 2 хүртэлх тоо 32-р зэрэглэл - 1, сервер-id.
Анхдагчаар server-id=0 бөгөөд энэ нь боол серверүүдийн захиалгыг хүлээн авахгүй гэсэн үг юм

log-bin = mysql-bin
сервер-id=1

Энэ хоёр мөр эхлэхэд хангалттай
Анхаарна уу: Гэсэн хэдий ч InnoDB ашиглаж байгаа бол нэмж оруулахыг зөвлөж байна
innodb_flush_log_at_trx_commit=1
sync_binlog=1

Мөн та сүлжээтэй ажиллах чадвар идэвхгүй болоогүй, сүлжээг алгасах параметрийг тохируулсан эсэхийг шалгах хэрэгтэй.
Slave сервер нь хэрэглэгчийн нэр, нууц үг ашиглан мастертай холбогддог тул бид эхлээд мастер сервер дээр хэрэглэгч үүсгэдэг
ХЭРЭГЛЭГЧИЙН repl@%.mydomain.com ҮҮСГЭЖ slavepass-аар тодорхойлогддог;
Repl@%.mydomain.com-д *.* ДЭЭР ХУУРЛАХ БООЛ ОЛГОХ;

Нөхцөл байдлыг харцгаая
МАСТЕР БАЙДАЛ ҮЗҮҮЛЭХ
Хэрэв хоёртын бүртгэл үүсгэх процедурыг аль хэдийн эхлүүлсэн бол InnoDB хүснэгтүүдийн хувьд та эхлээд сессүүдийн аль нэгэнд хүснэгтүүдийг түгжих хэрэгтэй.
УНШИХ ТҮГЖЭЭТЭЙ ШИРЭЭНИЙГ УГААХ;
Хэрэв та сессээс гарвал хүснэгтийн түгжээ автоматаар гарна
Өөр нэг сесс дээр бид нэрийн утгыг авдаг бинбүртгэл ба байрлал
Хоёр утга хоёулаа хуулбарлах координатыг илэрхийлдэг бөгөөд энэ нь репликацийг эхлүүлэхийн тулд боол сервер хүссэн байршилд байгаа файлаас уншиж эхлэх ёстой.
Дараагийн алхам нь боол сервер дээр өгөгдөл байгаа эсэхээс хамаарна, мастерын өгөгдөл
Хэрэв тэдгээр нь байгаа бол бид хүснэгтүүдийг түгжээтэй орхиж, үүсгэнэ хогийн цэг(энэ нь InnoDB ашиглах үед санал болгож буй арга юм)
Та өгөгдлийн сангийн төрлийг тушаалаар олж мэдэх боломжтой
mysqlshow -u mysql_user -p -i өгөгдлийн сангийн нэр
Хэрэв мэдээллийн сан нь хоёртын файлд хадгалагдсан бол тэдгээрийг мастераас боол сервер рүү хуулж болно
Хийцгээе хогийн цэг
mysqldump --all-databases --master-data dbdump.db
суурийг сонгох mysqldump --өгөгдлийн сан --master-data dbdump.db
мастер-өгөгдлийн параметр, автоматаар нэмэгддэг МАСТЕРИЙГ ӨӨРЧЛӨХбоол зангилаа дээр, хэрэв параметр нэмээгүй бол сессийн бүх хүснэгтийг гараар түгжих ёстой.
Түгжээг тайлах
Хүснэгтийн түгжээг тайлах;

Slave зангилааны тохиргооА
-д нэмэх my.iniМастер болон бусад зангилаанаас хувийн серверийн ID

сервер-id=2

Бүртгэл үүсгэх
МАСТЕРИЙГ ӨӨРЧЛӨХ
MASTER_HOST=мастер_хост_нэр,
MASTER_USER=хуулбарлах_хэрэглэгчийн_нэр,
MASTER_PASSWORD=хуулбарлах_нууц үг,
MASTER_LOG_FILE=бичлэгдсэн_лог_файлын_нэр,
MASTER_LOG_POS=бичлэгдсэн_лог_байрлал;

Одоо байгаа өгөгдөлтэй хуулбарлахыг тохируулахдаа хуулбарлахаас өмнө агшин зуурын зургийг мастераас боол руу шилжүүлэх ёстой.
Бидний хэрэглэдэг mysqldump
1. Боол зангилааг ашиглан эхлүүлнэ үү --sp-slave-startхуулбарыг эхлүүлэхээс сэргийлэх параметр
2. Дамп файлыг импортлох
mysql fulldb.dump
3. Бүртгэлийн үйл явцыг эхлүүлнэ үү
START SLAVE;
Хуулбарлах статусыг шалгаж байна
БООЛ БАЙДЛЫГ ХАРУУЛАХ\G
Slave_IO_State: - боол төхөөрөмжийн одоогийн төлөв
Slave_IO_Running: - өгөгдлийн урсгал мастераас уншигдаж байгаа эсэх
Slave_SQL_Running: - тэд ажиллаж байна уу? sql асуулга, тийм байх ёстой

ЖишээМастер (мастер) серверийг тохируулцгаая - ip 11.11.11.10 V my.ini
[
mysqld] log-bin=mysql-bin server-id=1
Хэрэглэгч үүсгэх mysql -u root -p *.* TO replica@% нууц үгээр ТАНИЛЦСАН ХУУРАЛТЫН БООЛ ОЛГОХ; FLUSH ЭРХ АВЧ;
Дараа нь бид мэдээллийн сан дахь бүх хүснэгтийг түгждэг УНШИХ ТҮГЖЭЭТЭЙ ШИРЭЭНИЙГ УГААХ;
Бид статусыг харж байна МАСТЕР БАЙДАЛ ҮЗҮҮЛЭХ; Бид файлын нэр, байрлалыг санаж байгаа тул тэдгээрийг захиалгат Slave сервер дээр ашиглах болно

Боол Б my.ini
log-bin = mysql-bin server-id = 2

Бүртгэл үүсгэх MASTER-Г MASTER_HOST=11.11.11.10, MASTER_PORT=3306 болгож өөрчлөх,
MASTER_USER=хуулбар, MASTER_PASSWORD=нууц үг,
MASTER_LOG_FILE=server-mysql-bin.000002,
MASTER_LOG_POS=1151664, MASTER_CONNECT_RETRY=10;
START SLAVE;
Хуулбарлах статус SHOW SLAVE STATUS\G

Хуулбарлах гэдэг нэр томьёо нь мэдээллийн аюулгүй байдал, алдааг тэсвэрлэх чадвар, системийн гүйцэтгэлийг нэмэгдүүлдэг мэдээллийн олон хуулбарыг синхрончлох механизмыг илэрхийлэхэд хэрэглэгддэг. Үүний тод жишээ бол хоёр серверийн хоорондох мэдээллийн баазыг хуулбарлах явдал юм.

Master-Slave MySQL хуулбар

Master-Slave нэр томъёонд мастер нь өгөгдлийн сантай үндсэн сервер бөгөөд өгөгдлийн санд бичдэг боловч систем дээрх ачааллаас хамааран уншлага нь мастер болон боол хоёрын хооронд хуваарилагддаг бөгөөд энэ нь алдааны тэсвэрлэлт, гүйцэтгэлийг нэмэгдүүлдэг. Нэмж дурдахад, энэхүү аргын ачаар мэдээллийн сангийн хуулбар үргэлж бэлэн байдаг бөгөөд хэрэв серверүүдийн аль нэг нь ажиллахаа больсон тохиолдолд сэргээх боломжтой.

Ямар тохиолдолд боол сервер хэрэгтэй байж болох вэ? Жишээлбэл, өгөгдлийн санд бичихээр их хэмжээний өгөгдөл ирэхэд мастер сервер зүгээр л унших цаггүй болж, үйлчлүүлэгч бичих төгсгөлийг хүлээх шаардлагатай болдог бөгөөд үүнийг боол серверийн ачаар зайлсхийх боломжтой.

Мастер сервер бүтэлгүйтсэн тохиолдолд нөхцөл байдал үүсч болзошгүй бөгөөд энэ тохиолдолд боол сервер нь мастерын бүх функцийг хүлээн авч, түүнийг сэргээх хүртэл ганцаараа ажилладаг. Үйлчлүүлэгч юу ч анзаарахгүй байх магадлалтай бөгөөд техникч үүнийг засахын тулд нэг, хоёр, гурван цаг хүлээхгүй нь лавтай.

Механизмыг MySQL-д анхнаасаа суулгасан тул хуулбарлахыг тохируулах нь тийм ч хэцүү биш юм.

Мастер сервер дээр тохируулж байна

Ихэнхдээ /etc/mysql/my.cnf дээр байрладаг my.cnf тохиргооны файлыг засаж эхэлцгээе. Та олж, тайлбарыг арилгах (# устгах), эсвэл ийм мөрүүдийг бичих хэрэгтэй.

Холбох хаяг = 0.0.0.0 сервер-id = 1 log_bin = /var/log/mysql/mysql-bin.log

Чухал! Хэрэв холбох хаяг аль хэдийн бүртгэгдсэн бол түүнийг өөрчлөх шаардлагатай, эс тэгвээс серверүүдийн хооронд холболт үүсгэх боломжгүй болно.

Үүний дараа бид сервер дээрх мэдээллийн санг дахин эхлүүлэх болно.

/etc/init.d/mysql-г дахин эхлүүлнэ үү

Одоо бид мэдээллийн санг хуулбарлах эрхтэй хэрэглэгчийг үүсгэх хэрэгтэй, үүнийг root-ээс хийж болно MySQL консолкомандыг ашиглан

"Slave_password"-аар тодорхойлогддог "slave_user"@"%"-д *.* ДЭЭР ХУУРЛАХ БООЛ ОЛГОХ; FLUSH ЭРХ АВЧ;

"Боол_хэрэглэгч" ба "боол_нууц үг"-ийн оронд та боолын нэвтрэх болон нууц үгээ бичих хэрэгтэй.

Одоо үндсэн өгөгдлийг харцгаая

МАСТЕР БАЙДАЛ ҮЗҮҮЛЭХ;

Баганын утгууд Файл Тэгээд Байрлал Та санаж байх хэрэгтэй, тэд боолыг бий болгоход ашиглагдах болно, энэ нь бидний одоо явж байгаа зүйл юм.

Slave сервер дээр тохируулж байна

Эхний алхам бол бидний хуулбарлах гэж байгаатай ижил нэртэй мэдээллийн сан үүсгэх явдал юм. Энэ бол чухал алхам бөгөөд үүнийг үл тоомсорлож болохгүй. Дараа нь бидэнд аль хэдийн танил болсон тохиргооны файл руу очно уу my.cnf тохиргоог бичнэ үү.

Server-id = 2 relay-log = /var/log/mysql/mysql-relay-bin.log bin-log = /var/log/mysql/mysql-bin.log

Чухал! Bin-log-д бин-лог руу хүрэх замыг бичнэ mester сервер дээр . Серверийн ID нь мастер ID-аас өөр байх ёстой бөгөөд үүнийг өөр 1 болгож тохируулахад тохиромжтой.

MASTER-Г MASTER_HOST = 1.1.1.1, MASTER_USER = "боол_хэрэглэгч", MASTER_PASSWORD = "боол_нууц үг", MASTER_LOG_FILE = "mysql-bin.000001", MASTER_LOG_POS = 107; START SLAVE;

Хэрэв хост нь мастерийн IP хаяг бол нэвтрэх болон нууц үг нь мастер дээр үүсгэсэнтэй тохирч байвал master_log_file болон master_log_pos нь дараах мэдээллээр дүүрдэг. мастер серверийг тохируулах сүүлчийн зүйл .

Яг энэ мөчөөс эхлэн мэдээллийн сан дахь бүх өөрчлөлт мастераас боол руу шилжинэ.

Хуулбарлах статусыг шалгаж байна

SHOW MASTER STATUS командаас гадна; Боолын SHOW SLAVE STATUS\G-ийн хувьд ижил төстэй зүйл байдаг бөгөөд энэ нь мэдээлэл бүхий хүснэгтийг харуулах болно. Серверүүд холбогдсон, зөв ​​ажиллаж байгаагийн гол шинж тэмдэг бол ийм шугамууд байгаа явдал юм

Хуулбарлах- ачаалал дор ажилладаг системийн архитектурт ашигладаг техник бөгөөд үүний үр дүнд хэд хэдэн сервер дээр нэг мэдээллийн сантай ажиллах үед ачааллыг хуваарилах явдал юм. MySQL MASTER SLAVE хуулбарыг илүү олон удаа ашигладаг боловч хоёр дахь төрлийн хуулбарыг ашигладаг - Master-Master.

MySQL MASTER SLAVE хуулбар гэж юу вэ, үүнийг юунд ашигладаг вэ?

Хуулбарлах Мастер-БоолМэдээллийг боол MySQL сервер рүү хуулбарлахыг хэлнэ; ийм хуулбарыг ихэвчлэн найдвартай байдлыг хангах зорилгоор хийдэг. Хэрэв Мастер сервер бүтэлгүйтвэл түүний функцууд Slave руу шилжинэ.

Системийн гүйцэтгэлийг сайжруулахын тулд хуулбарлах ажлыг хийж болно, гэхдээ гүйцэтгэл нь энд бараг үргэлж хоёрдогч байдаг.
Аппликешн нь мэдээллийн сантай ажиллах үед хамгийн түгээмэл үйлдлүүд байдаг СОНГОХ- өгөгдөл унших, өгөгдлийг өөрчлөх хүсэлт - хүсэлт УСТГАХ, INSERT, ШИНЭЧЛЭХ, ӨӨРЧЛӨХСтатистикийн дагуу энэ нь маш бага тохиолддог.

Хэрэв серверүүдийн аль нэг нь ажиллахаа больсон тохиолдолд өгөгдөл алдагдахаас урьдчилан сэргийлэхийн тулд хүснэгтийн мэдээллийг өөрчлөх үйлдлийг Мастер сервер үргэлж боловсруулдаг. Дараа нь өөрчлөлтүүд нь Slave-д хуулбарлагдана. Уншихыг Slave-ийн дүрд тоглодог серверээс хийж болно.
Үүний ачаар та найдвартай байдлын зэрэгцээ гүйцэтгэлийг нэмэгдүүлэх боломжтой.

Энэхүү шийдэл нь түгээмэл боловч хуулбарлах явцад саатал гарч болзошгүй тул үргэлж хэрэглэгдэх боломжгүй - хэрэв ийм зүйл тохиолдвол мэдээллийг Мастер серверээс унших шаардлагатай.

Тодорхой төрлийн хүсэлтийг тодорхой мэдээллийн сангийн сервер рүү чиглүүлэх нь ямар ч тохиолдолд хэрэглээний түвшинд хэрэгждэг.

Хэрэв та хуваах юм бол СОНГОХ асуулгаҮлдсэн бүх зүйл нь програмын түвшинд, тэдгээрийн аль нэг нь ажиллахаа больсон тохиолдолд хүссэн сервер рүүгээ илгээж, дэд бүтцийн үйлчилгээ үзүүлдэг програм ажиллахгүй болно. Үүнийг ажиллуулахын тулд та илүү ихийг өгөх хэрэгтэй нарийн төвөгтэй хэлхээболон сервер тус бүрийг нөөцлөх.

Хуулбарлах нь алдааг тэсвэрлэхэд зориулагдсан болохоос масштабыг нэмэгдүүлэхийн тулд биш юм.

MySQL MASTER SLAVE хуулбар - Debian дээр тохируулах

Бид хаягтай хоёр сервер ашиглах болно:

  • Мастер сервер 192.168.0.1
  • Slave сервер 192.168.0.2

Үзүүлэхийн тулд дотоод сүлжээнд холбогдсон VDS ашигладаг.
Бид энэ эсвэл тэр командыг аль сервер дээр гүйцэтгэж байгаагаа үргэлж мэдэхийн тулд хоёр сервер дээрх /etc/hosts файлуудыг засах болно.

192.168.0.1 мастер

192.168.0.2 боол

Өөрчлөлтүүд хүчин төгөлдөр болж, серверийг дахин ачаалахын тулд /etc/hostname дотор байгаа утгуудыг мастер болон slave-ээр сольж үзье.

1. Бид мастер сервер дээр тохиргоо хийдэг.

root@master:/#

Голыг нь засаж байна тохиргооны файлмэдээллийн сангийн сервер

mcedit /etc/mysql/my.cnf

Серверийн ID-г сонгоно уу - та дурын дугаарыг зааж өгч болно, анхдагч нь 1 - мөрийн тайлбарыг арилгана уу

серверийн дугаар = 1

Хоёртын бүртгэлийн замыг тохируулна уу - мөн анхдагчаар зааж өгсөн, тайлбарыг арилгана уу

Бидний өөр серверт хуулбарлах мэдээллийн сангийн нэрийг тохируулна уу

binlog_do_db = db1

Mysql-г дахин эхлүүлснээр тохиргооны файлыг дахин уншиж, өөрчлөлтүүд хүчин төгөлдөр болно.

/etc/init.d/mysql-г дахин эхлүүлнэ үү

2. Хэрэглэгчийн шаардлагатай эрхийг тохируулна уу

Өгөгдлийн сангийн серверийн консол руу очно уу:

Бид боол сервер дээрх хэрэглэгчдэд шаардлагатай эрхийг өгдөг.

"Slave_user"@"%"-д "123"-аар тодорхойлогддог *.* ДЭЭР ХУУРЛАХ БООЛ ОЛГОХ;

Өгөгдлийн сангийн бүх хүснэгтийг түгжих

УНШИХ ТҮГЖЭЭТЭЙ ШИРЭЭНИЙГ УГААХ;

Мастер серверийн статусыг шалгаж байна:

+——————+———-+—————+——————+
| Файл | Албан тушаал | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+—————+——————+
| mysql-bin.000001 | 327 | db1 | |
+——————+———-+—————+——————+
Багц дахь 1 мөр (0.00 сек)

3. Сервер дээр мэдээллийн сан үүсгэх

Өгөгдлийн сангийн дамп үүсгэх:

mysqldump -u root -p db1 > db1.sql

Mysql консол дээрх хүснэгтүүдийн түгжээг тайлах:

4. Өгөгдлийн сангийн дампыг Slave сервер рүү шилжүүлнэ

scp db1.sql [имэйлээр хамгаалагдсан]:/гэр

Бид Slave сервер дээр дараагийн үйлдлүүдийг хийдэг

root@боол:/#

5. Мэдээллийн сан үүсгэх

Хогийн цэгийг ачаалж байна:

mysql -u root -p db1< db1.sql

6. my.cnf-д өөрчлөлт оруулах

mcedit /etc/mysql/my.cnf

Мастер сервер дээр тохируулсан утгыг нэмэгдүүлэх замаар бид ID оноодог

сервер ID = 2

Реле бүртгэлийн замыг тохируулна уу

relay-log = /var/log/mysql/mysql-relay-bin.log

болон Мастер сервер дээрх хогийн лог руу очих зам

log_bin = /var/log/mysql/mysql-bin.log

Суурийг зааж өгнө үү

binlog_do_db = db1

Үйлчилгээг дахин эхлүүлж байна

/etc/init.d/mysql-г дахин эхлүүлнэ үү

7. Мастер сервертэй холболт хийх

MASTER-Г MASTER_HOST = 192.168.0.1, MASTER_USER = "боол_хэрэглэгч", MASTER_PASSWORD = "123", MASTER_LOG_FILE = "mysql-bin.000001", MASTER_LOG_POS = 327;

Бид боол сервер дээр хуулбарлаж эхэлдэг:

Та Slave дээрх хуулбарын ажиллагааг дараах хүсэлтээр шалгаж болно.

************************* 1. эгнээ ******************** * ********
Slave_IO_State: Мастер үйл явдлыг илгээхийг хүлээж байна
Мастер_Хост: 192.168.0.1
Мастер_Хэрэглэгч: боол_хэрэглэгч
Мастер_порт: 3306
Холбох_дахин оролдох: 60
Мастер_лог_файл: mysql-bin.000002
Унших_Мастер_лог_Пос: 107
Relay_Log_File: mysql-relay-bin.000003
Relay_Log_Pos: 253
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Тийм ээ
Slave_SQL_Running: Тийм
ХБ-ыг хуулбарлах:
ХБ-ыг хуулбарлах:
Хүснэгтийг хуулбарлах:
Хүснэгтийг хуулбарлах:
Хийх_хүснэгтийг хуулбарлах:
Хүснэгтийг хуулбарлах:
Сүүлийн_алдаа: 0
Сүүлийн_алдаа:
Алгасах_тоолуур: 0
Exec_Master_Log_Pos: 107
Relay_Log_Space: 555
Нөхцөл: Байхгүй
Бүртгэлийн_файл хүртэл:
Бүртгэлийн_пос хүртэл: 0
Мастер_SSL_зөвшөөрөгдсөн: Үгүй
Мастер_SSL_CA_Файл:
Мастер_SSL_CA_зам:
Мастер_SSL_серт:
Мастер_SSL_шифр:
Мастер_SSL_Түлхүүр:
Мастерын_хоцорсон секунд: 0
Мастер_SSL_Verify_Server_Cert: Үгүй
Сүүлийн_IO_Алдаа: 0
Сүүлийн_IO_Алдаа:
Сүүлийн_SQL_Алдаа: 0
Сүүлийн_SQL_Алдаа:
Серверийн ID-г хуулбарлах:
Мастер_серверийн ID: 1
Багц дахь 1 мөр (0.00 сек)

Алдаа гараагүй тул хуулбарыг зөв тохируулсан гэж дүгнэж болно.

байна сайн хэрэгсэлмасштабтай, гэхдээ гол сул тал нь өгөгдөл хуулбарлах синхрончлол, саатал нь маш чухал байж болох юм.

Илүү орчин үеийн шийдлийг ашиглах нь тэдгээрээс бүрэн зайлсхийх боломжийг олгодог. Энэ нь тохируулахад хялбар, найдвартай бөгөөд мэдээллийн сангийн овоолгыг гараар хуулах шаардлагагүй болно.

хумсны 2009 оны 4-р сарын 8-ны өдрийн 11:10 цагт

MySQL хуулбарлах үндэс

  • MySQL

Би MySQL серверүүдийн хуулбартай харьцангуй саяхан танилцаж, тохиргооны талаар янз бүрийн туршилтуудыг хийхдээ надад тохирсон зүйлийг бичсэн. Би нэлээд их материал цуглуулсны дараа энэ нийтлэлийг бичих санаа төрсөн. Би тулгарсан хамгийн энгийн асуудлуудын талаар зөвлөмж, шийдлүүдийг цуглуулахыг хичээсэн. Би баримт бичиг болон бусад эх сурвалжийн холбоосыг замын дагуу өгөх болно. Би үүнийг бүрэн дүрсэлж чадахгүй байгаа ч нийтлэл хэрэг болно гэж найдаж байна.

Богино танилцуулга

Хуулбарлах (Латин replico - давтан хэлнэ) гэдэг нь мэдээллийн сангийн үндсэн серверээс нэг буюу хэд хэдэн хамааралтай сервер рүү өгөгдлийн өөрчлөлтийг хуулбарлах явдал юм. Бид үндсэн сервер рүү залгах болно мастер, мөн хамааралтай - хуулбарууд.
Мастер дээр гарсан өгөгдлийн өөрчлөлтүүд хуулбарууд дээр давтагддаг (гэхдээ эсрэгээр биш). Тиймээс өгөгдлийг өөрчлөх хүсэлтүүд (INSERT, UPDATE, DELETE гэх мэт) зөвхөн мастер дээр хийгдэх бол өгөгдлийг унших хүсэлтүүд (өөрөөр хэлбэл SELECT) хуулбар болон мастер дээр хоёуланд нь гүйцэтгэгдэж болно. Хуулбаруудын аль нэг дээр хуулбарлах үйл явц нь бусад хуулбаруудын үйл ажиллагаанд нөлөөлөхгүй бөгөөд мастерийн ажилд бараг нөлөөлдөггүй.
Мастер дээр хадгалагдсан хоёртын бүртгэлийг ашиглан хуулбарлах ажлыг гүйцэтгэдэг. Тэд мэдээллийн санд өөрчлөлт оруулахад хүргэдэг (эсвэл хүргэж болзошгүй) бүх асуулгыг хадгалдаг (асуулга нь тодорхой хадгалагдаагүй тул хэрэв та тэдгээрийг харахыг хүсвэл mysqlbinlog хэрэгслийг ашиглах хэрэгтэй болно). Бинлогуудыг хуулбарууд руу шилжүүлдэг (мастераас татаж авсан бинлогийг "relay binlog" гэж нэрлэдэг) бөгөөд хадгалагдсан асуулгууд нь тодорхой байрлалаас эхлэн гүйцэтгэгдэнэ. Хуулбарлах явцад өөрчлөгдсөн өгөгдөл өөрөө дамждаггүй, харин зөвхөн хүсэлтүүд өөрчлөлтийг үүсгэдэг гэдгийг ойлгох нь чухал юм.
Хуулбарлах замаар мэдээллийн сангийн агуулгыг хэд хэдэн сервер дээр хуулбарладаг. Яагаад заавал давхардуулах шаардлагатай байна вэ? Үүнд хэд хэдэн шалтгаан бий:
  • гүйцэтгэл ба өргөтгөх чадвар. Өгөгдлийн санд нэгэн зэрэг унших, бичих үйлдлээс үүдэлтэй ачааллыг нэг сервер даах боломжгүй байж магадгүй. Хуулбар үүсгэхийн ашиг тус нь таны систем дээр нэг бичээс бүрийг унших тусам илүү их байх болно.
  • алдааны хүлцэл. Хуулбарлах алдаа гарсан тохиолдолд унших бүх хүсэлтийг мастер руу аюулгүйгээр шилжүүлж болно. Хэрэв мастер амжилтгүй болбол бичих хүсэлтийг хуулбар руу шилжүүлж болно (мастер сэргээгдсэний дараа энэ нь хуулбарын үүргийг гүйцэтгэж болно).
  • өгөгдөл нөөцлөх. Mysqldump-г гүйцэтгэхийн тулд хуулбарыг хэсэг хугацаанд "удаашруулж" болох боловч мастер үүнийг хийж чадахгүй.
  • хойшлуулсан тооцоо. Хүнд, удаан SQL асуулга нь бүхэл системийн хэвийн үйл ажиллагаанд саад учруулахаас айхгүйгээр тусдаа хуулбар дээр гүйцэтгэж болно.
Үүнээс гадна бусад сонирхолтой шинж чанарууд байдаг. Хуулбарууд руу өгөгдөл өөрөө биш, харин тэдгээрийг өөрчлөхөд хүргэдэг асуулга дамждаг тул бид мастер болон хуулбар дээр өөр өөр хүснэгтийн бүтцийг ашиглаж болно. Ялангуяа хүснэгтийн төрөл (хөдөлгүүр) эсвэл индексийн багц өөр байж болно. Жишээлбэл, бүрэн текст хайлт хийхийн тулд мастер нь InnoDB-г ашиглахаас үл хамааран хуулбар дээр MyISAM хүснэгтийн төрлийг ашиглаж болно.

Хуулбарлах тохиргоог хийж байна

Бидэнд ажиллаж байгаа мэдээллийн сан байгаа гэж бодъё MySQL өгөгдөл, аль хэдийн мэдээллээр дүүргэж, ажилд орсон. Дээр дурдсан нэг шалтгааны улмаас бид серверийнхээ хуулбарыг идэвхжүүлэх гэж байна. Бидний анхны өгөгдөл:
  • Мастер IP хаяг нь 192.168.1.101, хуулбарууд нь 192.168.1.102.
  • MySQL суулгаж тохируулсан
  • та testdb мэдээллийн сангийн хуулбарыг тохируулах хэрэгтэй
  • Бид шидтэнг хэсэг хугацаанд түр зогсоож болно
  • Бид мэдээж хоёр машин дээр root-той
Шидтэний тохиргоо
Энэ хэсэгт өвөрмөц сервер ID, хоёртын бүртгэлийн зам, хуулбарлах мэдээллийн сангийн нэрийг зааж өгөхөө мартуузай.
серверийн дугаар = 1
log-bin = /var/lib/mysql/mysql-bin
replicate-do-db = testdb
Хоёртын бүртгэлд хангалттай дискний зай байгаа эсэхийг шалгаарай.

Хуулбарлах хэрэглэгчийн эрхийн дагуу хуулбарлах хэрэглэгчийг нэмье. "Хуулбарлах боол" эрх нь хангалттай:
mysql@master> "testdb"-д репликацийн боол ОЛГОХ.* "Нууц үг"-ээр ТАНИЛЦСАН "хуулбарлах"@"192.168.1.102"-д;

Тохиргооны өөрчлөлт хүчин төгөлдөр болохын тулд MySQL-г дахин ачаална уу:
root@master# үйлчилгээ mysqld дахин эхлүүлнэ үү

Хэрэв бүх зүйл сайн болсон бол "мастерийн статусыг харуулах" команд нь дараах зүйлийг харуулах ёстой.
mysql@master>МАСТЕР БАЙДАЛ ҮЗҮҮЛЭХ\G
Файл: mysql-bin.000003
Албан тушаал: 98
Binlog_Do_DB:
Binlog_Ignore_DB:
Мастер дээрх өгөгдлийн санд өөрчлөлт оруулахад байрлалын утга нэмэгдэх ёстой.

Хуулбарлах тохиргоо
Тохиргооны хэсэгт серверийн ID, хуулбарлах өгөгдлийн сангийн нэр, релей бинлог руу хүрэх замыг зааж өгөөд MySQL-г дахин эхлүүлнэ үү.
сервер 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# үйлчилгээг mysqld дахин эхлүүлнэ үү

Өгөгдөл шилжүүлж байна
Энд бид мэдээллийн санг бичихийн тулд түгжих хэрэгтэй болно. Үүнийг хийхийн тулд та програмуудыг зогсоож эсвэл мастер дээрх зөвхөн уншигдах_ тугийг ашиглаж болно (анхаарал: энэ туг нь SUPER эрхтэй хэрэглэгчдэд ямар ч нөлөө үзүүлэхгүй). Хэрэв бидэнд MyISAM хүснэгтүүд байгаа бол "хүснэгтүүдийг угаах":
mysql@master> УНШИХ ТҮГЖЭЭТЭЙ ХҮСНЭГТҮҮДИЙГ УГААХ;
mysql@master> SET GLOBAL зөвхөн уншигдах = ON;

Мастерийн статусыг "шоу мастер статус" командын тусламжтайгаар харцгаая, мөн Файл ба Байршлын утгыг санаарай (мастерыг амжилттай хаасны дараа тэдгээр нь өөрчлөгдөх ёсгүй):
Файл: mysql-bin.000003
Албан тушаал: 98

Бид мэдээллийн санг хаяж, үйл ажиллагаа дууссаны дараа бид мастерийн түгжээг арилгадаг.
mysql@master> SET GLOBAL-н зөвхөн уншигдах = OFF;

Бид хогийн цэгийг хуулбар руу шилжүүлж, түүнээс өгөгдлийг сэргээдэг.
Эцэст нь бид "мастерыг өөрчлөх" болон "боолыг эхлүүлэх" командуудыг ашиглан хуулбарлах ажлыг эхлүүлж, бүх зүйл сайн болсон эсэхийг шалгана уу:
mysql@replica> MASTER-Г MASTER_HOST болгон өөрчлөх = "192.168.1.101", MASTER_USER = "хуулбарлах", MASTER_PASSWORD = "нууц үг", MASTER_LOG_FILE = "mysql-bin.000003", MASTER_9 =;
mysql@replica> боол эхлүүлэх;
Бид MASTER_LOG_FILE болон MASTER_LOG_POS-ийн утгыг мастераас авдаг.

"Боолын статусыг харуулах" командын тусламжтайгаар хуулбарлалт хэрхэн явагдаж байгааг харцгаая:
mysql@replica> БООЛ БАЙДЛЫГ ХАРУУЛАХ\G
Slave_IO_State: Мастер үйл явдлыг илгээхийг хүлээж байна
Мастер_Хост: 192.168.1.101
Мастер_Хэрэглэгч: хуулбар
Мастер_порт: 3306
Холбох_дахин оролдох: 60
Мастер_лог_файл: mysql-bin.000003
Унших_Мастер_лог_Пос: 98
Relay_Log_File: mysql-relay-bin.001152
Relay_Log_Pos: 235
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Тийм ээ
Slave_SQL_Running: Тийм
Replicate_Do_DB: testdb,testdb
ХБ-ыг хуулбарлах:
Хүснэгтийг хуулбарлах:
Хүснэгтийг хуулбарлах:
Хийх_хүснэгтийг хуулбарлах:
Хүснэгтийг хуулбарлах:
Сүүлийн_алдаа: 0
Сүүлийн_алдаа:
Алгасах_тоолуур: 0
Exec_Master_Log_Pos: 98
Relay_Log_Space: 235
Нөхцөл: Байхгүй
Бүртгэлийн_файл хүртэл:
Бүртгэлийн_байрлал хүртэл: 0
Мастер_SSL_зөвшөөрөгдсөн: Үгүй
Мастер_SSL_CA_Файл:
Мастер_SSL_CA_зам:
Мастер_SSL_серт:
Мастер_SSL_шифр:
Мастер_SSL_Түлхүүр:
Мастерын_хоод_секунд: 5

Би одоо хамгийн сонирхолтой үнэт зүйлсийг онцоллоо. Хэрэв хуулбарлах ажиллагаа амжилттай эхэлсэн бол тэдгээрийн утга нь жагсаалтад байгаатай ойролцоо байх ёстой (баримт бичигт "боолын статусыг харуулах" командын тайлбарыг үзнэ үү). Секундын_Ард_Мастер утга нь ямар ч бүхэл тоо байж болно.
Хэрэв хуулбарлах нь хэвийн бол хуулбар нь мастерийг дагах болно (Master_Log_File дахь бүртгэлийн дугаар болон Exec_Master_Log_Pos байрлал нэмэгдэх болно). Мастераас хуулбарын хоцрогдол (Seconds_Behind_Master) хамгийн тохиромжтой нь тэгтэй тэнцүү байх ёстой. Хэрэв энэ нь буурахгүй эсвэл өсөхгүй бол хуулбар дээрх ачаалал хэт өндөр байх магадлалтай - энэ нь мастер дээр гарсан өөрчлөлтийг давтах цаг байхгүй болно.
Хэрэв Slave_IO_State хоосон, Seconds_Behind_Master нь NULL байвал хуулбарлал эхлээгүй байна. Үүний шалтгааныг олж мэдэх, арилгах, хуулбарлах ажлыг дахин эхлүүлэхийн тулд MySQL бүртгэлийг харна уу:
mysql@replica> боол эхлүүлэх;

Эдгээр энгийн алхмуудыг хийснээр бид өгөгдөл нь мастер дээрх өгөгдөлтэй ижил хуулбарыг авдаг.
Дашрамд хэлэхэд, мастерыг хаах цаг бол овоолгыг бий болгох цаг юм. Хэрэв бүтээхэд хүлээн зөвшөөрөгдөөгүй удаан хугацаа шаардагдах бол та дараахыг оролдож болно.

  • мастер руу бичихийг зөвхөн уншигдах_ тугаар хааж, байрлалыг санаж, MySQL-г зогсоо.
  • Үүний дараа мэдээллийн сангийн файлуудыг хуулбар руу хуулж, мастерийг идэвхжүүлнэ.
  • ердийн аргаар хуулбарлаж эхлэх.
Мастерыг огт зогсоохгүйгээр хуулбар үүсгэх хэд хэдэн арга байдаг боловч тэдгээр нь үргэлж ажилладаггүй.

Хуулбаруудыг нэмж байна

Бидэнд аль хэдийн ажиллаж байгаа мастер болон хуулбар байгаа бөгөөд бид тэдэнд нэгийг нэмэх хэрэгтэй гэж бодъё. Энэ нь мастерт анхны хуулбарыг нэмэхээс хамаагүй хялбар юм. Үүнээс илүү сайхан зүйл бол мастерийг зогсоох шаардлагагүй юм.
Эхлээд хоёр дахь хуулбар дээр MySQL-ийг тохируулж, тохиргоонд шаардлагатай параметрүүдийг оруулсан эсэхээ шалгаарай.
сервер ID = 3
replicate-do-db = testdb

Одоо эхний хуулбар дээр хуулбарлахаа зогсооё:
mysql@replica-1> зогсоох боол;

Хуулбар нь хэвийн ажиллах боловч түүн дээрх өгөгдөл одоо байхаа болино. Статусыг харцгаая, хуулбарлахыг зогсоохоос өмнө хуулбар нь хүрсэн мастер байрлалыг санацгаая:
mysql@replica-1> БООЛ БАЙДЛЫГ ХАРУУЛАХ\G

Бидэнд хэрэгтэй утгууд нь Master_Log_File болон Exec_Master_Log_Pos байх болно:
Мастер_лог_файл: mysql-bin.000004
Exec_Master_Log_Pos: 155

Өгөгдлийн сангийн дамп үүсгээд эхний хуулбар дээр хуулбарлалтыг үргэлжлүүлье:
mysql@replica-1> START SLAVE;

Хоёр дахь хуулбар дээрх хогийн цэгээс өгөгдлийг сэргээцгээе. Дараа нь хуулбарыг идэвхжүүлнэ үү:
mysql@replica-2> MASTER-Г MASTER_HOST болгон өөрчлөх = "192.168.1.101", MASTER_USER = "хуулбарлах", MASTER_PASSWORD = "нууц үг", MASTER_LOG_FILE = "mysql-bin.0000004", MASTER_5;_15;
mysql@replica-2> START SLAVE;

MASTER_LOG_FILE болон MASTER_LOG_POS утгууд нь эхний хуулбар дээрх "боол статусыг харуулах" командын үр дүнгээс тус тус Master_Log_File болон Exec_Master_Log_Pos утгууд юм.
Хуулбарлах нь эхний хуулбарыг зогсоосон байрлалаас эхлэх ёстой (мөн үүний дагуу хогийн цэг үүсдэг). Тиймээс бид ижил өгөгдөлтэй хоёр хуулбартай болно.

Хуулбаруудыг нэгтгэж байна

Заримдаа дараах нөхцөл байдал үүсдэг: мастер дээр хоёр мэдээллийн сан байдаг бөгөөд тэдгээрийн нэг нь нэг хуулбар дээр, хоёр дахь нь нөгөө дээр хуулбарлагддаг. Хоёр өгөгдлийн сангийн хуулбарыг мастер дээр буулгахгүйгээр эсвэл хаахгүйгээр хоёр хуулбар дээр хэрхэн тохируулах вэ? Маш энгийнээр хэлэхэд "star slave up" командыг ашиглана.
Тиймээс бид replica-1 болон replica-2 дээр тус тус хуулбарлагдсан testdb1 ба testdb2 мэдээллийн сантай мастертай болсон. Мастерыг зогсоохгүйгээр хоёр мэдээллийн сангийн хуулбарыг хуулбар-1 болгон тохируулцгаая.
Replica-2 дээрх хуулбарыг командын тусламжтайгаар зогсоож, мастерын байрлалыг санаарай:
mysql@replica-2> STOP SLAVE;
mysql@replica-2> БООЛ БАЙДЛЫГ ХАРУУЛАХ\G
Мастер_лог_файл: mysql-bin.000015
Exec_Master_Log_Pos: 231

testdb2 өгөгдлийн сангийн овоолгыг үүсгээд репликацийг үргэлжлүүлье (энэ нь хуулбар-2-оор хийсэн засваруудыг гүйцээнэ). Бид хогийн цэгийг хуулбар-1 болгон сэргээнэ.

Replica-1 дээрх нөхцөл байдал дараах байдалтай байна: testdb1 мэдээллийн сан нэг үндсэн байрлалд байгаа бөгөөд үргэлжлүүлэн хуулбарлагдаж байна, testdb2 мэдээллийн сан өөр байрлалаас дампаас сэргээгдсэн. Тэдгээрийг синхрончлоод үзье.

Хуулбарлахаа зогсоож, мастерын байрлалыг санацгаая:
mysql@replica-1> SOP SLAVE;
mysql@replica-1> БООЛ БАЙДЛЫГ ХАРУУЛАХ\G
Exec_Master_Log_Pos: 501

Replica-1-ийн тохиргоонд хоёр дахь мэдээллийн сангийн нэрийг энэ хэсэгт зааж өгсөн эсэхийг шалгацгаая.
replicate-do-db = testdb2

Тохиргооны өөрчлөлтүүд хүчин төгөлдөр болохын тулд MySQL-г дахин ачаалцгаая. Дашрамд хэлэхэд, хуулбарлахыг зогсоохгүйгээр MySQL-г зүгээр л дахин эхлүүлэх боломжтой байсан - бүртгэлээс бид мастер хуулбарын аль байрлалд зогссоныг мэдэх болно.

Одоо хуулбар-2-ыг түр зогсоосон байрлалаас хуулбарыг түр зогсоосон байрлал руу хуулбарлаж үзье:
mysql@replica-1> MASTER-Г MASTER_HOST болгон өөрчлөх = "192.168.1.101", MASTER_USER = "хуулбарлах", MASTER_PASSWORD = "нууц үг", MASTER_LOG_FILE = "mysql-bin.000015", MASPOS22;_13;
mysql@replica-1> MASTER_LOG_FILE = "mysql-bin.000016 ", MASTER_LOG_POS = 501 хүртэл slave эхлүүлэх;

Хуулбарлах нь хүртэл хэсэгт заасан байрлалд хүрмэгц дуусч, үүний дараа манай мэдээллийн бааз хоёулаа ижил үндсэн байрлалд таарах болно (үүнд бид хуулбар-1 дээр хуулбарлахаа зогсоосон). Үүнд итгэлтэй байцгаая:
mysql@replica-1> БООЛ БАЙДЛЫГ ХАРУУЛАХ\G
mysql@replica-1> START SLAVE;
Мастер_лог_файл: mysql-bin.000016
Exec_Master_Log_Pos: 501

Хэсэг дэх хуулбар-1-ийн тохиргоонд хоёр мэдээллийн сангийн нэрийг нэмье.
replicate-do-db = testdb1
replicate-do-db = testdb2

Чухал: мэдээллийн сан бүрийг тусдаа мөрөнд жагсаах ёстой.
MySQL-г дахин эхлүүлээд хуулбарыг үргэлжлүүлнэ үү:
mysql@replica-1> MASTER-Г MASTER_HOST болгон өөрчлөх = "192.168.1.101", MASTER_USER = "хуулбарлах", MASTER_PASSWORD = "нууц үг", MASTER_LOG_FILE = "mysql-bin.000016", MASPOS5;_1;
Replica-1 нь мастерийг гүйцэж ирсний дараа тэдгээрийн мэдээллийн сангийн агуулга ижил байх болно. Та өгөгдлийн санг ижил төстэй аргаар эсвэл хуулбар-1-ийг бүрэн хаях замаар хуулбар-2 дээр нэгтгэж болно.

Castling мастер ба хуулбар

Мастерийн бүтэлгүйтэл эсвэл үйлдлийг гүйцэтгэх үед хуулбарыг мастер горимд шилжүүлэх шаардлагатай байж болно. техникийн ажил. Ийм шилжүүлэгчийг боломжтой болгохын тулд та хуулбарыг мастер шиг тохируулах эсвэл үүнийг хийх хэрэгтэй идэвхгүй мастер.

Хэсэг дэх тохиргоонд хоёртын бүртгэлийг (relay binlogs-ээс гадна) идэвхжүүлье:
log-bin = /var/lib/mysql/mysql-bin

Мөн хуулбарлах хэрэглэгчийг нэмнэ үү:
mysql@master> 'testdb'-д репликацийн боол олго.* TO 'replication'@'192.168.1.101' "нууц үгээр" ТАНИЛЦСАН;

Идэвхгүй мастер нь ердийн хуулбар шиг хуулбарлах ажлыг гүйцэтгэдэг, гэхдээ үүнээс гадна энэ нь хоёртын логикийг үүсгэдэг - өөрөөр хэлбэл бид түүнээс хуулбарлах ажлыг эхлүүлж болно. Үүнийг "мастер статусыг харуулах" командаар баталгаажуулъя:
mysql@replica> МАСТЕР БАЙДАЛ ҮЗҮҮЛЭХ\G
Файл: mysql-bin.000001
Албан тушаал: 61
Binlog_Do_DB:
Binlog_Ignore_DB:

Одоо идэвхгүй мастерийг идэвхтэй горимд шилжүүлэхийн тулд түүн дээрх хуулбарыг зогсоож, өмнөх идэвхтэй мастер дээр хуулбарлахыг идэвхжүүлэх хэрэгтэй. Шилжих үед өгөгдөл алдагдахгүй байхын тулд, идэвхтэй мастербичих түгжээтэй байх ёстой.
mysql@master> УНШИХ ТҮГЖЭЭТЭЙ ХҮСНЭГТҮҮДИЙГ УГААЖ АВНА
mysql@master> SET GLOBAL зөвхөн уншигдах = ON;
mysql@replica> SOP SLAVE;
mysql@replica> МАСТЕР БАЙДАЛ ҮЗҮҮЛЭХ;
Файл: mysql-bin.000001
Албан тушаал: 61
mysql@master> MASTER-Г MASTER_HOST болгон өөрчлөх = "192.168.1.102", MASTER_USER = "хуулбарлах", MASTER_PASSWORD = "нууц үг", MASTER_LOG_FILE = "mysql-bin.000001", MASTER_LOG_6;
mysql@master> эхлүүлэх боол;
Ингээд л бид идэвхтэй мастераа сольсон. Та хуучин мастераас блокыг устгаж болно.

Дүгнэлт

Бид MySQL дээр репликацийг хэрхэн тохируулах, зарим үндсэн үйлдлүүдийг гүйцэтгэх талаар бага зэрэг сурсан. Харамсалтай нь дараах чухал асуултууд энэ нийтлэлийн хамрах хүрээнээс гадуур хэвээр байна.

  • нэг алдаа дутагдлыг арилгах (SPF, Single Points of Failure). Цорын ганцыг ашиглах үед MySQL сервер, түүний бүтэлгүйтэл нь бүхэл системийн доголдолд хүргэсэн. Олон сервер ашиглах үед тэдгээрийн аль нэг нь ажиллахгүй бол бид үүнийг тусгайлан анхаарч үзэхгүй бол системийн доголдолд хүргэдэг. Мастер болон хуулбарын бүтэлгүйтэлтэй холбоотой нөхцөл байдлыг бид шийдвэрлэх шаардлагатай байна. Одоо байгаа хэрэгслүүдийн нэг нь MMM боловч файлын тусламжтайгаар өөрчлөх шаардлагатай.
  • ачааллыг тэнцвэржүүлэх. Олон хуулбарыг ашиглахдаа бид ил тод тэнцвэржүүлэх механизм ашиглахыг хүсч байна, ялангуяа хуулбарын гүйцэтгэл жигд бус байвал. Линукс дээр стандарт шийдэл болох LVS ашиглах боломжтой.
  • програмын логикийг өөрчлөх. Тохиромжтой нөхцөлд өгөгдлийг унших хүсэлтийг хуулбар руу илгээж, өгөгдлийг өөрчлөх хүсэлтийг мастер руу илгээх ёстой. Гэсэн хэдий ч хуулбарын хоцрогдолтой тул ийм схем нь ихэвчлэн үр дүнгүй байдаг тул мастер дээр гүйцэтгэх шаардлагатай хэвээр байгаа унших хүсэлтийг тодорхойлох шаардлагатай байдаг.
Цаашдын нийтлэлүүддээ эдгээр асуудлыг тусгана гэж найдаж байна.
Анхаарал тавьсанд баярлалаа!

Шошго:

  • mysql
  • хуулбарлах
Шошго нэмэх

Саяхан надаас энэ тухай ярихыг хүссэн MySQL дээр хуулбарлах. Энэ сэдэв нь олон хүнд ашигтай байх болно гэж би шийдсэн тул энэ нийтлэлд би ярих болно MySQL дээр хуулбарлах гэж юу вэ, хэзээ хэрэгтэй вэ, хэрхэн тохируулах талаар.

Хуулбарлах гол ажил бол хэд хэдэн серверийн хүчийг нэгтгэх. Таны вэбсайт тусгай сервертэй гэж бодъё, гэхдээ цаг хугацаа өнгөрөх тусам энэ нь маш их зочилдог болж, ачааллыг даахаа больсон. Үүний үр дүнд сервер удааширч, байнга гацаж эхэлдэг. Хамгийн хялбар арга бол илүү хүчирхэг сервер худалдаж авах бөгөөд ихэнх хүмүүс үүнийг хийдэг. Гэхдээ эрт орой хэзээ нэгэн цагт серверийн үнийг өсгөх зардал нь түүний гүйцэтгэлийн өсөлттэй тохирохгүй байх цаг ирдэг тул худалдаж авах нь илүү ашигтай байдаг. 2 өөр өөр серверүүдбага мөнгөний төлөө.

Үүний үр дүнд таны мэдээллийн сан нэг дор хоёр сервер дээр байх болно. Нэг үндсэн сервер (толгой сервер) цаашид даван туулах боломжгүй болсон үед энэ нь нөөц сервер рүү шилждэг.

Бүгд Өгөгдлийн сангийн шинэчлэлтийн хүсэлтүүд үргэлж толгой серверт очдог. Толгой серверийг шинэчилсний дараа энэ тухай мэдээллийг байрлуулна тусдаа файл, боол серверүүд бүх мэдээллийг хаанаас авдаг. Гэхдээ түүвэрлэлтийн үйлдлүүд нь ихэвчлэн ихэнх бөгөөд хамгийн удаан байдаг бөгөөд өгөгдөл нь хоёуланд нь ижил байдаг тул аль хэдийн боол сервер рүү шилжүүлж болно.

Одоо үүнийг олж мэдье MySQL дээр хуулбарыг хэрхэн тохируулах талаар:

  1. Хамгийн их суулгана уу MySQL-ийн хамгийн сүүлийн хувилбаруудбүх серверүүд рүү.
  2. Үндсэн сервер дээр давуу эрхтэй хэрэглэгч үүсгэнэ үү Боолыг солих. Холбогдох хаягийн хувьд " гэж зааж өгнө үү. Бүгд".
  3. Бүх серверүүдийг зогсоо.
  4. Тохиргоонд MySQL(файл дотор my.cnf) бүлэгт дараах мөрүүдийг нэмнэ: log-bin
    server-id=1 Үүнийг анхаарна уу сервер IDбүх сервер дээр өөр байх ёстой. Үнэн хэрэгтээ энэ нь нэг серверийг нөгөө серверээс ялгадаг зүйл юм.
  5. Боол сервер дээр тохиргоонд нэмнэ үү MySQLдараах мөрүүд: master-host=master_host_name
    мастер-хэрэглэгч= үүсгэсэн_хэрэглэгчийн нэвтрэх
    мастер-нууц үг= үүсгэсэн_хэрэглэгчийн нууц үг
    мастер-порт=мастер_серверт_холбох_порт
    server-id=энэ_боол_серверийн_id
  6. Бүх суурийг хөдөлгөтолгой серверээс боол хүртэл.
  7. Гүйтолгой сервер, дараа нь бүх боолууд.