27 ноября 2015

Установка принтера HP LaserJet 1200 в Windows 7 x64 для печати по сети

Заходим сюда http://www8.hp.com/ru/ru/support-drivers.html В поиске вбиваем LaserJet 1200, в результатах поиска находим Драйвер — Универсальный драйвер печати и скачиваем к примеру HP Universal Print Driver for Windows PCL5. Запускаем, выбираем обычный режим — добавить локальный принтер — создать новый порт — Local port — вбиваем имя порта так \\ИМЯ-КОМПЬЮТЕРА-С-ПРИНТЕРОМ\СЕТЕВОЕ-ИМЯ-ПРИНТЕРА В конце установка может зависнуть, ждем 5 минут и если установка не завершается, отключаем локальную сеть — установка завершается — включаем локалку.

P.S. Универсальный драйвер печати для принтеров Samsung находится здесь http://www.samsung.com/ru/support/usefulsoftware/supportUsefulSwPrinter.do

25 ноября 2015

Средства диагностики в Zimbra

Опишу некоторые средства диагностики почтового сервера на ZIMBRA CS.


Комманды:

/etc/init.d/zimbra stop|start|restart — скрипт управления сервером.

ps aux | grep zimbra — проверка запущенных сервисов

/opt/zimbra/libexec/zmfixperms -extended -verbose — скрипт исправляющий права на системные папки и файлы ZImbra.

zmcontrol status — Проверка запущенных сервисов Zimbra

zmcontrol stop|start|startup|shutdown — Комманды управления службами сервера.

postfix check — проверка MTA агента (Postfix).

Системные логи:

/var/log/zimbra.log — системные сообщения. Сообщения MTA, postfix, amavisd.

Дополнительные логи (/opt/zimbra/log/):

mailbox.log — tomcat mail services
audit.log — authentication
clamd.log — antivirus db
convertd.log — attachment conversion
freshclam.log — clam antivirus updates
logger_myslow.log — slow logger db queries
myslow.log — slow db queries
spamtrain.log — spam/ham training
sync.log — zimbra mobile
zimbrastats.csv — server performance statistics
zmconvertd.log — conversion server monitor

Очистка всех сообщений из очереди (при спам атаках):

cd /opt/zimbra/postfix/sbin
./postsuper -d ALL

* выполняется от  root. Все сообщения в очереди будут удалены. осторожно!

17 сентября 2015

mc на nas4free

Я когда-то ставил mc на nas4free, но та инсталляция не подружилась с virtualbox. Сегодня поставим mc.

Источник на форуме nas4free/
UPD от 01 февраля 2015 Изменена ссылка на Источник строкой выше. Работает в сборке 1310 /UPD

1) Нам надо определиться - куда ставить mc. Я ранее использовал раздел данных на флешке, но позже разочаровался в этой идее. Буду использовать датасет /Ext/Extensions на главном пуле (/mnt/Pool/), где создам папку mc

2) Идем в консоль через putty
mkdir mkdir /mnt/Pool/Ext/Extensions/mc
chmod -R 777 /mnt/Pool/Ext/Extensions/mc
cd /mnt/Pool/Ext/Extensions/mc



3)Теперь нам надо создать и подправить скрипт.
Идём по ссылке Источник выше. Выделяем мышкой и копируем в буфер скрипт из этого поста темы (не первого)

4) Прим. Советую развернуть окно консоли на весь экран.
создаём файл скрипта
nano mcommander.sh

Копируем в него скрипт из форума

5)

Прим, Если не будет качаться - значит снова сменилась версия. Открываем тот путь, что содержится в сообщении об ошибке,  в ftp-клиента и ищем как называется актуальная версия mc.

6) Даём права на исполнение
chmod a+x mcommander.sh

7) Запускаем, ОБЯЗАТЕЛЬНО с полным маршрутом
/mnt/Pool/Ext/Extensions/mc/mcommander.sh
_________
UPD от 12 окт 2013 Если у вас полезли ошибки - то 99% проблема в том, что при переносе скрипта те строки, которые должны были быть одной строкой превратились в две. Например
ln -s ${DIR}/share/locale/${i}/LC_MESSAGES/mc.mo
/usr/local/share/locale/${i}/LC_MESSAGES; fi;

