Проверка и оптимизация всех MySQL бд одной командой

Есть хорошая MySQL утилита, называется mysqlcheck, с помощью этой утилиты можно выполнить сразу несколько полезных операций над всеми MySQL базами данных. Команду нужно запускать от суперпользователя root.

Восстановление & Оптимизация

mysqlcheck -Aor

Только ввостановление

mysqlcheck -Ar

Только оптимизация

mysqlcheck -Ao

Описание аргументов:
-A — Проверить на ошибки все Mysql базы данных
-r — Отремонтировать все Mysql базы данных
-o — Оптимизировать все Mysql базы данных

Не ошибитесь в выборе роутера!

Очень важно: если Вы решили купить роутер от АСУСтека, то не совершите ошибки в его выборе, пытаясь сэкономить!

Модели снятые с производства:
НЕ РЕКОМЕНДУЕТСЯ покупать wl500g, wl500b, wl500b v2 из-за проблем в железе!
НЕ РЕКОМЕНДУЕТСЯ покупать wl520g из-за сильной «усечённости» в софте, связанным с маленьким объёмом флеш!
НЕ РЕКОМЕНДУЕТСЯ покупать wl530g, wl330g из-за «дешевизны» WiFi части (собраны на marvel).
РЕКОМЕНДУЕТСЯ к покупке WL500g Deluxe, как наиболее устойчивая модель.
УСЛОВНО РЕКОМЕНДУЕТСЯ к покупке WL550gE, но следует учесть, что в нём нет внешних USB портов

Модели в продаже
УСЛОВНО РЕКОМЕНДУЕТСЯ к покупке WL320gE/WL320gP (наследники WL550gE), но следует учесть, что в них нет внешних USB портов и только один проводной порт
РЕКОМЕНДУЕТСЯ к покупке WL500g Premium, как наиболее гибкая и быстрая модель в этом семействе
РЕКОМЕНДУЕТСЯ к покупке WL500W, как наиболее быстрая модель в этом семействе

Бюджетные модели в продаже:
УСЛОВНО РЕКОМЕНДУЕТСЯ WL520gC: самая простая модель
УСЛОВНО РЕКОМЕНДУЕТСЯ WL520gU: тоже самое с USB портом и принт-сервером
Эти устройства, тем не менее, вполне работоспособны и имеют в настоящий момент поддержку: http://wl500g.info/showthread.php?t=11830. Хороший выбор, если Вам нужно чтобы просто работала сеть, без лишних затрат. По быстродейтсвию устройства уступают WL500gP, WL500W, но выигрывают у большинства сравнимых по цене изделий других компаний, при этом работают стабильно, без «подвисов и перегревов».

Модифицированная прошивка работает с: WL300g/WL500g/WL500g Deluxe/WL500b/WL500bv2/WLHDD/WL550gE/WL500g Premium/WL500W/WL320GE/GP/WL500GP v2/WL520GU/WL330gE

Табличка с характеристиками железок здесь.

Покупка ASUS WL-500G Premium — V1 vs V2 — какую версию брать?

Pinba — демон для сбора статистики о PHP-скриптах

Документация, исходники и всё остальное доступно на pinba.org.

Кратко о том, что это и для чего это:
Это демон для сбора статистики о выполнении PHP-скриптов. Статистика есть двух видов — общая (скрипт, время, rusage, объем вывода и др.) и данные по таймерам. Таймеры тут один из ключевых моментов, поэтому они достойны отдельного упоминания, см. ниже.
В то же время, это не standalone-демон, данные собираются отдельным тредом в MySQL. При этом функционал MySQL используется для доступа к данным (которые видны пользователю как обычные таблицы, только read only), т.е. для выборок можно использовать обычный SQL.
Статистика не хранится вечно, это просто невозможно, хранится только актуальная статистика (это понятие для всех разное и конечно это настраивается), так что возьмем для примера 1 000 000 последних запросов или 15 минут — т.е. хранятся все запросы за последние 15 минут, но не более миллиона записей. В зависимости от количества таймеров, эти данные могут занимать от 500Mb до нескольких Gb памяти. На диск, конечно, ничего не пишется.

Подробнее о таймерах:
Таймеры нужны для замеров конкретных частей кода. У таймеров есть «таги» для описания и группировки.
Например, есть у вас коннект к базам — оборачиваете его в таймер с тагами «operation»=>»connect», «db»=>$dbase. В результате мы получаем статистику по одному тагу — «сколько раз в секунду у нас выполняется операция connect и сколько времени она занимает» и по двум — «сколько раз в секунду у нас выполняется операция connect к конкретному серверу и сколько она занимает».
Тагов и таймеров может быть произвольное количество (но про разум не стоит забывать тоже, всё это доп. нагрузка на сервер).

Несколько примеров использования от Фишера: http://pinba.org/wiki/Manual:Usage_examples
Вся документация: http://pinba.org/wiki/Manual

Если вам интересно и/или есть вопросы/предложения — welcome.

autoconf 2.62 и старые версии FreeBSD

При необходимости установить autoconf версии 2.62 и выше из портов в FreeBSD 5.x или, тем более, 4.x, возникает проблема с texinfo. Например, появляются такие ошибки:

