Использование MySQL для IPmanager

Материал из ISPWiki
Перейти к: навигация, поиск

Начиная с версии 5.26 имеется возможность использовать MySQL в качестве базы данных для IPmanager

Поскольку sqlite является компактной СУБД без лишний зависимостей и хорошо справляется со своими задачами при маленьких объемах данных и низких нагрузках, характерных для IPmanager мы используем его на установках по умолчанию, однако если у вас большое количество сетей и много конкурентных запросов на выделение/освобождение IP-адреосв, мы рекомендуем использовать MySQL, для этого необходимо:

создать в MySQL базу данных

create database ipmgr default character set utf8;


в конфигурационный файл /usr/local/mgr5/etc/ipmgr.conf добавить стоку

DBType mysql


указать параметры подключения к базе данных, используя следующие параметры

  • DBHost - адрес сервера с MySQL, на котором находится база данных. По умолчанию - localhost.
  • DBUser - пользователь базы данных. По умолчанию root
  • DBPassword - пароль пользователя базы данных, заданного DBUser.
  • DBName - имя базы данных. По умолчанию - ipmgr


после перезапуска, IPmanager запустится с чистой базой.

При необходимости возможно перенести данные из sqlite в mysql, для этого делаем дамп базы в файл:

sqlite3 /usr/local/mgr5/etc/ipmgr.db .dump > /root/ipmgr.db.sqlite


После этого в файле дампа надо заменить синтаксис некоторых переменных:

"ON CONFLICT FAIL" меняется на  ""
"usage VARCHAR(64)" меняется на "`usage` VARCHAR(64)"
"range VARCHAR(128)" меняется на  "`range` VARCHAR(128)"
"noauto VARCHAR(3)" меняется на  "`noauto` VARCHAR(3)"
"DEFAULT `off`" меняется на "DEFAULT 'off'"

Теперь можно заливать наш дамп в mysql:

mysql -uroot -p ipmgr < /root/ipmgr.db.mysql

Скрипт конвертации

 #!/bin/bash
 mv /usr/local/mgr5/bin/core /usr/local/mgr5/bin/core2
 pkill core
 sqlite3 /usr/local/mgr5/etc/ipmgr.db .dump > /root/ipmgr.db.sqlite
 replace "BEGIN TRANSACTION" "START TRANSACTION" -- /root/ipmgr.db.sqlite
 replace "PRAGMA foreign_keys=OFF;" "SET NAMES utf8;" -- /root/ipmgr.db.sqlite
 replace "ON CONFLICT FAIL" "" -- /root/ipmgr.db.sqlite
 replace "usage VARCHAR(64)" "\`usage\` VARCHAR(64)" -- /root/ipmgr.db.sqlite
 replace "iprange VARCHAR(128)" "\`iprange\` VARCHAR(128)" -- /root/ipmgr.db.sqlite
 replace "noauto VARCHAR(3)" "\`noauto\` VARCHAR(3)" -- /root/ipmgr.db.sqlite
 replace "DEFAULT \`off\`" "DEFAULT 'off'" -- /root/ipmgr.db.sqlite
 awk 'FS = "\"" {if($1=="INSERT INTO ") {print($1$2$3)} else {print}}' /root/ipmgr.db.sqlite > /root/ipmgr.db.mysql
 mysql -e "create database ipmgr default character set utf8;"
 mysql -uroot ipmgr < /root/ipmgr.db.mysql
 grep -qE "DBType mysql" /usr/local/mgr5/etc/ipmgr.conf || echo "DBType mysql" >> /usr/local/mgr5/etc/ipmgr.conf
 rm -f /usr/local/mgr5/var/.db.cache.*
 mv /usr/local/mgr5/bin/core2 /usr/local/mgr5/bin/core
 pkill core