Mirajv1.0
EN

30. License of the Enterprise and Cluster editions

The Enterprise and Cluster editions of miraj-server require a license. It is a small file, miraj.lic, supplied by Cirtasoft with the edition. This chapter explains how to install it, how to find out who it belongs to, and what the server does when it is missing or expired.

What to remember:

  • the license is checked on the machine, with no connection at all: a server cut off from the Internet gets licensed like any other;
  • the server always starts, with or without a license, and never blocks access to the data;
  • the Express and Developer editions do not require a license, nor does the engine embedded in an application (miraj.dll, Python library, miraj-cli without a server).

30.1 The license file#

-----BEGIN MIRAJ LICENSE-----
format = 1
id = MRJ-2026-000123
customer = Société Exemple SA
edition = Entreprise
nodes = 1
issued = 2026-10-11
expires = 2027-10-11
key = 3f9a1c2e
signature = k3v…
-----END MIRAJ LICENSE-----
FieldMeaning
idLicense number, to quote in any request to Cirtasoft
customerHolder: the name displayed by the server
editionEntreprise or Cluster (a Cluster license also covers the Enterprise edition)
nodesNumber of nodes allowed in the cluster (Cluster edition)
issuedIssue date
expiresLast day of validity; absent: license with no expiry date
maintenance_untilLicense with no expiry date: it covers the MIRAJ versions released up to this date
machineFingerprint of the only authorized machine; absent: any machine (see 30.6)

The file is signed: the slightest change to its contents makes it invalid. It is not secret, but it carries your name: do not share it.

The same license exists in a compact form, on a single line that starts with MLIC1-. It is used to install the license by pasting it into a terminal (30.2).

30.2 Installing the license#

Three ways, your choice. In all three cases the server does not need the Internet.

With a command, from the file. It checks the license, displays its holder and stores it in the data folder:

miraj-server --root data --install-license miraj.lic

Licence MRJ-2026-000123 installée dans data\miraj\miraj.lic
  Titulaire : Société Exemple SA
  Édition   : Entreprise
  État      : licence valide jusqu'au 2027-10-11
Prise en compte au prochain démarrage du serveur, ou tout de suite par l'instruction FLUSH LICENSE.

A Cluster license also displays a Nœuds line. A rejected license is not installed and the command ends with an error, giving the reason:

miraj-server --root data --install-license abimee.lic

Licence non installée : licence illisible (clé incomplète)

With a command, by pasting the license (SSH session, remote console, machine where you cannot copy a file). - makes the command read the license from standard input:

miraj-server --root data --install-license -
MLIC1-Zm9ybWF0PTEKaWQ9TVJKLTIwMjYtMDAwMTIzCmN1c3RvbWVy…

Paste the compact license, press Enter, then end the input (Ctrl+D on Linux and macOS, Ctrl+Z then Enter on Windows). A line wrapped by the terminal or extra spaces do no harm. The compact license can also be given directly: --install-license MLIC1-….

By dropping the file in place. The server looks for its license in this order and uses the first source it finds:

  1. the file named by the --license-file <file> option or by license_file in miraj_config.xml;
  2. the MIRAJ_LICENSE environment variable: the path of a file, or the compact license itself (handy in a container);
  3. miraj\miraj.lic in the data folder — the place where --install-license writes it;
  4. miraj.lic next to miraj-server.

--install-license does not start the server and can be run while it is running. A rejected license (damaged file, other machine) is not installed: the one in place stays. On the Express and Developer editions, which do not require a license, the command says so and installs nothing.

Applying it without a restart#

FLUSH LICENSE;

The server reloads its license immediately (RELOAD privilege). If the new file is rejected, the statement fails (error 9062) and the license that was in use stays in use.

30.3 Finding out who the license belongs to#

SELECT @@miraj_license_owner;     -- 'Société Exemple SA'

SHOW LICENSE;

SHOW LICENSE returns one row: Owner, Id, Edition, Status, Issued, Expires, Maintenance_until, Nodes, Machine, Source (where the license was read from) and Message (its status explained in plain language). The same information is available as read-only variables:

VariableContents
miraj_license_ownerLicense holder
miraj_license_idLicense number
miraj_license_editionEdition covered: Entreprise or Cluster
miraj_license_statusStatus (table below)
miraj_license_expiresLast day of validity, empty for a license with no expiry date
miraj_license_nodesNodes allowed in the cluster
miraj_license_sourceFile or variable the license was read from

The holder also appears in the line the server writes at startup:

