SlideShare a Scribd company logo
MySQL репликация
Serge Tyatin Full-stack web developer
Что такое репликация и
зачем она нужна
Репликация
Как могла бы быть устроена ?
Устройство Mysql репликации
Master -> Slave
• MASTER запиcывает изменения в “binary-log” 

• SLAVE подключается к MASTER как клиент 

• SLAVE скачивает “binary-log” в “replication-log” 

• SLAVE последовательно выполняет
изменения из “replication-log”
MASTER запиcывает изменения в
“binary-log”
http://mysql.2rba.com:1715
> show master statusG
binlog_format
• STATEMENT
• ROW
• MIXED
Prior to MySQL 5.7.7, statement-based
logging format was the default. In
MySQL 5.7.7 and later, row-based
logging format is the default.
mysqlbinlog
$ cd /var/log/mysql
$ mysqlbinlog mysql-bin.000004
Настройка Репликации
CHANGE MASTER TO MASTER_HOST='localhost',
MASTER_USER='root', MASTER_PASSWORD='q12345'
MASTER my.cnf
server_id = 1
SLAVE my.cnf
server_id = 2
log_bin = /var/log/mysql/mysql-bin.log
show slave statusG
SLAVE START;
SLAVE подключается к MASTER как
клиент
master> show processlist;
slave> show processlist;
Проблемы
• Два лога транзакций на мастере
• Остановка репликации
• проблема в логе
• проблема в отличии структур или данных
Как починить SLAVE
Исправить данные на SLAVE и
запустить SLAVE
slave start;
SET GLOBAL
sql_slave_skip_counter = 1;
Особенности
• Настройка баз/таблиц для записи в binary_log
• Настройка баз/таблиц для чтения из replication_log
• Ключи/формат/тип могут не совпадать
Пример настройки
репликации
Таблица
Пример настройки
репликации
Таблица Облегченная Таблица
Пример настройки репликации
CREATE TRIGGER `table_insert` AFTER INSERT ON table
FOR EACH ROW BEGIN
if (‘active’=NEW.status) THEN
INSERT INTO table Set id = NEW.id, …. END IF;
END;
CREATE TRIGGER `table_delete` AFTER DELETE ON table
FOR EACH ROW BEGIN
DELETE FROM table where id=OLD.id;
END;
CREATE TRIGGER `table_update` AFTER UPDATE ON table
FOR EACH ROW BEGIN
if (‘active’=NEW.status) THEN
UPDATE table SET status=NEW.status, … WHERE id = NEW.id;
ELSE
DELETE FROM table where id=NEW.id;
END IF;
END;
Использование истории транзакций
• backup
• audit
• troubleshooting
Поиск ошибки
В базе появилась ошибка
Необходимо выяснить как была создана запись
в таблице payments с id=92346
bin-log файлы находятся в /log
Source
class Promo < ActiveRecord::Base

belongs_to :payment



def self.redeem(code)

transaction do

promo = where(code: code, is_used: false).first

if promo

promo.payment = Payment.create(amount: promo.amount)

promo.is_used = true

promo.save!

end

end

end

end

class Promo < ActiveRecord::Base

belongs_to :payment



def self.redeem(code)

transaction do

promo = where(code: code, is_used: false).first

if promo

promo.payment = Payment.create(amount: promo.amount)

promo.is_used = true

promo.save!

end

end

end

end
INSERT INTO `payments` (`amount`, `created_at`, `updated_at`) VALUES (12, '2016-02-11
21:12:56', '2016-02-11 21:12:56’)
UPDATE `promos` SET `payment_id` = 92346, `is_used` = 1, `updated_at` = '2016-02-11
21:12:56' WHERE `promos`.`id` = 16460
INSERT INTO `payments` (`amount`, `created_at`, `updated_at`) VALUES (12, '2016-02-11
21:12:56', '2016-02-11 21:12:56’)
UPDATE `promos` SET `payment_id` = 92347, `is_used` = 1, `updated_at` = '2016-02-11
21:12:56' WHERE `promos`.`id` = 16460
Решение
• Optimistic Locking
• field lock_version
• Pessimistic Locking
promo = where(code: code, is_used: false).lock(true).first
promo.lock!

