mysql
mysql_secure_installation cвоими руками во FreeBSD
В большинстве пакетов mysql-server под Linux входи хороший скрипт mysql_secure_installation, которого очень не хватает в порте mysql во FreeBSD. Сделаем все своими руками!
› Continue reading
Mysql – быстрый заход в консоль.
Многие люди используют для управления базами или phpmyadmin или другие GUI программы. Я же предпочитаю консольную программу mysql. У того же phpmyadmin есть хорошее качество любого web приложения — оно может запоминать логин и пароль от базы, что очень удобно. Но и для консольной программы есть возможность организовать «быстрый» вход. При запуск mysql (и другие консольные программы из набора поставки mysql) просматривает домашний каталог пользователя в поисках файла .my.cnf, в котором могут быть какие-то настройки переменных сессии. В нем же можно задать и логин/пароль. Делается это в разделе [client]:
[client]
user=root
password=ifdJhfhb4n
Теперь все консольные программы будут автоматически подставлять логин и пароль из этого файла. Конечно же такая настройка понижает безопасность сервера mysql, потому необходимо позаботиться об безопасности файла. В данном случае используется учетная запись root и для сервера mysql и сервера как такового:
# chown -R root /root
# chmod -R 700 /root
# ls -la /root
…
-rwx—— 1 root root 27 May 1 23:15 .my.cnf
Mysql — настройка после установки.
Как правило, сразу после установки mysql… сразу начинают использовать. Но настройки «из коробки» подходят для небольших проектов с небольшой интенсивностью относительно простых запросов. Отсюда низкая производительность базы. А ведь достаточно поменять всего несколько настроек, чтобы ситуация изменилась кардинально. Сразу оговорюсь, речь будет идти в первую очередь про MyISAM, так как именно этот тип таблицы до сих пор используется наиболее часто (отчасти тут виноваты и настройки по умолчанию — именно этот движок таблиц установлен изначально для создания таблиц без указания типа).
› Continue reading
RAMFS и TMPFS в Linux
Жесткие диски — одна из самых медленных подсистем компьютера, иногда его пропускной способности очень не хватает. Выход — использовать диски в памяти. Для этого выделяется область памяти, в которую можно записывать файлы или считывать из нее файлы, как с обычного раздела жесткого диска. Но так операции записи/чтения происходят в памяти, то такой «дисковый раздел» по настоящему быстр.
В Linux есть две реализации дисков в память: tmpfs и ramfs. По сути они делают одно и тоже, но есть различия в их работе, которые нужно знать и учитывать при выборе.
Как создать диск в памяти? Сперва нужно создать каталоги для монтирования, потом создать диски в памяти
# mkdir /mnt/tmpfs /mnt/ramfs
# mount -t tmpfs -o size=100m tmpfs /mnt/tmpfs
# mount -t ramfs -o size=100m ramfs /mnt/ramfs
Если запустить mount, то мы увидим среди прочего
# mount
…
tmpfs on /mnt/tmpfs type tmpfs (rw,size=100m)
ramfs on /mnt/ramfs type ramfs (rw,size=100m)
Все очень похоже, но в чем тогда разница? При записи небольших файлов вы никогда ее и не заметите, но при больших объемах данных разница принципиальна.
Ramfs увеличивается динамически. Т.е. Если вы выделили 20 мегабайт под раздел tmpfs и попробуете записать 21 мегабайт, то у вас ничего не получится, будет выдано сообщение о нехватке места, а ramfs спокойно затребует нужное место из памяти. Причем, если у вас 4 Гб памяти, то при заполнении раздела ramfs в 4Гб скорее всего весь сервер зависнет.
Еще одна важная особенность, tmpfs использует swap, т.е. если физической памяти сервера не хватает, то tmpfs потеряет все свои плюсы. Ramfs напротив использует исключительно физическую память.
Еще один важный параметр работы MySQL
При записи, удалении или изменении таблиц mysql, СУБД выполняет блокировку таблицы, чтобы не повредить данные. Если блокировки выполняются долго – то это проблема. Т.е. запросы на изменения данных будут происходить дооолго.
Для того, чтобы посмотреть, были ли задержки при выполнении блокировок,нужно выполнить такой запрос:
mysql> show status like 'Table_locks_%';
+-----------------------+---------+
| Variable_name | Value |
+-----------------------+---------+
| Table_locks_immediate | 2473395 |
| Table_locks_waited | 459 |
+-----------------------+---------+
Если Table_locks_waited очень большое, то нужно что-то делать. Как вариант, если используется MyISAM, переходить на InnoDB. MyISAM блокирует изменяемую таблицу целиком, а InnoDB блокирует только изменяемую строку, а не таблицу целиком, что намного эффективнее при большой интенсивности изменений в базе.
Настройка производительности MySQL (MyISAM)

В свое время я достаточно долго искал в интернете внятное описание тюнинга производительности mysql и ничего подходящего не находил. На mysql.com главы документации о производительности носят скорее декларативный характер – “Сделайте так, и все будет хорошо” – без описание почему именно такие значения нужно выставить. Сейчас ситуация несколько меняется, появляются статьи о правильной настройке с объяснениями, похоже в основном благодаря книге High Performance MySQL. Этой публикацией я открываю небольшой цикл статей, призванных помочь системным администраторам и web-мастерам настраивать mysql.