Рубрики
Uncategorized

Репликация MySQL над SSH

Ниже приведено быстрое и грязное решение для сохранения базы данных, синхронизированной с помощью основной копии Over SSH, которая … Tagged с MySQL, DEVOPS, Docker.

Ниже приведено быстрое и грязное решение для сохранения базы данных, синхронизированной с помощью главной копии OVS, что вы можете настроить за 30 минут на существующие базы данных.

Это гораздо более легкая установка (но неуверенность), чем Правильная репликация MySQL в реальном времени Один Отказ Кроме того, у вас есть полный контроль над синхронизацией синхронизации, поскольку вы можете использовать Cronjob для инициирования процесса синхронизации.

Ниже MySQL и mysqldump Команды оптимизированы, чтобы работать с экземплярами MySQL, работающим внутри контейнера Docker.

Создать файл с именем make-snapshots.sh С подведением ниже контента на вашем главном сервере, а затем сделать его исполняемым с помощью chmod + x ./make-snapshots.sh Отказ

#!/bin/bash
export MYSQL_PWD=PasswordMaster1
# Read the last snapshotted ID
source last_tablename_id
# Remove the old snapshot
rm dump_tablename.sql
# Write snapshot
mysqldump --protocol=TCP --ssl-mode=DISABLED -u username -t --where "id > $LAST_TABLENAME_ID" dbname tablename > dump_tablename.sql
# Remove the last snapshot
rm last_tablename_id
# Extract and write last ID
echo "export LAST_TABLENAME_ID=`grep -oP "\),\((\d+)" dump_tablename.sql | tac | head -1 | cut -b 4-`" > last_tablename_id

Перед запуском вашего первого моментального снимка Создать last_tablename_id С ниже:

export LAST_TABLENAME_ID=0

Это гарантирует, что первый снимок будет содержать все существующие данные, то есть как mysqldump SQL будет равен КУДА ID> 0 Отказ

Как работает битовая снимка

Благодаря --Дж Параметр передан на mysqldump который говорит о резервном копировании всех рядов в таблице, отвечающую критериям.

После каждого mysqldump Резервное копирование Наш сценарий проверяет, какой был последний экспортированный идентификатор из таблицы, который затем сохраняется в last_tablename_id файл. Каждая последующая прогона будет прочитать этот номер и включать только строки, которые еще не были экспортированы.

GreeP -OP "\), \ ((\ d +) ищут вхождения ), (123 строка внутри дампа. Тогда TAC Является ли изменение вывода GreeP, голова -1 принимает только первую строку и вырезать Удаление запуска ), ( персонажи, оставляющие количество первого столбца ( который предполагается, что IDПервичный ключ ).

Крепко

Добавьте ежедневное создание монимка в 2:00 на работу Crontab -e и добавление подряд ниже в вашем Crontab.

0 2 * * * cd ~/master && ./make-snapshots.sh

На вашем рабском сервере, то есть тот, который вытащит новейшие данные из основной базы данных, создать файл с именем pull-snapshots.sh и сделать его исполняемым с помощью chmod + x Отказ

#!/bin/bash
export MYSQL_PWD=PasswordSlave1
# Remove last snapshot
rm dump_tablename.sql 
# Pull a snapshot from the master server
scp username@99.0.0.1:~/master/dump_tablename.sql .
mysql --protocol=TCP --ssl-mode=DISABLED -u username dbname < dump_tablename.sql

Для SCP Для запуска без запроса пароля вам нужно Настройка на основе ключей аутентификация между двумя серверами.

Крепко

Добавьте ниже строку в ваш Crontab, поэтому он работает через 30 минут, чем у магистра, например, e.g. в 2:30.

30 2 * * * cd ~/your/script/path && ./pull-snapshots.sh

Вуаля! Ваша база данных теперь синхронизируется с мастером!

  • Не полагайтесь на Греп Как будто не было никаких новых записей в базе данных, то last_tablename_id будет отсутствовать удостоверение личности, например Last_tablename_id = . Лучше полагаться на MySQL Запрос непосредственно перед запуском mysqldump Отказ
  • Создайте специальный пользователь в DB раб, который только для выполнения Вставить В вашей базе данных на случай, если ваш главный сервер скомпрометируется, и кто-то вводил вредный SQL в Дамп _ *. SQL файлы. Вы не хотите бегать Drop Database , так далее.
  • Проверьте наличие ошибок в MySQL Dump и не перезаписывайте last_tablename_id Файл, если произошла ошибка (чтобы сохранить последний успешный экспортированный ID)
  • Если вам нужно что-нибудь более, просто используйте надлежащая настройка репликации

Оригинал: «https://dev.to/limal/mysql-replication-over-ssh-3ak5»