Configure persistent storage backends for MadelineProto sessions and data
MadelineProto supports multiple database backends for storing session data, peer information, and application state. By default, it uses in-memory storage, but you can configure MySQL, PostgreSQL, or Redis for production deployments.
use danog\MadelineProto\Settings;use danog\MadelineProto\Settings\Database\Mysql;$settings = new Settings;$mysql = new Mysql;$mysql->setDatabase('MadelineProto');$mysql->setUsername('root');$mysql->setPassword('your_password');$mysql->setUri('tcp://127.0.0.1'); // or 'tcp://host:port'$settings->setDb($mysql);
use danog\MadelineProto\Settings;use danog\MadelineProto\Settings\Database\Postgres;$settings = new Settings;$postgres = new Postgres;$postgres->setDatabase('MadelineProto');$postgres->setUsername('postgres');$postgres->setPassword('your_password');$postgres->setUri('tcp://127.0.0.1:5432');$settings->setDb($postgres);
All database backends support fine-grained control over which databases are enabled:
$db = new Mysql;// File reference database (required for file downloads)$db->setEnableFileReferenceDb(true); // default: true// Min database (required for sendMessage in certain conditions)$db->setEnableMinDb(true); // default: true// Username database (required for sendMessage with usernames)$db->setEnableUsernameDb(true); // default: true// Full peer info database (required for getFullInfo)$db->setEnableFullPeerDb(true); // default: true// Peer info database (required for getInfo)$db->setEnablePeerInfoDb(true); // default: true
Disabling these databases will break specific functionality. Only disable if you know what you’re doing.
use danog\MadelineProto\Settings\Database\SerializerType;$db->setSerializer(SerializerType::IGBINARY); // Fast binary serialization$db->setSerializer(SerializerType::SERIALIZE); // PHP native serialization$db->setSerializer(null); // Auto-select best available
IGBINARY is faster and more compact but requires the igbinary PHP extension.
When running in Docker containers without persistent volumes, use the ephemeral filesystem prefix:
$mysql = new Mysql;$mysql->setDatabase('MadelineProto');$mysql->setUsername('root');$mysql->setPassword('password');$mysql->setUri('tcp://mysql:3306');// Set a unique prefix for this session$mysql->setEphemeralFilesystemPrefix('bot_session_1');$settings->setDb($mysql);
Important: Never delete the session folder while MadelineProto is running, or you’ll get AUTH_KEY_DUPLICATED errors. Stopping the container first, then deleting the folder is safe.