Как снизить потребление оперативной памяти mysql c типом таблиц InnoDB

После установки вебсервера через htop посмотрел, что вся оперативная память скушана. При этом почти всю ее занимали процессы mysql.

Для того чтобы уменьшить количество процесс можно добавить в конце файла /etc/mysql/my.cnf строку:
skip-innodb

Затем необходимо перезапусть процесс MySql.

Приведенным решением мы выключили возможность использования тип таблиц InnoDB. Для того чтобы все-таки сохранить использование данного типа и тем не меннее сократить потребление оперативной памяти нужно ближе к верху в файле /etc/init.d/rc дописать строку:
ulimit -s 1024

Затем перезагрузите MySQL.

Для тестирования всего этого дела, если боязно лезть сразу в /etc/init.d/rc, можете
1) посмотреть, сколько занимает в памяти какой-нибудь процесс,
2) в шелле ввести ulimit -s <сколько-нибудь, в килобайтах>,
3) перезапустить процесс (что-нибудь в духе /etc/init.d/mysql restart)
4) посмотреть еще раз, сколько теперь занимает, и проверить, что все работает

Настройка удаленного доступа к mysql

Редактируем конфиг
В файле /etc/mysql/my.cnf заменяем значение вот на такое.
bind-address            = 0.0.0.0


Заходим в mysql и добавляем удаленный доступ для root
mysql -u root -p
password:
mysql> USE mysql;
mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'some_password';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
mysql> FLUSH PRIVILEGES;


Теперь можно удаленно подключаться к серверу.

MYSQL:Урок.Доступ к данным через web-интерфейс

Продолжение, предыдущий урок — SQL для начинающих

Доступ к данным через web-интерфейс


В данной главе мы научимся подключать базу данных MySQL к нашему сайту, а также узнаем, каким образом мы можем управлять данными через web -интерфейс (то есть через браузер).

На данный момент у вас должна быть создана база данных «school», включающая таблицу «user». Таблица должна содержать пять полей:

id_user (счетчик)
    user_name (текст)
    user_login (текст)
    user_password (текст)
    user_e-mail (текст)
    user_info (текст большого объема)


В ходе занятия мы создадим php -файла, который назовем user.php. Он должен иметь следующую структуру:
Читать дальше →

ОШИБКА:MySQL server has gone away

MySQL server has gone away

Такая ошибка выдается, если долгое время не производится работы с открытым соединением с базой данных MySQL. Например, в случае чтения файла большого размера и разбора его в структуру.

Вариантов решения данной проблемы несколько:


  1. Поиграться с таймаутами, если есть доступ к изменению параметров.
  2. В случае появления такой ошибки производить повторное соединение, например, с помощью какой то своей функции reconnect().
  3. Реализовать асинхронное тестирование соединения с базой данных, чтобы соединение не отваливалось.

Реализация последнего варианта на языке Perl (DBI, DBD::mysql) в среде Linux возможно через сигнал SIGALRM:

$SIG{ALRM} = sub {
 warn("DEBUG: SIGALRM: ping ...") if ($ENV{DEBUG});
 unless ($dbh->ping()){
   die("ERROR: SIGALRM: Ping is undef. Need reconnect.\n");
 }
 alarm(3);
};
alarm(3);

Импорт из csv в MySQL

Чтобы быстро выгрузить в базу данных файл в формате csv достаточно воспользоваться встроенной в mysql командой. Это решение является самым простым и быстрым, так как не требует ни знания скриптовых языков, ни использования специального программного обеспечения для управления данными.

mysql> load data local infile 'c:\input.csv' into table people character set utf8 fields terminated by ',' enclosed by '"' lines terminated by '\r\n' (id, first_name, last_name, passport_number);


Имя входного файла:

'c:\input.csv'


Поля в csv файле разделены символом «запятая»:

fields terminated by ','


Символ перехода строки, используемый в Windows:

lines terminated by '\r\n'

32 совета для ускорения MySQL запросов

Если вам интересно, как создавать по-настоящему быстрые запросы к MySQL, эта статья для вас.

1. Используйте постоянное соединение с базой данных, чтобы избежать системных издержек.

2. Проверьте, чтобы на столбцах с высоким количеством уникальных элементов был PRIMARY KEY. Например, у столбца `gender` есть всего 2 варианта (male и female). Уникальный ID пользователя, напротив, содержит большое количество значений и подходит для того, чтобы стать первичным ключом.

3. Желательно, чтобы все связи между таблицами были с индексами (что подразумевает, что у них должны быть одинаковые типы данных, благодаря этому запросы будут быстрее). Также проверьте, чтобы поля, в которых необходимо делать поиск (часто появляются в выражениях WHERE, ORDER BY или GROUP BY) имели индексы. Но не добавляйте слишком много индексов: худшее, что вы можете сделать, это добавить индекс каждому столбцу в таблице (я не видел более 5 индексов даже в таблице с 20-30 столбцами). Если вы никогда не сравниваете столбец с другими данными и не проводите по нему поиск, незачем ставить на нём индекс.

4. Используйте как можно более простые привилегии, когда вы выполняете команду GRAND, чтобы уменьшить издержки из-за проверки привилегий во время подключения к базе.
Читать дальше →

Является ли DNS Ахиллесовой пятой вашего сервера MySQL?

Установлена ли у вас опция skip_name_resolve в my.cnf? Если нет, подумайте об этом. DNS работает хорошо то тех пор пока что-то не ломается. Не позвольте сломаному DNS сломать вам сервер MySQL.

Действительно ли вам нужно ограничивать доступ к MySQL по именам хостов? Если нет, вам определенно стоит отключить эту функцию системы аутентификации MySQL. Вы не можете знать когда DNS-сервер вашено провайдера (или даже ваш собственный) захочет отдохнуть. Но когда это случается, MySQL загадочным образом не отказывает в коннекте пользователям, и очень сложно понять в чем же причина.
Читать дальше →

10 вещей которые вам необходимо знать о утилитах бекапа MySQL

backup

Вы используете стороннее решение для бекапа MySQL баз? Обращаете ли вы достаточно внимания на сохранность ваших данных? Уверены ли вы что у вас есть стабильный и восстанавливаемый бекап, который спасет ваш бизнес и ваше приложение, и не будет влиять на важные процессы во время взятия? Вот вопросы на которые вы должны ответить чтобы проверить себя:
Читать дальше →

Mysql — настройка и оптимизация после установки.

Как правило, сразу после установки mysql… сразу начинают использовать. Но настройки «из коробки» подходят для небольших проектов с небольшой интенсивностью относительно простых запросов. Отсюда низкая производительность базы. А ведь достаточно поменять всего несколько настроек, чтобы ситуация изменилась кардинально. Сразу оговорюсь, речь будет идти в первую очередь про MyISAM, так как именно этот тип таблицы до сих пор используется наиболее часто (отчасти тут виноваты и настройки по умолчанию — именно этот движок таблиц установлен изначально для создания таблиц без указания типа).

Первым пунктом при редактировании my.cnf будет кеш запросов, по умолчанию размер кеша запросов равен нулю, что равнозначно отключению оного. В некоторых дистрибутивах сборка mysql идет с отличающимся от дефолтного конфигурационным файлом, но проверить параметр в любом случае стоит.
Читать дальше →