Q&A по Базах Даних (databases)

Бази даних

( * Відповідь на питання розгорніть за допомого трикутного значка |> )

  • Як налаштувати master-slave реплікацію в mysql (коротко)?

Відповідь

Необхідні 2 сервери: master та slave.

  • На обох сервера встановлюємо сервер MySQL однакової версії.
  • Вмикаємо сервер бази даних на обох серверах.
  • Налаштовуємо master – в /etc/my.cnf встановлюємо наступні значення:

# вибираємо ID сервера, довільне число, краще починати з 1
server-id = 1
# шлях до бінарного логу
log_bin = /var/log/mysql/mysql-bin.log
# назва Вашої бази даних, яка буде реплікуватися
binlog_do_db = newdatabase

Перезапускаємо сервер бази даних.

  • Підключаємося до master сервера, створюємо користувача і призначаємо йому права для виконання реплікації.

mysql -u root -p <пароль root сервера БД>
GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

  • На master сервері робимо дамп бази даних з блокуванням таблиць.

mysqldump -u root -p --lock-all-tables newdatabase > newdatabase.sql

  • Переносимо дамп бази на slave сервер, створюємо базу даних з таким же іменем і імпортуємо базу.

CREATE DATABASE newdatabase;
mysql -u root -p newdatabase < newdatabase.sql

  • Налаштовуємо slave в /etc/my.cnf:

# ID Слейва, зручно вибирати наступним числом після Мастера
server-id = 2
# Шлях до relay логу
relay-log = /var/log/mysql/mysql-relay-bin.log
# Шлях до bin логу на Мастері
log_bin = /var/log/mysql/mysql-bin.log
# База даних для реплікації
binlog_do_db = newdatabase

Перезапускаємо сервер бази даних.

  • Запускаємо реплікацію на slave сервері.

CHANGE MASTER TO MASTER_HOST='10.10.0.1', MASTER_USER='slave_user', MASTER_PASSWORD='password',
MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 107;
##Вказані значення ми беремо з налаштувань Мастера
Після цього запускаємо реплікацію на Слейві:
START SLAVE;

  • Перевіряємо статус реплікації:

SHOW SLAVE STATUSG

  • Який тип бази даних використовує Prometheus?

Відповідь

Prometheus використовує TSDB (time series database).

  • Що таке VACUUM в PostgreSQL?

Відповідь

VACUUM вивільняє простір, що займається «мертвими» кортежами. При звичайних операціях PostgreSQL кортежі, видалені або застарілі в результаті оновлення, фізично не видаляються з таблиці; вони зберігаються в ній, поки не буде виконана команда VACUUM. Таким чином, періодично необхідно виконувати VACUUM, особливо для часто змінюваних таблиць.

Без параметра команда VACUUM обробляє всі таблиці в поточній базі даних, які може очистити поточний користувач. Якщо в параметрі передається ім’я таблиці, VACUUM обробляє тільки цю таблицю.

Проста команда VACUUM (без FULL) тільки вивільняє простір і робить його доступним для повторного використання. Ця форма команди може працювати паралельно з звичайними операціями читання і запису таблиці, так вона не вимагає виключного блокування. Однак звільнений простір не повертається операційній системі (в більшості випадків); він просто залишається доступним для розміщення даних цієї ж таблиці. VACUUM FULL переписує весь вміст таблиці в новий файл на диску, що не містить нічого зайвого, що дозволяє повернути невикористаний простір операційній системі. Ця форма працює набагато повільніше і запитує виключне блокування для кожної оброблюваної таблиці.