autoconf-2.62.texi:1723: Unknown command `'.
autoconf-2.62.texi:3353: Unknown command `’.

По этой ссылке указано, что надо с этим делать. В общем, надо всего-то добавить пару строк в Makefile и чуть-чуть изменить последнюю строку, и всё соберётся без проблем.

UPDATE: получившийся у меня Makefile

UPDATE2: in case you don’t speak Russian, please, read this the full version of this post.

If you have ‘old’ version of FreeBSD (4-5) and experiencing problems with texinfo while updating autoconf, you should read this link. It tells what you should add to Makefile in order to update autoconf. As a result, this Makefile worked for me.

Валидация данных в PHP при помощи filter_var

Основой безопасности любого приложения является простое правило: «пришедшим от пользователя данным доверять нельзя». Для этой цели пишется довольно большое количество кода, хотя типичные задачи можно решить стандартными средствами PHP ничего не изобретая.

Например, таким образом можно проверить адрес e-mail при помощи filter_var:

if (filter_var($user_email, FILTER_VALIDATE_EMAIL)) {
// правильный
}

также можно убрать лишнее, например, из URL:

$sanitized_url = filter_var($url, FILTER_SANITIZE_URL);

Хотя filter_var() есть в стандартном PHP начиная с версии 5.2.0, документация на него, особенно русская, хромает.

Нормальная документация и примеры:
Руководство w3schools.
Input Validation: Using filter_var() Over Regular Expressions.
Data Filtering Using PHP’s Filter Functions

MySQL: utf8_unicode_ci или utf8_general_ci?

Какую таблицу из двух выбрать для своей базы данных в случае использования UTF?

utf8_general_ci
Убирает все акценты и приводит к верхнему регистру: ÀÁÅåāă = A, ü = U.
Не очень точно отрабатывает при сортировках. Иногда полезно при поиске. Быстрее utf8_unicode_ci.

Подходит для Русского. При использовании Белорусского и Украинского сортировка будет не верной.

utf8_unicode_ci
Довольно точно при сортировке и поиске. Например, ß (немецкий эсцет) будет при сортировке располагаться рядом с ss, как ему и положено. Медленнее utf8_general_ci.

Замечательно подходит для Русского, Белорусского и Украинского.

Итог
Если проект исключительно русскоязычный и скорость поиска и сравнения критична — можно остановится на utf8_general_ci. Если же есть планы по поддержке большего количества языков — лучше использовать utf8_unicode_ci.

Полные таблички utf8_unicode_ci и utf8_general_ci (там, кстати, и все остальные есть).

MySQL: How do you set up master-master replication in MySQL?

Setting up master-master replication in MySQL is very similar to how we set up master/slave replication. There is obviously pros and cons about using master/master replication. But this is not a post which discuses advantages and disadvantages for using master/master replication. One of the differences between master/master set up and master/slave is that in master/master set up, you have true redundancy. If one server dies, second server can take all the inserts/selects. In master/slave setup, if master dies, you will have to go through steps to make slave become the master. Master/master set up we are going to set up is essentially master/slave and slave/master. Meaning, if you had two servers, db0 and db1, your setup will be db0(master)/db1(slave) and also db0(slave)/db1(master). Here are some assumptions:

Master1 server ip: 10.0.0.1
Master2 server ip: 10.0.0.2
Slave username: slaveuser
Slave pw: slavepw
Your data directory is: /usr/local/mysql/var/

Read the rest of this entry »

Tip: запускать задачу раз в месяц в субботу

Часто необходимо запускать что-то (например полный бекап бд) раз в месяц, но в выходной, допустим в ночь с субботы на воскресенье.

Это можно сделать в crontab следующим образом

0 23 * * 6 [`date "+%d"` -lt 8] && /path/to/script

Это запустит скрипт в первую субботу месяца в 23:00.

MySQL Performance Tuning Primer Script

MySQL Performance Tuning Primer Script
http://www.day32.com/MySQL/
http://www.day32.com/MySQL/tuning-primer.sh

This script takes information from «SHOW STATUS LIKE…» and «SHOW VARIABLES LIKE…»
to produce sane recomendations for tuning server variables.
It is compatable with all versions of MySQL 3.23 and higher (including 5.1).

Read the rest of this entry »

MySQL performance tuning

This document serves as a starting point for MySQL performance tuning. This document is a combination of research and experience. When I started this document, I utilized a great Google video [1] as a reference for the document structure and many bullet items. I would suggest watching this video. I then filled in a few blanks, and combined a few other articles into this overview.

You may also want to check out this good article from MySQL on performance tuning.. Now onto the show..

Benchmarking

As with all improvement activities, it is better to start with a known problem area that is able to be defined, or an activity where improvement will provide maximum benefit (the 80/20 rule works everywhere). Nobody can really grasp an intangible goal like “we want to achieve excellence” [4].

The following are decent guidelines to start with [1]:
» Target. You must have a target.
» Establish a baseline.
» Change only one thing at a time (if possible).
» Record Everything, you will need it at some point.
» Optionally disable query_cache, by setting query_cache_size = 0 for benchmarking.

Read the rest of this entry »