Warning
Please practise the migration on a test server first, make sure you understand the whole procedure and migrate all required data.
Since new iRedMail server will install same components as old server, you can choose what data you want to migrate.
Most important data are:
mailaddr
, policy
, users
, wblist
.maddr
, msgs
, msgrcpt
. Quarantined emails are stored in quarantine
, it requires other 3 tables. If you don't have any quarantined emails, it's safe to delete all records in these 4 tables.Warning
Do not restore database mysql
exported from old server, it contains SQL
usernames/passwords for Roundcube/Amavisd/iRedAPD/iRedAdmin/... used on
old server. New iRedMail server has the same SQL usernames, but different
passwords. So please do not restore it.
Since iRedMail-0.8.7, iRedMail enforces secure POP3/IMAP/SMTP connections, please update your mail client applications to use TLS connection.
587
with STARTTLS
(or TLS
).143
with STARTTLS
(or TLS
), or port 993
with SSL
.110
with STARTTLS
(or TLS
), or port 995
with SSL
.Note
If you want to enable smtp authentication on port 25
(again, not
recommended), please comment out Postfix parameter smtpd_tls_auth_only = yes
in its config file /etc/postfix/main.cf
.
if you want to enable SMTPS (SMTP over SSL, port 465
) to support
legency mail clients, please follow this tutorial:
How to enable SMTPS service.
Steps to migrate LDAP mail accounts:
Normally, LDAP data can be exported into LDIF format. Here's backup/restore procedure: Backup and Restore.
Notes:
All mail accounts are stored in database vmail
by default, to migrate mail
accounts, you can simply export this database on old server, then import it
on new server.
IMPORTANT NOTE: iRedMail-0.8.7 drops several SQL columns, so before you import backup SQL database, please add them first. It's safe to drop them after you imported old database on new server.
mysql> USE vmail;
mysql> ALTER TABLE mailbox ADD COLUMN bytes BIGINT(20) NOT NULL DEFAULT 0;
mysql> ALTER TABLE mailbox ADD COLUMN messages BIGINT(20) NOT NULL DEFAULT 0;
mysql> ALTER TABLE domain ADD COLUMN defaultlanguage VARCHAR(5) NOT NULL DEFAULT 'en_US';
mysql> ALTER TABLE domain ADD COLUMN defaultuserquota BIGINT(20) NOT NULL DEFAULT '1024';
mysql> ALTER TABLE domain ADD COLUMN defaultuseraliases TEXT;
mysql> ALTER TABLE domain ADD COLUMN disableddomainprofiles VARCHAR(255) NOT NULL DEFAULT '';
mysql> ALTER TABLE domain ADD COLUMN disableduserprofiles VARCHAR(255) NOT NULL DEFAULT '';
mysql> ALTER TABLE domain ADD COLUMN defaultpasswordscheme VARCHAR(10) NOT NULL DEFAULT '';
mysql> ALTER TABLE domain ADD COLUMN minpasswordlength INT(10) NOT NULL DEFAULT 0;
mysql> ALTER TABLE domain ADD COLUMN maxpasswordlength INT(10) NOT NULL DEFAULT 0;
mysql> ALTER TABLE alias ADD COLUMN islist TINYINT(1) NOT NULL DEFAULT 0;
After imported backup SQL databases, please execute below commands to mark mail alias accounts and drop above newly created columns:
mysql> USE vmail;
mysql> UPDATE alias SET islist=1 WHERE address NOT IN (SELECT username FROM mailbox);
mysql> UPDATE alias SET islist=0 WHERE address=domain; -- domain catch-all account
-- Store values into new column: domain.settings and drop them
mysql> UPDATE domain SET settings='';
mysql> UPDATE domain SET settings=CONCAT(settings, IF(defaultlanguage IS NULL OR defaultlanguage='', '', CONCAT('default_language:', defaultlanguage, ';')));
mysql> UPDATE domain SET settings=CONCAT(settings, IF(defaultuserquota IS NULL OR defaultuserquota=0, '', CONCAT('default_user_quota:', defaultuserquota, ';')));
mysql> UPDATE domain SET settings=CONCAT(settings, IF(defaultuseraliases IS NULL OR defaultuseraliases='', '', CONCAT('default_groups:', defaultuseraliases, ';')));
mysql> UPDATE domain SET settings=CONCAT(settings, IF(minpasswordlength IS NULL OR minpasswordlength=0, '', CONCAT('min_passwd_length:', minpasswordlength, ';')));
mysql> UPDATE domain SET settings=CONCAT(settings, IF(maxpasswordlength IS NULL OR maxpasswordlength=0, '', CONCAT('max_passwd_length:', maxpasswordlength, ';')));
mysql> UPDATE domain SET settings=CONCAT(settings, IF(disableddomainprofiles IS NULL OR disableddomainprofiles='', '', CONCAT('disabled_domain_profiles:', disableddomainprofiles, ';')));
mysql> UPDATE domain SET settings=CONCAT(settings, IF(disableduserprofiles IS NULL OR disableduserprofiles='', '', CONCAT('disabled_user_profiles:', disableduserprofiles, ';')));
mysql> ALTER TABLE domain DROP defaultlanguage;
mysql> ALTER TABLE domain DROP defaultuserquota;
mysql> ALTER TABLE domain DROP defaultuseraliases;
mysql> ALTER TABLE domain DROP minpasswordlength;
mysql> ALTER TABLE domain DROP maxpasswordlength;
mysql> ALTER TABLE domain DROP disableddomainprofiles;
mysql> ALTER TABLE domain DROP disableduserprofiles;
IMPORTANT NOTE: There might be some changes in SQL structure, please read all upgrade tutorials for your current iRedMail release, then apply SQL structure related changes. Check upgrade tutorials for iRedMail.
Warning
rsync
.Set correct file owner and permission of mailboxes. Default owner is vmail
,
group is vmail
, permission is 0700
.
With SQL backends, you can get full maildir path of user with below SQL command:
mysql> USE vmail;
mysql> SELECT CONCAT(storagebasedirectory, '/', storagenode, '/', maildir) FROM mailbox WHERE username='user@domain.com';
homeDirectory
of mail user object. You can query with ldapsearch
command:$ ldapsearch -x -D 'cn=Manager,dc=xx,dc=xx' -b 'o=domains,dc=xx,dc=xx' -W "(mail=user@domain.com)" homeDirectory
Reference: https://github.com/roundcube/roundcubemail/wiki/Upgrade
Export those database on old server, then import them on new server.
Amavisd will read DKIM keys and sign outgoing emails. DKIM keys are stored
under /var/lib/dkim
by default, you can copy all keys under this directory to
new server, and make sure they have correct file owner amavis:amavis
and
permission 0600
.
If you prefer generating new DKIM keys on new server, don't forget to update DNS records for mail domain names.
After migration, please recalculate mailbox quota by following this tutorial: