Perl: DBI & MySQL — авто реконнект (reconnect)

Если вы программист на Perl и работаете с MySQL, то вот вам совет, как обеспечить коннект к серверу, и в тоже время, обеспечить себе легкую жизнь. Ведь если истечёт таймаут при работе с сервером, $dbh (database handle) будет не актуальным и выдаст ошибку. Особенно это актуально тогда, когда ваша программа работает с MySQL, и в то же время выполняет другие длительные операции, время которых может превысить таймаут-значение (connect timeout) MySQL. В такой ситуации ваш handle будет не актуальным.

Решение есть. Но в то же время есть ещё одна тонкость. DBB::mysql драйвер имеет опцию автореконнекта (mysql_auto_reconnect) и будет следить за актальностью handle и при случае переконнектится. Но вот что делать с коммандами, которые иногда надо выполнить сразу после коннекта, например SET NAMES ‘utf8’;SET CHARACTER SET ‘utf8’ ? И тут есть решение! Хотя найти его не всегда легко в интернет 🙂

Вообщем, вот код для коннекта из под Perl к MySQL так, чтобы всё работало пучком:

$dbh = DBI->connect( "dbi:mysql:database=database_name;mysql_client_found_rows=1;mysql_enable_utf8=1;mysql_socket=/socket_of_mysql", 'user', 'password',
    {
	RaiseError		=> 1,
	AutoCommit		=> 1,
	mysql_multi_statements	=> 1,
	mysql_init_command	=> q{SET NAMES 'utf8';SET CHARACTER SET 'utf8'}
    } ) or die "Cannot connect";
$dbh->{mysql_auto_reconnect} = 1;

Код проверен мною и тщательно протестирован

Оптимизация MySQL — select/insert

Было как то раз у меня постоянно проблема — очень долго исполнялись SELECT с JOIN запросы. Грешил я на долгое исполнение JOIN операций, хотя с индексами у меня был полный порядок. Что я только не делал — и настройки крутил MySQL, и код местами переписывал, чтобы оптимальнее работал. Но проблема оставалась. Причем это что-то грузило сервак конкретно, несмотря на оченбь мощное железо. Но вот нашел в инете одну статейку и она меня натолкнула на мысль — изменить priority операции INSERT/DELETE. Правки для двух строк кода убрали проблему совсем! И очень мощный сервак стал работать очень быстро… Я даже не ожидал такого! А теперь немного поподробнее…

Читать далее Оптимизация MySQL — select/insert

rsync — быстрый резерв + быстрый перенос сайтов

Когда-то давно, для резервирования, я использовал такие, казалось бы, незаменимые утилиты, как tar или pax. Я слышал в то время про rsync, но не представлял себе, как она в точности работает, поэтому я ощибочно полагал, что rsync — простая утилита копирования. А раз простая, то вряд ли я получу от нее много толку. Поэтому я продолжал и продолжал пользоваться tar или pax, затем копировал по scp эти архивы, там распаковывал и т.п.. Я даже использовал find затем, чтобы докопировать файлы, которые изменились за последние сутки. Эх, жаль, что я столько много истратил времени на копирование, ведь была rsync!

Читать далее rsync — быстрый резерв + быстрый перенос сайтов

readline команды (MySQL, bash, rlwrap)

Данная статейка уже носит чисто профессиональный характер — она для тех, кто работает в Unix и работает в bash, tcsh шеллах, а также работает с MySQL. Сейчас я расскажу о нескольких очень полезных «горячих» клавишах для работы в командной строке.

Читать далее readline команды (MySQL, bash, rlwrap)