Итак, для разнесения нагрузки на базу данных MySQL нам нужно настроить репликацию. В данном случае master - сервер, который будет работать как обычно и данные в него будут как записываться, так и читаться, а slave - это своеобразное зеркало, откуда можно только читать, но не писать. Его можно будет оптимизировать для чтения для быстрого выполнения бэкапов или для быстрого заполнения сайтов. Итак:
Настраиваем master сервер
Напоминаю, что на этот сервер можно читать и писать. Он наш фронт и именно его мы хотим разгрузить от больших объёмов чтений во время генерации аналитических данных, создания страниц или просто создания резервных копий.
Включаем сеть. Для этого в настройках смотрим на эти 2 строчки
1 2 |
|
Если такие есть, закомментируйте их. Нам нужна возможность обращаться к этому серверу по сети другим сервером.
Теперь включаем логирование запросов. Если возможность есть, записывайте их на виртуальный диск в памяти. И скорость выше и меньше дергать жёсткие диски (если база сильно нагружена, значит дискам тоже, вполне вероятно, не до отдыха). Смотрим в конфиг и добавляем это:
1 2 3 |
|
Если добавили, перегружаем базу
1
|
|
И проверяем, в сети ли наша база
1
|
|
Должны увидеть что-то типа
1
|
|
Теперь зайдём в базу и создадим пользователя для репликации. Вполне правильно, не рутом же реплицировать данные, руту вообще удалённый доступ нужно запретить. Заходим:
1
|
|
вводим пароль root для MySQL (не системный root)
1
|
|
Итак, у нас появляется что-то типа
1
|
|
что значит, что мы в консоли базы данных. Создаём пользователя для репликации
1 2 |
|
Теперь проверяем, идёт ли логирование:
1 2 3 |
|
Должны увидеть что-то такое
1 2 3 4 5 6 |
|
Выходим. Далее нам нужно сделать дамп этой базы для второго сервера. (Нет, второй не подтянет всё с нуля, базу ему надо будет залить всё-таки)
1
|
|
Копируем файл по SSH на второй сервер
1
|
|
Всё, теперь мы переходим на второй сервер…
Настройка второго сервера MySQL для репликации данных (slave)
Заходим
1 2 3 4 |
|
Теперь заливаем тот дамп, который мы копировали недавно по SSH
1
|
|
Разумеется, система запросит пароль и подлив пройдёт. Далее нам нужно в настройках сервера MySQL (slave), где вообще есть master и как к нему обратится. Редактируем настройки:
1 2 3 4 5 6 7 |
|
Перегружаем сервер:
1
|
|
Теперь мы можем зайти и попробовать подлить данные с основного сайта, заодно проверив, пройдёт ли это и, если да, появятся ли новые данные. Заходим в консоль MySQL
1 2 3 4 |
|
Проверяя данные через консоль или с помощью phpmyadmin, workbench и т.д., мы должны будем увидеть новые данные по мере поступления их на master сервер. Теперь, например, мы можем делать резервные копии баз данных без нагрузки основной. К тому же slave легко переписать в master, если вдруг с основным сервером что-то случилось.