Advertisement
Guest User

Untitled

a guest
Jun 17th, 2019
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.50 KB | None | 0 0
  1. Если данных в указанной таблице немного, то гораздо удобнее будет копировать таблицу целиком,
  2. нежели проверять какие данные изменились и после их отдельно копировать в другую таблицу.
  3. SQL Запрос будет выглядеть следующим образомЖ
  4.  
  5. INSERT INTO Doctors_copy
  6. SELECT *
  7. FROM Doctors;
  8.  
  9. Либо копировать по столбцам:
  10.  
  11. INSERT INTO Doctors_copy (`a1_2`, `a2_2`, `a3_2`, `a4_2`)
  12. SELECT `a1`, `a2`, `a3`, `a4`
  13. FROM Doctors;
  14.  
  15. Но на мой взгляд правильнее будет создать реплику базы Doctors.
  16. Внутри, при репликации, запросы, которые изменяют данные, направляются на основной сервер, там копируются и направляются на реплики
  17. и там повторяются.
  18. Создание реплики позволит держать обе базы (Doctors and Doctors_copy) в актуальном,
  19. синхронизированном виде, а также позволит решить такие проблемы как:
  20. Масштабируемость:
  21. Один сервер может не справляться с нагрузкой, вызываемой одновременными операциями чтения и записи в БД.
  22. Выгода от создания реплик будет тем больше, чем больше операций чтения приходится на одну операцию записи.
  23. Отказоустойчивость:
  24. В случае отказа реплики, все запросы чтения можно безопасно перевести на мастера.
  25. Если откажет мастер, запросы записи можно перевести на реплику.
  26. Резервирование данных:
  27. Реплику можно «тормознуть » на время, чтобы выполнить dump, а мастер — нет.
  28. Отложенные вычисления:
  29. Тяжелые и медленные SQL-запросы можно выполнять на отдельной реплике,
  30. не боясь помешать нормальной работе всей системы.
  31. При этом изменяющие данные запросы адресуем master-серверу, а запросы на чтение к slave-серверу,
  32. при увеличении нагрузки на чтение можно создать несколько slave-серверов и распределить между ними нагрузку.
  33.  
  34. Из баз данных я бы выбрал или MySQL или PostgreSQL, обе базы поддерживают возможности репликации.
  35. В качестве ОС использовал бы Linux Ubuntu, Red Hat, Debian
  36. которые используются на большинстве серверов и отлично себя зарекомендовали бесперебойной работой.
  37.  
  38. Далее будет приведен примерный список команд для установки и настройки PostgreSQL для работы master-slave:
  39.  
  40. Для начала установим PostgreSQL на две машины:
  41. $ sudo apt install postgresql-9.6
  42.  
  43. Запускаем его и добавляем в автозагрузку:
  44. $ systemctl start postgresql-9.6
  45. $ systemctl enable postgresql-9.6
  46.  
  47. Авторизуемся под пользователем:
  48. $ sudo su - postgres
  49. Входим в psql:
  50. $ psql
  51. Задаем пароль:
  52. $ \password postgres
  53.  
  54. Разрешаем компьютерам общаться:
  55. $ sudo ufw allow postgresql/tcp
  56. $sudo ufw allow 5432/tcp
  57. $ sudo ufw allow 5433/tcp
  58.  
  59. Далее настраиваем отдельно мастер и отдельно slave:
  60. Для настройки master-сервера:
  61. Изменяем содержимое файла postgresql.conf в папке /etc/postgresql/9.6/main/ - устанавливаем нужные настройки, адреса серверов и т.д.
  62.  
  63. Для настройки slave-сервера:
  64. Останавливаем работу slave-сервера, далее копируем данные с master-сервера.
  65. После этого меняем настройки /etc/postgresql/9.6/main/postgresql.conf.
  66. И снова запускаем службу.
  67. На этом настройка закончена. Тестируем все ли работает верно, если нет разбираемся и исправляем.
  68. Если все верно, наслаждаемся)
  69.  
  70.  
  71. При асинхронной репликации данные на slave-сервере могут появится с небольшой задержкой.
  72. Поэтому, в последовательных операциях необходимо использовать чтение с master-сервера, чтобы получить актуальные данные.
  73. При синхронной репликации запрос исполняется на master-сервере, затем пересылается на slave-сервер,
  74. которые в свою очередь уже отвечает на поступивший запрос. Таким образов обе базы в актуальном состоянии.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement