Мы — долго запрягаем, быстро ездим, и сильно тормозим.

FreeBSD
  настройка
  подсчёт трафика
  программы
  почтовые системы
  FreeBSD Mail Howto
  exim & dovecot
  exim & courier-imap
  squirrelmail
  exim + saslauthd + courier-imap
  postfix -> exim
  sendmail -> exim
  imapsync
  Postfix + LDAP
  maildrop & postfix
  DSPAM
  Exim + LDAP
  ISPmanager
  Backup MX
  exim + exchange
  exim + dovecot + win2003 AD
  RoundCube
  qmail-ldap + AD
  spamooborona
  exim&dovecot + fetchmail + SSL
  Postfix + DBMail
  Mailgraph
  smfsav
  Exim+PgSQL
  Postfix + Dovecot + Clamav + SpamAssasin + LDAP vs MYSQL
  Simplemail Admin
  MTA qmail full install
  OpenLDAP адресная книга
  POSTFIX Статистики
  Backup MX (exim)
  Exim + dovecot + PgSQL + web
  Exim+dovecot2+dspam
  Возможности Dovecot 2
  Dovecot2 configfiles RUS
  Почтовый сервер по шагам ч.1
  Почтовый сервер по шагам ч.2
  Почтовый сервер по шагам ч.3
  Шелезяки
  Мелочи
  Файловая система
  WWW
  Security
  system
  Games Servers
  X11
  Programming
Очумелые Ручки
OpenBSD
Cisco


www.lissyara.su —> статьи —> FreeBSD —> почтовые системы —> imapsync

imapsync - перенос почты с одного сервера на другой.

Автор: lissyara.


    Собрал новую мыльницу - exim и dovecot. Всё пучком, но втал вопрос о переносе почты и юзеров со старого сервера на новый. С юзерами решилось просто - на стером была какая-то дикая связка cyrus-imap и exim. Дикость заключалась в том, что для зваедения юзера требовалось руками поправить БД MySQL, зайти в cyradmin (типа WEB-интерфейс) создать директорию, зайти с шелла - завести пользователся при помощи saslpasswd2... Финиш... Конечно, может когда-то всё это и работало по человечески, но мне досталось именно в таком виде, и на понимание принципа работы ушло немало времени и нервов :))) Перенос облегчался наличием БД с нешифрованными паролями. Поэтому был сделан дамп куска базы, в котором были только нужные пользователи, и этот самый дамп размещён во временной таблице. После чего два таких запроса:
INSERT INTO `mailbox`
(`username`, `password`, `name`, `maildir`, `domain`,
`created` ,`modified`, `active`)
SELECT 
LCASE(`alias`), `password`, LCASE(`login`),
LCASE(
	CONCAT(
		SUBSTRING(`alias`, POSITION("@" IN `alias`)+1,
		LENGTH(`alias`)),'/',
		SUBSTRING(`alias`, 1,POSITION("@" IN `alias`)-1),'/'
		)
	),
LCASE(
	SUBSTRING(`alias`,
	POSITION("@" IN `alias`)+1,
	LENGTH(`alias`))
	),
NOW(),NOW(),'1'
FROM `users_old`
WHERE SUBSTRING(
	`alias`, POSITION("@" IN `alias`)+1,LENGTH(`alias`)
	)='domain-name.su';
--
INSERT INTO `alias`
(`address`,`goto`,`domain`,`created`,`modified`,`active`)
SELECT 
LCASE(`username`), LCASE(`username`), `domain`,NOW(),NOW(),'1'
FROM `mailbox` WHERE `domain`='domain-name.su'

Перенесли всех пользователей. Для переноса самой почты, была заюзана программа из портов - imapsync, и скриптик на шелле, такого вида:
#!/bin/sh

# Скрипт миграции пользователей с cyrus-imap на dovecot

# Параметры подключения к MySQL
mysql_host="localhost"
mysql_user="exim"
mysql_passwd="exim"
mysql_db="exim"

# Достаём из БД список пользователей
# исходный хост
src_host="$1"
# куда переносим
dst_host="$2"
# домен который мигруется
user_domain="$3"