Это одна строка в оригинале - но если её разложить на две - будет чушь.

Дальше советую при переделках начинать с чистого листа для этого стереть всё
rm -rf /mnt/Pool/Ext/Extensions/mc/
А затем при вставке в nanо развернуть его на весь экран (и не пользоваться windows редакторами) /UPD
_________

8) rehash

9) Запускать командой mc
mc

10) Задаём в System|Advanced|Command scripts как Postinit скрипт
/mnt/Pool/Ext/Extensions/mc/mcommander.sh

Перегружаемся, чтобы убедиться, что всё ОК.
Прим. Русские буквы читаются нормально. Если в клиенте выставить кодировку UTF-8
PuttyUTF8

Отредактированный файл:
#!/bin/sh
# filename:     mcommander.sh
# author:       Dan Merschi
# date:         2009-07-28 ; Add multiplatform support
# author:       Graham Inggs <graham@nerve.org.za>
# date:         2012-04-11 ; Updated for NAS4Free 9.0.0.1
# date:         2013-02-09 ; Updated for ftp.freebsd.org restructuring and latest mc-light version
# date:         2013-05-05 ; Switch from mc-light to mc ; drop compat7x; add libslang
# purpose:      Install Midnight Commander on NAS4Free (embedded version).
# Note:         Check the end of the page.
#
#----------------------- Set variables ------------------------------------------------------------------
DIR=`dirname $0`;
PLATFORM=`uname -m`
RELEASE=`uname -r | cut -d- -f1`
URL="ftp://ftp.obit.ru/pub/FreeBSD/ports/i386/packages-8-stable/All"
MCLIGHTFILE="mc-4.8.1.4_1.tbz"
LIBSLANGFILE="libslang2-2.2.4_5.tbz"
PCREFILE="pcre-8.34.tbz"
GETTEXTFILE="gettext-0.18.3.1.tbz"
LIBICONVFILE="libiconv-1.14_1.tbz"
#----------------------- Set Errors ---------------------------------------------------------------------
_msg() { case $@ in
  0) echo "The script will exit now."; exit 0 ;;
  1) echo "No route to server, or file do not exist on server"; _msg 0 ;;
  2) echo "Can't find ${FILE} on ${DIR}"; _msg 0 ;;
  3) echo "Midnight Commander installed and ready! (ONLY USE DURING A SSH SESSION)"; exit 0 ;;
  4) echo "Always run this script using the full path: /mnt/.../directory/mcommander.sh"; _msg 0 ;;
esac ; exit 0; }
#----------------------- Check for full path ------------------------------------------------------------
if [ ! `echo $0 |cut -c1-5` = "/mnt/" ]; then _msg 4 ; fi
cd $DIR;
#----------------------- Download and decompress mc files if don't exist --------------------------------
FILE=${MCLIGHTFILE}
if [ ! -d ${DIR}/bin ]; then
  if [ ! -e ${DIR}/${FILE} ]; then fetch ${URL}/${FILE} || _msg 1; fi
  if [ -f ${DIR}/${FILE} ]; then tar xzf ${DIR}/${FILE} || _msg 2; rm ${DIR}/+*; rm -R ${DIR}/man; fi
  if [ ! -d ${DIR}/bin ]; then _msg 4; fi
