The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Раздел полезных советов: Синхронизация файлов и содержимого ..."
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Синхронизация файлов и содержимого ..."  +/
Сообщение от auto_tips (??) on 18-Июн-08, 16:20 
Есть два сервера под Linux/FreeBSD: СУБД MySQL + некое приложение,
задача - синхронизировать БД и данные.

За синхронизацию данных MySQL отвечает mysql replication, данные синхронизируются с мастера на слейв.

Делаем на мастере:

в my.cnf добавляем строки

   log-bin = /var/log/mysql/mysql-bin.log
   binlog-do-db=databasename
   server-id=1

перезагружаем MySQL, добавляем пользователя для репликации:

   GRANT ALL PRIVILEGES ON databasename.* TO 'slave_user'@'%' IDENTIFIED BY 'slave_password';
   FLUSH PRIVILEGES;

далее выполняем команду:

   USE databasename;
   FLUSH TABLES WITH READ LOCK;
   SHOW MASTER STATUS;

и вывод этой команды для нас важен, надо его куда-нибудь записать:

   | File | Position | Binlog_do_db | Binlog_ignore_db |
   | mysql-bin.001 | 10 | databasename | |

теперь делаем дамп базы:

   mysqldump -u slave_user -pslave_password --opt databasename > databasename.dump

и наконец убираем лок с базы в MySQL:

   UNLOCK TABLES;


Теперь на слейве:

Создаём базу:

   mysqladmin create databasename -p

Востанавливаем базу из дампа:

   mysql -u slave_user -pslave_password databasename < databasename.dump

в my.cnf добавляем строки:

   server-id=2
   master-host=XX.XX.XX.XX # IP адрес мастер-сервера
   master-user=slave_user
   master-password=slave_password
   master-connect-retry=60
   replicate-do-db=databasename

перегружаем MySQL и добавляем чудесные данные из волшебной комманды:

   SLAVE STOP;
   CHANGE MASTER TO MASTER_HOST='XX.XX.XX.XX',
     MASTER_USER='slave_user', MASTER_PASSWORD='slave_password',
     MASTER_LOG_FILE='mysql-bin.001', MASTER_LOG_POS=10;
   START SLAVE;

готово, теперь проверяем, добавляем запись в мастер, на слейве она должны отреплицироваться.

Понятно, что изменять данные можно только на мастере, слейв работает только на чтение.


Для синхронизации данных имеет смысл использовать rsync, очень интересный протокол/приложение.
Может синхронизировать инкрементально и с сжатием.
На мастер сервере в rsyncd.conf добавляем:

   read only = yes # во избежание ;-)
   hosts allow = YY.YY.YY.YY # IP адрес слэйв-сервера
   [somelabel]
   path = /path/to/apllication/folder # где лежит приложение
   auth users = replica_user # юзер только для репликации в rsync, не системный пользователь
   secrets file = /path/to/rsync/rsync.secret # где лежит файл с паролем для replica_user,
                                              # только пароль и ничего больше

на слейве - команда для синхронизации, можно добавить в cron с нужной периодичностью:

   /path/to/rsync -avz --exclude-from=/path/to/rsync.exclude \
     --password-file /path/to/rsync.secret \
     rsync://replica_user@XX.XX.XX.XX:873/somelabel /path/to/application

где:
rsync.exclude - файл в котором перечислены, какие файлы (конкретно или по маске) не синхронизировать
rsync.secret - файл с секретным паролем для replica_user
ХХ.ХХ.ХХ.ХХ - IP мастер-сервера, 873 - дефолтный порт для демона
somelabel - метка из rsyncd.conf с мастера
/path/to/application - путь куда класть данные.


URL: http://neiro.osportal.ru/index.php/2008/06/16/%D1%.../
Обсуждается: http://www.opennet.dev/tips/info/1696.shtml

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Синхронизация файлов и содержимого БД MySQL на резервный сервер"  +/
Сообщение от PavelR (??) on 18-Июн-08, 16:20 
А еще есть LVM со своими снапшотами, и есть специальная тулза которая делает копирование файлов БД с использованием этого механизма.
(сдеали LOCK, сделали FLUSH, создали снэпшот, разлочили БД, копируем файло, отключаем снэпшот)
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Синхронизация файлов и содержимого БД MySQL на резервный сер..."  +/
Сообщение от neiro email(ok) on 18-Июн-08, 20:12 
синхронизация БД для вэб-приложения нужна near real-time
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Синхронизация файлов и содержимого БД MySQL на резервный сер..."  +/
Сообщение от Аноним (??) on 20-Июн-08, 22:57 
Ты не понял, когда тебе нужно будет делать пересинхронизацию БД весом 100 Gb ты поймешь зачем тебе нужен LVM.
Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Синхронизация файлов и содержимого БД MySQL на резервный сер..."  +/
Сообщение от Аноним (??) on 22-Июн-08, 22:48 
>синхронизация БД для вэб-приложения нужна near real-time
>Ты не понял, когда тебе нужно будет делать пересинхронизацию БД весом 100
>Gb ты поймешь зачем тебе нужен LVM.

Угу, поддерживаю предыдущего оратора :), LVM рулит, когда реплика отвалится и ты будешь ее чинить.
А вообще несколько уточнений:

>GRANT ALL PRIVILEGES ON databasename.* TO 'slave_user'@'%' IDENTIFIED BY 'slave_password';

GRANT ALL PRIVILEGES ON ... - это перебор, достаточно GRANT REPLICATION SLAVE ON ...

>   FLUSH PRIVILEGES;

FLUSH тут необязателен, он нужен только когда напрямую (INSERT, DELETE, UPDATE) меняются таблицы из базы mysql

>[оверквотинг удален]
>   master-user=slave_user
>   master-password=slave_password
>   master-connect-retry=60
>   replicate-do-db=databasename
>перегружаем MySQL и добавляем чудесные данные из волшебной комманды:
>   SLAVE STOP;
>   CHANGE MASTER TO MASTER_HOST='XX.XX.XX.XX',
>     MASTER_USER='slave_user', MASTER_PASSWORD='slave_password',
>     MASTER_LOG_FILE='mysql-bin.001', MASTER_LOG_POS=10;
>   START SLAVE;

Это стремный вариант. После старта мускуля он УЖЕ будет слэйвом, только с неправильными MASTER_LOG_FILE, MASTER_LOG_POS, лучше стратовать его БЕЗ строк в инишнике master-user=..., master-password=...., а добавить их туда потом, после старта (на случай последующих рестартов).

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

5. "Синхронизация файлов и содержимого БД MySQL на резервный сер..."  +/
Сообщение от peering email(ok) on 05-Сен-12, 09:45 
А данная схема получается не подходит для web-серверов ?  Если вы этим занимались можно подробнее, где грабли искать ??? И чем лучше данные синхронить пока только rsync нарыл ???
Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру