Многие люди используют для управления базами или 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… сразу начинают использовать. Но настройки «из коробки» подходят для небольших проектов с небольшой интенсивностью относительно простых запросов. Отсюда низкая производительность базы. А ведь достаточно поменять всего несколько настроек, чтобы ситуация изменилась кардинально. Сразу оговорюсь, речь будет идти в первую очередь про MyISAM, так как именно этот тип таблицы до сих пор используется наиболее часто (отчасти тут виноваты и настройки по умолчанию — именно этот движок таблиц установлен изначально для создания таблиц без указания типа).
(далее…)
При записи, удалении или изменении таблиц 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 и ничего подходящего не находил. На mysql.com главы документации о производительности носят скорее декларативный характер – “Сделайте так, и все будет хорошо” – без описание почему именно такие значения нужно выставить. Сейчас ситуация несколько меняется, появляются статьи о правильной настройке с объяснениями, похоже в основном благодаря книге High Performance MySQL. Этой публикацией я открываю небольшой цикл статей, призванных помочь системным администраторам и web-мастерам настраивать mysql.
(далее…)