if promo && !promo.is_used
Спасибо
Serge Tyatin
700@2rba.com
skype: tyatin

More Related Content

PDF
MySQL replication from setup to advanced features. Hidden MySQL replication o...
PDF
Почему Mojolicious?
PPT
Top 10 problems supporting Magento customers
PDF
Erlang tasty & useful stuff
KEY
Batch processing in rails
KEY
Sequel — механизм доступа к БД, написанный на Ruby
PDF
Psgi app
MySQL replication from setup to advanced features. Hidden MySQL replication o...
Почему Mojolicious?
Top 10 problems supporting Magento customers
Erlang tasty & useful stuff
Batch processing in rails
Sequel — механизм доступа к БД, написанный на Ruby
Psgi app

What's hot (20)

PPT
Загрузка, обработка, хранение и отдача статики
PDF
#13 "Управление состоянием в Redux" Роман Сальников
PDF
09 - Web-технологии. MVC фреймворки
PDF
10 - Web-технологии. MVC фреймворки (продолжение)
PPTX
What’s New in PHP7?
PPT
PPTX
Коротко о React.js
PDF
Суперсилы Chrome developer tools
PDF
Алексей Плеханов: 25 причин попробовать Laravel
PDF
Примеры решения типичных задач за рамками ядра Yii2
PDF
11 - Web-технологии. Работа с СУБД
PDF
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
PDF
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
PDF
YiiConf: Миграции и инсталляции
PPTX
работа сайта
PDF
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
PDF
Фреймворк-невиидмка
PDF
Behat в PHP с использованием Behat и Mink
PDF
Технические аспекты знакоства с девушкой в Интернете
PPT
Общая архитектура Yii2
Загрузка, обработка, хранение и отдача статики
#13 "Управление состоянием в Redux" Роман Сальников
09 - Web-технологии. MVC фреймворки
10 - Web-технологии. MVC фреймворки (продолжение)
What’s New in PHP7?
Коротко о React.js
Суперсилы Chrome developer tools
Алексей Плеханов: 25 причин попробовать Laravel
Примеры решения типичных задач за рамками ядра Yii2
11 - Web-технологии. Работа с СУБД
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
YiiConf: Миграции и инсталляции
работа сайта
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
Фреймворк-невиидмка
Behat в PHP с использованием Behat и Mink
Технические аспекты знакоства с девушкой в Интернете
Общая архитектура Yii2
Ad

Similar to Mysql replication (19)

PDF
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
PDF
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
PPTX
СУБД осень 2012 лекция 5
PPTX
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
PDF
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
PDF
Эффективная отладка репликации MySQL
PDF
Эволюция репликации в MySQL и MariaDB
PPT
раскрываем магию My sql или о строгости и мягкости mysql
PPTX
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
PPTX
СУБД 2013 Лекция №9 "Безопасность баз данных"
PDF
Что нужно знать о трёх топовых фичах MySQL
PDF
Эффективная отладка репликации MySQL
PDF
Aleksey Mashanov Rit
PDF
Aleksey Mashanov Rit
PPTX
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
DOCX
бд шпора2
DOC
0044
PPTX
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
PPT
Rose::DB
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
СУБД осень 2012 лекция 5
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL
Эволюция репликации в MySQL и MariaDB
раскрываем магию My sql или о строгости и мягкости mysql
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
СУБД 2013 Лекция №9 "Безопасность баз данных"
Что нужно знать о трёх топовых фичах MySQL
Эффективная отладка репликации MySQL
Aleksey Mashanov Rit
Aleksey Mashanov Rit
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
бд шпора2
0044
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
Rose::DB
Ad

Mysql replication