Files
Ubuntu_docs/PowerDNS_install_MarinaDB.md
2025-04-07 07:46:21 +05:00

4.5 KiB

	sudo apt-get install pdns-backend-mysql -y

Create database to MarinaDB

sudo mysql -u root -p

Create new user into MarinaDB

CREATE USER 'poweruser'@'%' IDENTIFIED BY 'uFqqXQEQwErjkQga6rcz';
GRANT ALL PRIVILEGES ON *.* TO 'poweruser'@'%';
FLUSH PRIVILEGES;
REVOKE ALL PRIVILEGES ON *.* FROM 'powerdns'@'%';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON poweruser.* TO 'poweruser'@'%';
FLUSH PRIVILEGES;
SELECT User, Host FROM mysql.user WHERE User = 'poweruser';

Create database

CREATE DATABASE powerdns;
GRANT ALL PRIVILEGES ON powerdns.* TO 'poweruser'@'%';
FLUSH PRIVILEGES;

Create file with SQL to create database, text from https://doc.powerdns.com/authoritative/backends/generic-mysql.html

sudo mysql -u poweruser -p powerdns <<'EOF'

CREATE TABLE domains (
  id                    INT AUTO_INCREMENT,
  name                  VARCHAR(255) NOT NULL,
  master                VARCHAR(128) DEFAULT NULL,
  last_check            INT DEFAULT NULL,
  type                  VARCHAR(8) NOT NULL,
  notified_serial       INT UNSIGNED DEFAULT NULL,
  account               VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL,
  options               VARCHAR(64000) DEFAULT NULL,
  catalog               VARCHAR(255) DEFAULT NULL,
  PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';

CREATE UNIQUE INDEX name_index ON domains(name);
CREATE INDEX catalog_idx ON domains(catalog);

CREATE TABLE records (
  id                    BIGINT AUTO_INCREMENT,
  domain_id             INT DEFAULT NULL,
  name                  VARCHAR(255) DEFAULT NULL,
  type                  VARCHAR(10) DEFAULT NULL,
  content               VARCHAR(64000) DEFAULT NULL,
  ttl                   INT DEFAULT NULL,
  prio                  INT DEFAULT NULL,
  disabled              TINYINT(1) DEFAULT 0,
  ordername             VARCHAR(255) BINARY DEFAULT NULL,
  auth                  TINYINT(1) DEFAULT 1,
  PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';

CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);
CREATE INDEX ordername ON records (ordername);

CREATE TABLE supermasters (
  ip                    VARCHAR(64) NOT NULL,
  nameserver            VARCHAR(255) NOT NULL,
  account               VARCHAR(40) CHARACTER SET 'utf8' NOT NULL,
  PRIMARY KEY (ip, nameserver)
) Engine=InnoDB CHARACTER SET 'latin1';

CREATE TABLE comments (
  id                    INT AUTO_INCREMENT,
  domain_id             INT NOT NULL,
  name                  VARCHAR(255) NOT NULL,
  type                  VARCHAR(10) NOT NULL,
  modified_at           INT NOT NULL,
  account               VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL,
  comment               TEXT CHARACTER SET 'utf8' NOT NULL,
  PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';

CREATE INDEX comments_name_type_idx ON comments (name, type);
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);

CREATE TABLE domainmetadata (
  id                    INT AUTO_INCREMENT,
  domain_id             INT NOT NULL,
  kind                  VARCHAR(32),
  content               TEXT,
  PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';

CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);

CREATE TABLE cryptokeys (
  id                    INT AUTO_INCREMENT,
  domain_id             INT NOT NULL,
  flags                 INT NOT NULL,
  active                BOOL,
  published             BOOL DEFAULT 1,
  content               TEXT,
  PRIMARY KEY(id)
) Engine=InnoDB CHARACTER SET 'latin1';

CREATE INDEX domainidindex ON cryptokeys(domain_id);

CREATE TABLE tsigkeys (
  id                    INT AUTO_INCREMENT,
  name                  VARCHAR(255),
  algorithm             VARCHAR(50),
  secret                VARCHAR(255),
  PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';

CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);

EOF

Проверяем создалась ли таблицы в базе

mysql -u poweruser -p -e "SHOW TABLES FROM powerdns;"

Configure database connection from PowerDNS to SQLIte

sudo tee /etc/powerdns/pdns.d/pdns.local.mysql.conf <<'EOF'
launch=gmysql
gmysql-host=127.0.0.1
gmysql-port=3306
gmysql-user=poweruser
gmysql-password=uFqqXQEQwErjkQga6rcz
gmysql-dbname=powerdns
gmysql-dnssec=yes
EOF

Set access level to file

sudo chown pdns: /etc/powerdns/pdns.d/pdns.local.mysql.conf &&
sudo chmod 640 /etc/powerdns/pdns.d/pdns.local.mysql.conf