fi
#----------------------- Download and decompress libslang files if don't exist --------------------------
FILE=${LIBSLANGFILE}
if [ ! -d ${DIR}/lib ]; then
  if [ ! -e ${DIR}/${FILE} ]; then fetch ${URL}/${FILE} || _msg 1; fi
  if [ -f ${DIR}/${FILE} ]; then tar xzf ${DIR}/${FILE} || _msg 2}; rm ${DIR}/+*;
    rm -R ${DIR}/libdata; rm -R ${DIR}/man; rm -R ${DIR}/include; rm ${DIR}/lib/*.a;
    rm ${DIR}/bin/slsh; rm ${DIR}/etc/slsh.rc; fi
  if [ ! -d ${DIR}/lib ]; then _msg 4; fi
fi
#----------------------- Download and decompress pcre files if don't exist --------------------------
FILE=${PCREFILE}
#if [ ! -d ${DIR}/lib ]; then
  if [ ! -e ${DIR}/${FILE} ]; then fetch ${URL}/${FILE} || _msg 1; fi
  if [ -f ${DIR}/${FILE} ]; then tar xzf ${DIR}/${FILE} || _msg 2}; rm ${DIR}/+*; fi
  if [ ! -d ${DIR}/lib ]; then _msg 4; fi
#fi
#----------------------- Download and decompress gettext files if don't exist --------------------------
FILE=${GETTEXTFILE}
#if [ ! -d ${DIR}/lib ]; then
  if [ ! -e ${DIR}/${FILE} ]; then fetch ${URL}/${FILE} || _msg 1; fi
  if [ -f ${DIR}/${FILE} ]; then tar xzf ${DIR}/${FILE} || _msg 2}; rm ${DIR}/+*; fi
  if [ ! -d ${DIR}/lib ]; then _msg 4; fi
#fi
#----------------------- Download and decompress gettext files if don't exist --------------------------
FILE=${LIBICONVFILE}
#if [ ! -d ${DIR}/lib ]; then
  if [ ! -e ${DIR}/${FILE} ]; then fetch ${URL}/${FILE} || _msg 1; fi
  if [ -f ${DIR}/${FILE} ]; then tar xzf ${DIR}/${FILE} || _msg 2}; rm ${DIR}/+*; fi
  if [ ! -d ${DIR}/lib ]; then _msg 4; fi
#fi

#----------------------- Create symlinks ----------------------------------------------------------------
if [ ! -e /usr/local/share/mc ]; then ln -s ${DIR}/share/mc /usr/local/share; fi
if [ ! -e /usr/local/libexec/mc ]; then ln -s ${DIR}/libexec/mc /usr/local/libexec; fi
if [ ! -e /usr/local/etc/mc ]; then ln -s ${DIR}/etc/mc /usr/local/etc; 
fi
for i in `ls $DIR/bin/`
   do if [ ! -e /usr/local/bin/${i} ]; then ln -s ${DIR}/bin/$i /usr/local/bin; fi; done
for i in `ls $DIR/share/locale`
   do if [ ! -e /usr/local/share/locale/${i} ]; then ln -s ${DIR}/share/locale/${i} /usr/local/share/locale;
      else if [ ! -e /usr/local/share/locale/${i}/LC_MESSAGES/mc.mo ]; 
then
        ln -s ${DIR}/share/locale/${i}/LC_MESSAGES/mc.mo /usr/local/share/locale/${i}/LC_MESSAGES; fi;
      fi; done;
for i in `ls $DIR/lib`
   do if [ ! -e /usr/local/lib/${i} ]; then ln -s $DIR/lib/$i /usr/local/lib; fi; done
_msg 3 ; exit 0;
#----------------------- End of Script ------------------------------------------------------------------
# 1. Keep this script in his own directory.
# 2. chmod the script u+x,
# 3. Always run this script using the full path: /mnt/share/directory/mcommander
# 4. You can add this script to WebGUI: Advanced: Commands as Post command (see 3).
# 5. To run Midnight Commander from shell type 'mc'.



12 августа 2015

Настройка OpenVPN на Windows

Качаем дистрибутив OpenVPN под Windows отсюда :
http://openvpn.net/index.php/open-source/downloads.html , на момент написания статьи последняя версия была OpenVPN 2.1 rc 20 от 07.10.2009
Я качал http://openvpn.net/release/openvpn-2.1_rc20-install.exe - Windows Installer.
После скачки запускаем на выполнение ... везде жмем далее далее далее, короче все по умолчанию (Next, I agree, Next, Next, гавк на TAP - все равно продолжить, Next, снять галочку, Finish).
После установки из Пуск\Программы\OpenVPN\ запускаем OpenVPN GUI, счас оно погоды не сделает, но пусть будет.
Я пользуюсь FARом, и вам рекомендую, иногда ... в общем при помощи FAR заходим в c:\program files\openvpn\config\ и создаем там файл server.ovpn (для сервера) или client.ovpn для клиента (Shift+F4 если кто не знает) (собственно создать его можно и при помощи блокнота). В самом файле прописываем :
# для сервера
dev tun
ifconfig 192.168.0.1 192.168.0.2
secret static.key

#для клиента
remote server.ru (где сервер - это ваш сервер OpenVPN, я прописывал IP адрес)
dev tun
ifconfig 192.168.0.2 192.168.0.1
secret static.key
Сохраняем файл.

Далее надо создать статический ключ шифрования. Выполняем команду :
openvpn --genkey --secret static.key на сервере
у меня ключ появился в c:\program files\OpenVPN\ откуда я его перенес чуть дальше, в c:\program files\OpenVPN\config\
Скопировал его на флешку и перенес в ту же самую папку c:\program files\OpenVPN\config\ на клиенте.
Можно пробовать ...
Сначала на сервере в трее жмем правую кнопку мыши на OpenVPN GUI и нажимаем Connect, если нигде не ошиблись, то мониторчики станут желтыми.
Тоже самое делаем на клиенте ... ПКМ - connect ... должно состояться соединение, а мониторчики должны стать зелеными ...
Правда у меня между всеми этими событиями один раз Гавкнул брендмауэр, где я нажал разблокировать, а раза 4 гавкнул Касперский, где я везде нажал разрешить.
Собственно все ... OpenVPN в самой простой конфигурации работает ...

04 июня 2015

Произошла исключительная ситуация (Microsoft Office Excel)

Вот код:

&НаСервере
Процедура ОткрытьФайлЭксель()
   
    ИмяФайла = "D:\backup\Обмен\1.xls";
    Эксель= Новый COMОбъект("Excel.Application");
    Книга= Эксель.Workbooks.Open(ИмяФайла);
   
КонецПроцедуры

Вот ошибка:

{Форма.Форма.Форма(6)}: Ошибка при вызове метода контекста (Open)
   Книга= Эксель.Workbooks.Open(ИмяФайла);
по причине:
Произошла исключительная ситуация (Microsoft Office Excel): Нет доступа к файлу 'D:\backup\Обмен\1.xls'. Это может быть вызвано одной из следующих причин.

• Имени файла или пути не существует.
• Файл используется другой программой.
• Имя книги, которую вы пытаетесь сохранить, совпадает с именем открытой в данный момент книги.

Если выполниять &НаКлиенте то все хорошо, если &НаСервере то ошибка.
Клиент и служба сервера запущены под одним пользователем.

Решение :

Создать папку C:\Windows\SysWOW64\config\systemprofile\Desktop или C:\Windows\System32\config\systemprofile\Desktop (в зависимости от разрядности вашей системы)

29 апреля 2015

Установка сервера терминалов в Windows Server 2008 R2



Сегодня я расскажу о том как поднять сервер терминалов (англ. terminal server) на базе Windows Server 2008 R2. В целом это довольно просто, но есть несколько тонких моментов, итак:

0. Оглавление

  1. Что понадобится
  2. Установка службы удаленных рабочих столов
  3. Установка сервера лицензирования удаленных рабочих столов

1. Что понадобится

  1. Мощный компьютер (сервер) с установленной на нем  Windows Server 2008 R2. (От том как установить эту ось, я писал здесь)
  2. Действительная клиентская лицензия сервера терминалов, приобретенная по одной из существующих программ лицензирования. (В данной статье я буду использовать найденный в интернете номер соглашения, по программе Enterprise Agriment. На момент написания статьи рабочими были номера:  6565792, 5296992, 3325596, 4965437, 4526017.)

2. Установка службы удаленных рабочих столов

Запускаем диспетчер сервера («Пуск» — «Администрирование» — «Диспетчер сервера»). Раскрываем вкладку «Роли» и нажимаем «Добавить роли».
Запустится «Мастер добавления ролей» . Жмем «Далее» , затем выбираем в списке роль «Службы удаленных рабочих столов» и 2 раза снова нажимаем «Далее» .
Увидим окно выбора служб ролей. В нем выбираем «Узел сеансов удаленных рабочих столов» и «Лицензирование удаленных рабочих столов» и снова 2 раза  «Далее» .
Метод проверки подлинности выбираем «Не требуем проверку подлинности на уровне сети», чтобы можно было подключаться со старых клиентов. После чего жмем «Далее» .
На следующем шаге нужно выбрать режим лицензирования: «На устройство» или «На пользователя» . Чтобы понять чем отличаются эти режимы рассмотрим простой пример. Предположим, у Вас есть 5 лицензий. При режиме «На устройство» вы можете создать неограниченное число пользователей на сервере, которые смогут подключаться через удаленный рабочий стол только с 5 компьютеров, на которых установлены эти лицензии. Если выбрать режим «На пользователя», то зайти на сервер смогут только 5 выбранных пользователей, независимо с какого устройства они подключаются. Выбирайте тот режим, который вам наиболее подходит и нажимайте «Далее» .
На этом этапе нужно добавить пользователей или группу пользователей, которые будут иметь доступ к службе терминалов. Для этого нажимаем «Добавить», «Дополнительно», в открывшемся окне «Поиск», выбираем пользователя и нажимаем «ОК». Для того чтобы все пользователи без исключения могли подключаться к нашему серверу терминалов добавляем группу «Все» . После чего жмем «ОК» и «Далее» .
Если Вы хотите чтобы через удаленный рабочий стол можно было прослушивать аудиоданные и смотреть видео, то устанавливайте соответствующую галочку. Аналогично с записью звука и Windows Aero. Выбрав нужные параметры жмем «Далее» .
Теперь надо настроить область обнаружения для лицензирования удаленных рабочих столов. Если у Вас поднят Active Directory, то выбирайте «Этот домен» или «Лес» , в зависимости от структуры домена. В противном случае выбираем «Эта рабочая группа» и нажимаем «Далее» .
Проверяем все настройки и нажимаем «Установить».
После установки потребуется перезагрузка.

3. Установка сервера лицензирования удаленных рабочих столов

Если все сделано правильно, то после перезагрузки мы увидим окно, с сообщением, что установка прошла успешно, но с предупреждением, что нужно настроить параметры лицензирования на сервере узла сеансов удаленных рабочих столов.
Укажем сервер лицензирования вручную. Для этого запустим оснастку «Конфигурация узла сеансов удаленных рабочих столов» («Пуск» — «Администрирование» — «Службы удаленных рабочих столов» ). Там мы видим что не указан сервер лицензирования удаленных рабочих столов.
Кликаем 2 раза по этой строке, в открывшемся окне «Свойства» , выбираем вкладку «Лицензирование» и нажимаем кнопку «Добавить» .
Выбираем сервера из известных серверов лицензирования. В нашем случае сервер лицензирования находится на одном компьютере с сервером терминалов. Добавляем его и нажимаем «ОК» .
Теперь, если перейти на вкладу «Диагностика лицензирования» мы увидим что сервер лицензирования выбран, но не включен.
Для запуска и активации сервера лицензирования удаленных рабочих столов, запустим «Диспетчер лицензирования удаленных рабочих столов» («Пуск» — «Администрирование» — «Службы удаленных рабочих столов» ). В диспетчере мы видим наш сервер и статус «Не активирован» . Кликаем по нему правой кнопкой мыши и выбираем «Активировать сервер» .
Запустится «Мастер активации сервера» . Нажимаем «Далее» . В следующем окне выбираем метод подключения «Авто (реком.)» и снова жмем «Далее» . Заполняем сведения об организации. Затем, заполнив дополнительные сведения (не обязательно) и нажав «Далее» , увидим сообщение об успешной активации сервера.
Теперь надо установить лицензии. Если этого не сделать то сервер лицензирования будет выдавать временные лицензии, действующие 120 дней. Чтобы установить лицензии нажимаем «Далее» , оставив галочку «Запустить мастер установки лицензий» . Или же можно запустить данный мастер из «Диспетчера лицензирования удаленных рабочих столов» , кликнув правой кнопкой по серверу и выбрав «Установить лицензии» . Там же мы можем проверить, что сервер активирован.
В запустившемся «Мастере установки лицензий» нажимаем «Далее» и попадаем на окно выбора программы лицензирования. Следующие действия зависят от способа приобретений лицензий. В моем примере это «Enterprise Agreement» . Выбрав нужный тип лицензирования нажимаем «Далее» .
Вводим номер соглашения и жмем «Далее» . В следующем окне выбираем версию продукта: «Windows Server 2008 или Windows Server 2008 R2» , тип лицензий выбираем тот же, который мы выбирали при добавлении ролей («на пользователя» или «на устройство» ) и вводим количество необходимых лицензий.
Нажимаем «Далее» и дожидаемся сообщения об успешной установки лицензии. (Хочу отметить, что по непонятным для меня причинам, данная процедура не всегда заканчивается положительно. Если мастер сообщил что не удалось установить лицензию попробуйте повторить процедуру некоторое время спустя. Рано или поздно лицензия установится. Проверенно не один раз.) Если все прошло хорошо в диспетчере сервера мы должны увидеть параметры нашей лицензии.
И убедимся что нет проблем, зайдя на вкладку «Диагностика лицензирования» в диспетчере сервера.
Все, на этом установка сервера терминалов закончена. Можно подключаться к серверу с помощью встроенного в Windows клиента «Подключение к удаленному рабочему столу».

01 апреля 2015

MySQL шпаргалки

Работа с бекапами


Делаем бекап
mysqldump -u USER -pPASSWORD DATABASE > /path/to/file/dump.sql

Создаём структуру базы без данных
mysqldump --no-data - u USER -pPASSWORD DATABASE > /path/to/file/schema.sql

Если нужно сделать дамп только одной или нескольких таблиц
mysqldump -u USER -pPASSWORD DATABASE TABLE1 TABLE2 TABLE3 > /path/to/file/dump_table.sql

Создаём бекап и сразу его архивируем
mysqldump -u USER -pPASSWORD DATABASE | gzip > /path/to/outputfile.sql.gz

Создание бекапа с указанием его даты
mysqldump -u USER -pPASSWORD DATABASE | gzip > `date +/path/to/outputfile.sql.%Y%m%d.%H%M%S.gz`

Заливаем бекап в базу данных
mysql -u USER -pPASSWORD DATABASE < /path/to/dump.sql

Заливаем архив бекапа в базу
gunzip < /path/to/outputfile.sql.gz | mysql -u USER -pPASSWORD DATABASE
или так
zcat /path/to/outputfile.sql.gz | mysql -u USER -pPASSWORD DATABASE

Создаём новую базу данных
mysqladmin -u USER -pPASSWORD create NEWDATABASE

Удобно использовать бекап с дополнительными опциями -Q -c -e, т.е.
mysqldump -Q -c -e -u USER -pPASSWORD DATABASE > /path/to/file/dump.sql, где:
-Q оборачивает имена обратными кавычками
-c делает полную вставку, включая имена колонок
-e делает расширенную вставку. Итоговый файл получается меньше и делается он чуть быстрее


Для просмотра списка баз данных можно использовать команду:
mysqlshow -u USER -pPASSWORD

А так же можно посмотреть список таблиц базы:
mysqlshow -u USER -pPASSWORD DATABASE

Для таблиц InnoDB надо добавлять --single-transaction, это гарантирует целостность данных бекапа.
Для таблиц MyISAN это не актуально, ибо они не поддерживают транзакционность.

Подробнее

Общие факты

Полезно под каждую базу на боевом сервере создавать своего пользователя
Кодировка базы может быть любой, если она UTF8
В большинстве случаев лучше использовать движок InnoDB
В php лучше забыть про сильно устаревшее расширение mysql и по-возможности использовать pdo или mysqli
Новую копию MySQL всегда можно настроить и оптимизировать
Без особой нужды не стоит открывать MySQL наружу. Вместо этого можно сделать проброс портов
ssh -fNL LOCAL_PORT:localhost:3306 REMOTE_USER@REMOTE_HOST


Работа с данными


Числа

На 32-битных системах практически нет смысла ставить для типа INTEGER свойство UNSIGNED, так как такие большие числа в php не поддерживаются.
На 64-битных системах, php поддерживает большие числа, вплоть до MySQL BIGINT со знаком.
Связанные таблицы («Foreign keys») должны иметь полное сходство по структуре ключей. Т.е. если у нас на одной таблице для поля указано «INTEGER UNSIGNED DEFAULT 0 NOT NULL» то и на другой должно быть указано аналогично
Для хранения булевых значений, нужно использовать TINYINT(1)
А деньги лучше хранить в DECIMAL(10, 2), где первое число обозначает количество всех знаков, включая запятую, а второе — количество знаков после запятой. Итого, у нас получится что DECIMAL(10,2) может сохранить 9999999,99


Строки

В старых версиях (до 5.0.3) VARCHAR была ограничена 255 символами, но сейчас можно указывать до 65535 символов
Помните, что тип TEXT ограничен только 64 килобитами, поэтому что бы сохранять «Войну и Мир» пользуйтесь «LONGTEXT»
Самая правильная кодировка для вашей БД UTF8


Даты

Не забывайте, что
DATE, TIME, DATETIME — выводятся в виде строк, поэтому поиск и сравнение дат происходит через преобразование
TIMESTAMP — хранится в виде UNIX_TIMESTAMP, и можно указать автоматически обновлять колонку
Сравнивая типы данных DATETIME и TIMESTAMP, не забывайте делать преобразование типов, например:
SELECT * FROM table WHERE `datetime` = DATE(`timestamp`)


Перечисления

Для перечислений правильно использовать тип ENUM
Правильно пишется так: ENUM('мама', 'мыла', 'раму')
Можно ставить значение по-умолчанию, как и для любой строки
В базе поле с перечислением хранится как число, поэтому скорость работы — потрясающе высокая
Количество перечислений ~ 65 тысяч


dev.mysql.com/doc/refman/4.1/en/storage-requirements.html
help.scibit.com/mascon/masconMySQL_Field_Types.html

Отладка


Если запросы тормозят, то можно включить лог для медленных запросов в /etc/mysql/my.cnf
А потом оптимизировать запросы через EXPLAIN
И наблюдать за запросами удобно через программу mytop

26 марта 2015

Ubuntu 14.04 — Downgrade PHP to 5.2 version

Столкнулся на работе с переносом древнего проекта написанного на PHP 5.2 Пробовал запустить его на свежем пыхе — не получилось. Пообщавшись с разработчиком выяснил что взлетит только на PHP 5.2 Особо вникать не стал … надо так надо! Хостер предоставил чистенькую виртуалочку с Ubuntu 14.04 Вот так пришлось извернуться чтобы на свеженькую убунту поставить пых закостенелой версии.

Добавляем репозитарий древнего как мир убунтовского релиза — karmic

root@host5:~# cat /etc/apt/sources.list.d/karmic.list
deb http://old-releases.ubuntu.com/ubuntu/ karmic main restricted
deb-src http://old-releases.ubuntu.com/ubuntu/ karmic main restricted

deb http://old-releases.ubuntu.com/ubuntu/ karmic-updates main restricted
deb-src http://old-releases.ubuntu.com/ubuntu/ karmic-updates main restricted

deb http://old-releases.ubuntu.com/ubuntu/ karmic universe
deb-src http://old-releases.ubuntu.com/ubuntu/ karmic universe
deb http://old-releases.ubuntu.com/ubuntu/ karmic-updates universe
deb-src http://old-releases.ubuntu.com/ubuntu/ karmic-updates universe

deb http://old-releases.ubuntu.com/ubuntu/ karmic multiverse
deb-src http://old-releases.ubuntu.com/ubuntu/ karmic multiverse
deb http://old-releases.ubuntu.com/ubuntu/ karmic-updates multiverse
deb-src http://old-releases.ubuntu.com/ubuntu/ karmic-updates multiverse

deb http://old-releases.ubuntu.com/ubuntu karmic-security main restricted
deb-src http://old-releases.ubuntu.com/ubuntu karmic-security main restricted
deb http://old-releases.ubuntu.com/ubuntu karmic-security universe
deb-src http://old-releases.ubuntu.com/ubuntu karmic-security universe
deb http://old-releases.ubuntu.com/ubuntu karmic-security multiverse
deb-src http://old-releases.ubuntu.com/ubuntu karmic-security multiverse

root@host5:~#

После этого необходимо «захолдить» необходимые для LAMP пакеты. Это нужно чтобы система не пыталась их обновить. mysql-server меня устраивает современной версии, а вот apache2 пришлось брать тоже древний, так как не хотело это все ставиться изза конфликта с apache2-common

root@host5:~# cat /etc/apt/preferences.d/php5_2
Package: apache2*
Pin: release a=karmic
Pin-Priority: 991

Package: php5
Pin: release a=karmic
Pin-Priority: 991

Package: libapache2-mod-php5
Pin: release a=karmic
Pin-Priority: 991

Package: libapache2-mod-php5filter
Pin: release a=karmic
Pin-Priority: 991

Package: php-pear
Pin: release a=karmic
Pin-Priority: 991

Package: php5-cgi
Pin: release a=karmic
Pin-Priority: 991

Package: php5-cli
Pin: release a=karmic
Pin-Priority: 991

Package: php5-common
Pin: release a=karmic
Pin-Priority: 991

Package: php5-curl
Pin: release a=karmic
Pin-Priority: 991

Package: php5-dbg
Pin: release a=karmic
Pin-Priority: 991

Package: php5-dev
Pin: release a=karmic
Pin-Priority: 991

Package: php5-gd
Pin: release a=karmic
Pin-Priority: 991

Package: php5-gmp
Pin: release a=karmic
Pin-Priority: 991

Package: php5-mhash
Pin: release a=karmic
Pin-Priority: 991

Package: php5-mysql
Pin: release a=karmic
Pin-Priority: 991

Package: php5-odbc
Pin: release a=karmic
Pin-Priority: 991

Package: php5-pgsql
Pin: release a=karmic
Pin-Priority: 991

Package: php5-pspell
Pin: release a=karmic
Pin-Priority: 991

Package: php5-recode
Pin: release a=karmic
Pin-Priority: 991

Package: php5-snmp
Pin: release a=karmic
Pin-Priority: 991

Package: php5-sqlite
Pin: release a=karmic
Pin-Priority: 991

Package: php5-sybase
Pin: release a=karmic
Pin-Priority: 991

Package: php5-tidy
Pin: release a=karmic
Pin-Priority: 991

Package: php5-xmlrpc
Pin: release a=karmic
Pin-Priority: 991

Package: php5-xsl
Pin: release a=karmic
Pin-Priority: 991

Ну и дальше стандартно устанавливаем нужные нам пакеты для LAMP:

root@host5:~# apt-get update
root@host5:~# apt-get install apache2-mpm-itk libapache2-mod-php5 php-pear php5-curl php5-dbg php5-mhash php5-mysql php5-tidy php5-xmlrpc php5-xsl
Ну и дальше стандартно … настройка всего этого вкуче. Ничего необычного … не вижу смысла описывать :) Скажу лишь что все получилось — проект заработал с полпинка, чего и вам желаю!

источник: http://diff.org.ua/archives/2069