MIRAJ 1.0.0 Entreprise - serveur console sur 127.0.0.1:7007, dossier "data", 12 fils, licence MRJ-2026-000123 (Société Exemple SA), valide jusqu'au 2027-10-11.

@@miraj_edition remains the installed edition (Entreprise, Cluster), with or without a license: @@miraj_license_status tells whether it is properly licensed.

30.4 No license, or expired license#

Status (miraj_license_status)SituationWhat the server does
VALIDLicense in orderAll the features of the edition
GRACELicense expired for 30 days at mostAll the features, with a warning at startup: renew the license
EXPIREDLicense expired for more than 30 daysExpress edition features, single-threaded queries; data stays modifiable, with no cap
UNSUPPORTED_VERSIONMIRAJ version released after the end of the license maintenanceSame as EXPIRED; reinstall a covered version or renew maintenance
MISSINGNo license foundExpress edition features and limits
INVALIDFile unreadable, modified, or not a MIRAJ licenseSame as MISSING; the reason is in SHOW LICENSE
OTHER_MACHINELicense bound to another machineSame as MISSING
NOT_REQUIREDExpress or Developer edition, embedded engineNot applicable

"Express edition features" means: single-threaded queries, and refusal (error 9059) of change events (LISTEN, NOTIFY, WAIT FOR CHANGES), of tokens and the MCP endpoint, of the binary log and its replication, and of continuous journal archiving. "Express edition limits" adds the 20 GB data cap: beyond it, writes that make the data grow are refused (error 9061); reads and deletions remain allowed.

A license that once existed therefore never caps your data: a server whose license has expired keeps recording, more slowly and without the features of its edition.

When the expiry date arrives while the server is running, it applies it within the hour and records it in its journal. Queries switch to a single thread and new requests are refused; whatever was already working (replication, journal archiving, MCP endpoint) continues until the next server startup.

If the machine clock is set back, the server keeps the most recent date it has known.

30.5 Renewing or replacing a license#

Install the new license like the first one (30.2), then run FLUSH LICENSE, or restart the server. The old file is replaced; there is nothing to uninstall.

30.6 License bound to a machine#

A license can be issued for a single server. It then carries its fingerprint, which this command displays:

miraj-server --machine-id

Empreinte de cette machine : A1B2-C3D4-E5F6-0718-293A
Clé de vérification des licences : 3f9a1c2e

The second line identifies the key with which this program verifies licenses. Send the fingerprint to Cirtasoft with your order. On another machine, the license is in the OTHER_MACHINE status. The fingerprint does not change when a disk is replaced or memory is added; it changes when the operating system is reinstalled: request a new license then. A cloned virtual machine keeps the fingerprint of its template. In a container, and on systems where it cannot be read, the fingerprint is unavailable (Empreinte de cette machine : indisponible sur ce système (demandez une licence sans empreinte)): request a license without a fingerprint.

30.7 Cluster edition: one license per cluster#

A cluster has only one license: the same miraj.lic file, installed on every node. Its nodes field gives the number of nodes allowed.

  • A node that carries a different license from the primary's is rejected (error 9064, logged by the primary).
  • If the cluster has more nodes than the license allows, the primary rejects its secondaries (error 9063). The count covers the nodes declared by members in cluster.toml; without that list, the connected nodes.
  • Without a valid Cluster license (missing, expired, or an Enterprise license), the server starts but replication does not start; the journal reports it. A node that was a secondary keeps its databases read-only. Partitioned tables remain readable and modifiable; only the placement of a partition on a node (PARTITION … NODE) and the role change (SET GLOBAL cluster_role) are refused (error 9060).

To grow a cluster, request a license for the new number of nodes, install it on all nodes, then run FLUSH LICENSE on each.

30.8 Error codes#

CodeMessageCauseWhat to do
9059%s requires a valid Miraj license (license status: %s)Enterprise edition feature requested without a valid licenseSHOW LICENSE, then install or renew the license
9060%s requires a valid Miraj Cluster license (license status: %s)Cluster edition feature requested with a license that does not cover itInstall a Cluster license
9061Data cap of %s reached: this server has no valid Miraj licenseServer without a license whose data reaches 20 GBInstall the license, or delete data
9062License rejected: %sFLUSH LICENSE on a file that is unreadable, modified or from another machineReinstall the file you received; the license in place stays in use
9063Node %s rejected: license %s allows %s node(s) in the clusterCluster larger than its licenseLicense for more nodes, or remove a node from members
9064Node %s rejected: its license (%s) is not the cluster's (%s)Different license file on this nodeInstall the cluster's license on this node