Использование MySQL в качестве СУБД
DNSmanager по умолчанию использует в качестве СУБД (системы управления базами данных) SQLite. Эту СУБД удобно использовать при небольших объёмах данных и низких нагрузках, что характерно для DNSmanager. Однако, если в DNSmanager добавлено большое количество доменов и к нему поступает большое количество конкурентных запросов, рекомендуем использовать СУБД MySQL.
Алгоритм перехода с SQLite на MySQL
Алгоритм состоит из шагов:
Установите и запустите MySQL:
Для CentOS
yum install mariadb-server service mariadb start
BASHДля Debian
apt-get install mysql-server service mysqld start
BASHИзмените стандартное имя файла core:
mv /usr/local/mgr5/bin/core /usr/local/mgr5/bin/core2
CODEОстановите процесс core:
pkill core
CODEСоздайте в MySQL базу данных:
create database dnsmgr default character set utf8mb4;
BASHЗамените в конфигурационном файле DNSmanager (по умолчанию /usr/local/mgr5/etc/dnsmgr.conf) строку "DBType sqlite" на "DBType mysql".
- Также в конфигурационном файле укажите параметры подключения к базе данных:
- DBHost — адрес сервера с MySQL, на котором находится база данных. По умолчанию — "localhost";
- DBUser — пользователь базы данных. По умолчанию — "root";
- DBPassword — пароль пользователя базы данных, заданного параметром DBUser;
- DBName — имя базы данных. По умолчанию — "dnsmgr".
- Если нужно, перенесите данные из SQLite в MySQL:
Создайте дамп базы данных:
sqlite3 /usr/local/mgr5/etc/dnsmgr.db .dump > /root/dnsmgr.db.sqlite
BASHПояснения/root/dnsmgr.db.sqlite — файл, в который будет записан дамп.
Выполните замены в файле дампа:
replace "BEGIN TRANSACTION" "START TRANSACTION" -- /root/dnsmgr.db.sqlite replace "PRAGMA foreign_keys=OFF;" "SET NAMES utf8mb4;" -- /root/dnsmgr.db.sqlite replace "ON CONFLICT FAIL" "" -- /root/dnsmgr.db.sqlite replace "usage VARCHAR(64)" "\`usage\` VARCHAR(64)" -- /root/dnsmgr.db.sqlite replace "noauto VARCHAR(3)" "\`noauto\` VARCHAR(3)" -- /root/dnsmgr.db.sqlite replace "DEFAULT \`off\`" "DEFAULT 'off'" -- /root/dnsmgr.db.sqlite awk 'FS = "\"" {if($1=="INSERT INTO ") {print($1$2$3)} else {print}}' /root/dnsmgr.db.sqlite > /root/dnsmgr.db.mysql
BASHРазверните базу данных для MySQL из дампа:
mysql -uroot -p dnsmgr < /root/dnsmgr.db.mysql
BASHПояснения/root/dnsmgr.db.sqlite — файл дампа.
- Перезапустите DNSmanager. Если перенос данных из SQLite в MySQL не был выполнен, то DNSmanager запустится с чистой базой данных.
Верните файлу core стандартное имя:
mv /usr/local/mgr5/bin/core2 /usr/local/mgr5/bin/core
CODEПерезапустите процесс core:
pkill core
CODE
Скрипт конвертации
Для выполнения пунктов 2–10 алгоритма можно воспользоваться скриптом:
#!/bin/bash
mv /usr/local/mgr5/bin/core /usr/local/mgr5/bin/core2
pkill core
sqlite3 /usr/local/mgr5/etc/dnsmgr.db .dump > /root/dnsmgr.db.sqlite
replace "BEGIN TRANSACTION" "START TRANSACTION" -- /root/dnsmgr.db.sqlite
replace "PRAGMA foreign_keys=OFF;" "SET NAMES utf8mb4;" -- /root/dnsmgr.db.sqlite
replace "ON CONFLICT FAIL" "" -- /root/dnsmgr.db.sqlite
replace "usage VARCHAR(64)" "\`usage\` VARCHAR(64)" -- /root/dnsmgr.db.sqlite
replace "noauto VARCHAR(3)" "\`noauto\` VARCHAR(3)" -- /root/dnsmgr.db.sqlite
replace "DEFAULT \`off\`" "DEFAULT 'off'" -- /root/dnsmgr.db.sqlite
awk 'FS = "\"" {if($1=="INSERT INTO ") {print($1$2$3)} else {print}}' /root/dnsmgr.db.sqlite > /root/dnsmgr.db.mysql
mysql -e "create database dnsmgr default character set utf8mb4;"
mysql -uroot dnsmgr < /root/dnsmgr.db.mysql
grep -qE "DBType sqlite" /usr/local/mgr5/etc/dnsmgr.conf && replace "DBType sqlite" "DBType mysql" -- /usr/local/mgr5/etc/dnsmgr.conf
grep -qE "DBType mysql" /usr/local/mgr5/etc/dnsmgr.conf || echo "DBType mysql" >> /usr/local/mgr5/etc/dnsmgr.conf
rm -f /usr/local/mgr5/var/.db.cache.*
mv /usr/local/mgr5/bin/core2 /usr/local/mgr5/bin/core
pkill core