DNSmanager по умолчанию использует в качестве СУБД (системы управления базами данных) SQLite. Эту СУБД удобно использовать при небольших объёмах данных и низких нагрузках, что характерно для DNSmanager. Однако, если в DNSmanager добавлено большое количество доменов и к нему поступает большое количество конкурентных запросов, рекомендуем использовать СУБД MySQL.
Алгоритм перехода с SQLite на MySQL
Алгоритм состоит из шагов:
-
Установите и запустите MySQL:
Для CentOSyum install mariadb-server service mariadb start
Для Debianapt-get install mysql-server service mysqld start
-
Измените стандартное имя файла core:
mv /usr/local/mgr5/bin/core /usr/local/mgr5/bin/core2
-
Остановите процесс core:
pkill core
-
Создайте в MySQL базу данных:
create database dnsmgr default character set utf8mb4;
- Замените в конфигурационном файле 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
Пояснения -
Выполните замены в файле дампа:
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 из дампа:
mysql -uroot -p dnsmgr < /root/dnsmgr.db.mysql
Пояснения
-
- Перезапустите DNSmanager. Если перенос данных из SQLite в MySQL не был выполнен, то DNSmanager запустится с чистой базой данных.
-
Верните файлу core стандартное имя:
mv /usr/local/mgr5/bin/core2 /usr/local/mgr5/bin/core
-
Перезапустите процесс core:
pkill core
Скрипт конвертации
Для выполнения пунктов 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