# mysql-клиент
mysql="/usr/local/bin/mysql --user=${mysql_user} \
--password=${mysql_passwd} \
--database=${mysql_db} --host=${mysql_host} --batch"
# программа миграции
imapsync="/usr/local/bin/imapsync"
# временный файл
file_tmp="/tmp/user.passwd"

# достаём юзеров и в цикле переносим их почту
case "$4" in
        execute)
                ${mysql} --execute="SELECT * FROM \`mailbox\` \
                WHERE \`domain\`='${user_domain}'" |
                {
                while read user_string
                do
                #echo ${user_string}
                old_username="`echo ${user_string} | awk '{print $3}'`"
                new_username="`echo ${user_string} | awk '{print $1}'`"
                user_passwd="`echo ${user_string} | awk '{print $2}'`"

                # создаём файл с паролем:
                echo ${user_passwd} > ${file_tmp}
                # перетаскиваем почту
                echo "Миграция пользователя ${new_username}"
                ${imapsync} --host1 ${src_host} --user1 ${old_username} \
                --passfile1 ${file_tmp} --host2 ${dst_host} --user2 \
                ${new_username} --passfile2 ${file_tmp}
                # Удаляем файл паролей
                rm -f ${tmp_file}

                done
                }
                ;;
        *)
                echo ""
                echo "Usage: `basename $0` {src_host dst_host domain execute}"
                echo ""
                exit 64
                ;;
esac

Запускаем:
./mail_migration.sh 200.200.200.200 127.0.0.1 domain-name.su execute

И долго-долго ждём :))) На перенос 3Gb почты ушло часов пять-шесть... Скриптик перловый, работает медленно :( В-общем-то не страшно, всё равно делается это не днём.

P.S. Это даже не руководство к действиям, а просто пример, как можно сделать....



Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?t=5469.

размещено: 2006-08-02,
последнее обновление: 2006-08-02,
автор: lissyara

оценить статью:

Abigor, 2006-08-02 в 13:09:33

а для pop3 можно еще пример для полноты =)

lissyara, 2006-08-02 в 13:11:56

Шустрые какие :)))
Юзайте IMAP - ибо POP3 это прошлый век :)
========
Когда искал - видел упоминание о том что софт существует, но на этом не зацикливался - я давно pop3 не использую...
www.yandex.ru; www.google.ru - делов-то :)

Abigor, 2006-08-03 в 10:30:20

>Юзайте IMAP - ибо POP3 это прошлый век :)
я то с тобой согласен. а вот как это обьяснить пачке юзверей

Павел, 2012-04-17 в 16:51:35

>Скриптик перловый, работает медленно
Почему скриптик perl'овый - когда он башовый?

freeman_tnu, 2013-04-02 в 23:24:41

Имеется в виду скрипт imapsync

Alejandro, 2016-06-12 в 21:34:02

Прошу прощенья за некропостинг, но:
"# временный файл
file_tmp="/tmp/user.passwd"
...
# создаём файл с паролем:
               echo ${user_passwd} > ${file_tmp}
...
# Удаляем файл паролей
               rm -f ${tmp_file}"

Alessias, 2017-12-19 в 19:41:52

только надо добавить параметр --skip-column-names к mysql
чтоб не пытался перенести почту пользователя local_part  пользователю username

mysql="`which mysql` --skip-column-names --user=${mysql_user} \
--password=${mysql_passwd} \
--database=${mysql_db} --host=${mysql_host}  --batch"

Dmitry, 2018-09-05 в 9:03:23

--nofoldersizes --skipsize --fast и будет работать быстро.


Оставьте свой комментарий:
Ваше имя:   *
e-mail:  
жирный
наклонный
подчёркнутый
ссылка
цвет
Нынешний год:   *
 


Хостинг HOST-FOOD

2014-07-27, lissyara
gmirror

Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9

Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту

Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis

Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS

Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT

В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat

Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp

Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration

Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster

HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS

История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire

Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
подписка

    вверх      
Статистика сайта
Сейчас на сайте находится: 22 чел.
За последние 30 мин было: 81 человек
За сегодня было
3738 показов,
944 уникальных IP
 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0424 секунд
Из них PHP: 29%; SQL: 71%; Число SQL-запросов: 77 шт.
Исходный размер: 103684; Сжатая: 19259