Репликация в MySQL

Александър Керемидарски

Конференция на Linux-bg

20.02.2005

© MySQL AB 2005

Какво представлява MySQL?

MySQL е:

Система за Управление на Бази Данни (СУБД)

Използва SQL – структуриран език за заявки

Свободен софтуер – лицензиран под GPL

Най-популярната СУБД със свободен лиценз

Над 5 милиона инсталирани MySQL сървъри по света

MySQL AB – фирмата основана от авторите на MySQL

Теми

Какво е Репликацията в MySQL?

И какво не е

За какво може да се използва?

Въпроси.

Каква Е Репликацията и каква НЕ Е?

Логическа

Еднопосочна

Асинхронна

Един Master към много Slave сървъри

Позволява

Верижно свързване

Дървовидно свързване

Кръгово свързване

Не е двоична

Не е равнопоставена

Не е синхронна

Не позволява репликиране от повече от един Master (засега)

Не е стандартна

Репликацията != Клъстер!

Виновниците

Sasha Pachev

Guilhem Bichot

Lars Berger

Логическа Репликация

Повтаря SQL оператори

Slave сървърът повтаря всички SQL оператори променящи данните в същият ред както на Master сървъра

Голямо бързодействие

Намалява мрежовия трафик

Не гарантира съответствие на данните.

Няма механизъм, който да гарантира и дори да провери дали данните са еднакви на двата сървъра

Еднопосочна и Асинхронна

Еднопосочна

Slave сървърът приема промените от Master

Master сървърът не знае нищо за Slave сървърите (освен, че съществуват)

Асинхронна

Работи когато има връзка. Не е необходимо сървърите да са свързани постоянно.

Не е необходима бърза и дори надеждна връзка между сървърите.

Няма значение дали сървърите са на еднаква платформа или не

Няма никакво забавяне върху работата на Master сървъра.

“Единствен Master ги владее”
Един Master – много Slave сървъри

Много сървъри могат да се свържат към един

M

S

S

M

M

S

Всеки Slave сървър може да се свърже към един и само един Master

т.нар. Multi-Master Репликация е планирана за 5.1

Верижки и дръвчета

Всеки Slave сървър може да бъде Master за друг Slave сървър

M

S

S

S

S

S

S

Кръгчета

Колизиите се избягват чрез server-id (не всички)

Безпроблемно ако всеки сървър променя само “негови си” таблици.

Двупосочната репликация като частен случай на кръговата всъщност е Еднопосочна :)

2

3

4

5

1

A

B

Използване на Репликацията

“Горещо” резервиране на данни

От Slave сървъра могат да се правят резервни копия без това да се отразява на работата на Master

Резервен Slave в готовност (standby)

Разпределяне на натоварването

Master оптимизиран за INSERT оператори

Slave оптимизиран за SELECT заявки

Един Master изпълняващ всички промени и много Slave сървъри изпълняващи SELECT зявки

Комбинации.

A

B

S

Настройване на Репликация

Осигурете някаква TCP/IP връзка между сървърите.

Каква да е връзка!

Копирайте данните от единия сървър (Master) върху другия (Slave)

Създайте портебител със съответните привилегии

Включете двоичния журнал на Master-а

Изберете различни идентификатори на двата сървъра (server-id)

CHANGE MASTER TO ...

SLAVE START

Команди за управление на Репликацията

START SLAVE

STOP SLAVE

CHANGE MASTER TO

SHOW MASTER | SLAVE STATUS

RESET MASTER | SLAVE

Опции на mysqld свързани с Репликацията 1/2

log-slave-updates

log-warnings

master-connect-retry=seconds

master-host=host

master-info-file=file_name

master-password=password

master-port=port_number

master-ssl

master-ssl-ca=file_name

master-ssl-capath=directory_name

master-ssl-cert=file_name

master-ssl-cipher=cipher_list

master-ssl-key=file_name

master-user=username

max-relay-log-size=#

read-only

relay-log=file_name

relay-log-index=file_name

relay-log-info-file=file_name

relay-log-purge={0|1}

relay-log-space-limit=#

replicate-do-db=db_name

replicate-do-table=db_name.tbl_name

replicate-ignore-db=db_name

replicate-ignore-table=db_name.tbl_name

Опции на mysqld свързани с Репликацията 2/2

replicate-wild-do-table=db_name.tbl_name

replicate-wild-ignore-table=db_name.tbl_name

replicate-rewrite-db=from_name->to_name

replicate-same-server-id

report-host=host

report-port=port_number

skip-slave-start

slave-load-tmpdir=file_name

slave-net-timeout=seconds

slave-skip-errors= [err_code1,err_code2,... | all]

Благодаря за вниманието

Въпроси?

Предложения?

Идеи?

http://dev.mysql.com	http://mysql.online.bg

http://www.mysql.com

Не на Софтуерните Патенти

http://www.nosoftwarepatents.com/en/m/about/contact.html

2004-03-03T11:32:20