<MyRusakov.ru />

Профессия Web-разработчик

Профессия Web-разработчик

Этот комплект за 8 месяцев превратит Вас в Web-разработчика с нуля. Учиться достаточно 1 час в день.

Начнёте Вы с HTML, CSS и вёрстки сайтов. Потом перейдёте к программированию и JavaScript. Затем изучите PHP, MySQL, SQL, Python. Изучите Web-фреймворки Laravel и Django. Создадите 5 своих сайтов для портфолио.

Комплект содержит:

- 540 видеоуроков

- 110 часов видео

- 1205 заданий для закрепления материала из уроков

- 5 финальных тестов

- 7 сертификатов

- 12 Бонусных курсов

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

Ошибка max user connections в MySQL

Ошибка max user connections в MySQL

Когда Ваш сайт (на PHP и MySQL) становится достаточно популярным, то время от времени у Вас будет появляться ошибка превышения количества одновременных подключений к базе данных (max user connections). Это происходит по той причине, что одновременно несколько посетителей делает запрос к базе данных. Как правило, у обычного хостинга - это максимум 5-7 одновременных соединений к базе данных. В этой статье я расскажу, как свести вероятность появления этой ошибки к самому минимуму.

Первым делом, Вы должны исправить код:

  1. Всегда закрывать соединения с базой данных.
  2. Добиться того, чтобы при загрузке одной страницы создавалось только одно соединение. Эта ошибка особенно часто встречается при ООП, поскольку зачастую в каждом объекте создаётся своё соединение с базой. Это в корне неправильно и нужно 1 раз вначале соединиться с базой данных, а потом передавать объект (или идентификатор соединения) через конструктор в каждый объект.

Это были технические ошибки, которые программисты очень часто совершают. Однако, и устранения этих ошибок, увы, бывает недостаточно. Здесь есть два выхода: купить более дорогой хостинг (или даже выделенный сервер), либо пойти на маленькую хитрость.

Хитрость заключается в определении "max user connections". Фактически, жёсткое ограничение на количество соединений лежит на ОДНОМ пользователе. А поскольку, как правило, к базе обращается только 1 пользователь, то он и вынужден одновременно обрабатывать кучу запросов от разных посетителей. Решение очень простое. Надо создать несколько пользователей базы данных и в движке сайта случайным образом выбирать пользователя, который будет обращаться к базе. Таким образом, нагрузка уменьшится в несколько раз. А фактическое количество допустимых одновременных соединений возрастёт в несколько раз. Безусловно, до бесконечности создавать пользователей нельзя, поскольку ограничение на суммарное количество одновременных соединений от всех пользователей тоже имеется. Но эта цифра, как правило, в районе 100, что, разумеется, уже не 5-7.

В результате, Вы можете держать очень посещаемый сайт на вполне недорогом хостинге.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

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

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (28):

sync.o sync.o 12.11.2011 01:16:49

Хитро!

Ответить

leon leon 12.11.2011 12:07:41

А сколько стоит примерно аренда сервера?

Ответить

brussens brussens 12.11.2011 17:31:34

Аренда именно физического сервера около 100$ в месяц

Ответить

svora svora 14.09.2016 13:53:47

Достаточно и виртуального сервера, например https://bitweb.ru/vps.html

Ответить

khlusov khlusov 17.11.2011 11:29:36

Прошу разъяснить: "Надо создать несколько пользователей базы данных и в движке сайта случайным образом выбирать пользователя, который будет обращаться к базе". Я так понимаю, что надо создать несколько пользователей базы данных MySQL. А вот каким образом сделать что бы они выбирались случайным образом в движке сайта при обращении к базе??? Использую Joomla15

Ответить

Admin Admin 17.11.2011 11:36:26

В файле configuration.php добавьте массив с именами пользователей ($users), а в константе, отвечающей за пользователя: mt_rand(0, count($this->users) - 1); и сам пользователь = $users[$n_user]

Ответить

khlusov khlusov 17.11.2011 12:38:09

Не совсем понял. в файле есть var $user = 'hosting_admin'; Мне нужно добавить таких юзеров? Это и будет массив или массив добавляется по другому? (я только начинаю разбираться)

Ответить

khlusov khlusov 17.11.2011 14:32:59

Понимаю так: пишем $users = 'hosting_admin' 'hosting_user1' 'hosting_user2'; потом $mt_rand(0, count($this->users) - 1); далее $user = $users[$n_user]; Правильно?

Ответить

Admin Admin 17.11.2011 17:51:13

var $users = array("hosting_admin", "hosting_user1", "hosting_user2"); - это как массив объявить.

Ответить

khlusov khlusov 17.11.2011 14:34:11

Вот это: mt_rand(0, count($this->users) - 1); где и как писать?

Ответить

Admin Admin 17.11.2011 17:52:11

var $n = mt_rand(0, count($this->users) - 1); var $user = $this->users[$n]; А вообще PHP надо знать для решения такой задачи.

Ответить

oo22max oo22max 05.01.2012 08:43:52

А на DLE можно сделать? Если можно то как?

Ответить

Admin Admin 05.01.2012 13:03:09

Можно, я думаю, что где-то есть файл configuration.php или config.php, вот его-то и нужно отредактировать.

Ответить

oo22max oo22max 05.01.2012 20:15:22

Есть такой файл dbconfig.php, и там содержится: define ("DBHOST", "localhost"); define ("DBNAME", "test1"); define ("DBUSER", "test1"); define ("DBPASS", "test1"); define ("PREFIX", "dle"); define ("COLLATE", "cp1251"); define ("USERPREFIX", "dle"); $db = new db; Получается его редактировать надо?

Ответить

Admin Admin 05.01.2012 20:32:53

Да, его.

Ответить

oo22max oo22max 05.01.2012 20:39:16

if(mt_rand(1,2)==1) {//коннект через одного юзера } else { коннект через другого } Примерно так надо? Проконсультируй пожалуйста!

Ответить

morkovni morkovni 28.11.2013 09:33:46

Михаил, добрый день! Помогите пожалуйста: перепробовал много вариантов, таких как Ваш: var $users = array("root", "boot", "foot"); var $n = mt_rand(0, count($this->users) - 1); var $user = $this->users[$n]; такой: http://stackoverflow.com/questions/20244066/several-mysql-users-in-joomla-1-5-configuration-php но все выдают "Parse error: syntax error". В первом случае это Parse error: syntax error, unexpected '(', expecting ',' or ';' in configuration.php on line 41 Подскажите пожалуйста, где ошибка?

Ответить

tikkiwiki tikkiwiki 28.11.2013 10:09:35

Здравствуйте, Владимир. Ошибка в синтаксисе, внимательно проверьте.

Ответить

morkovni morkovni 28.11.2013 10:20:08

я уже перепробовал все версии размножения пользователей, которые смог найти в интернете; пробовал mt_rand и array_rand, пробовал выбирать из массива по индексу: var $user = $this->users[1]; но все варианты приводят либо к unexpected T_VARIABLE либо к unexpected '('

Ответить

tikkiwiki tikkiwiki 28.11.2013 10:27:22

Еще раз повторюсь, у Вас ошибки в синтаксисе. Проверьте ";", "", '' , {,}. на недостающие.

Ответить

morkovni morkovni 28.11.2013 11:07:57

Благодарю за помощь, проблему решил добавлением функции: var $user = ''; var $users = array("root", "boot", "foot"); public function __construct() { $this->user = $this->users[mt_rand(0, count($this->users) - 1)]; } Я не силен в php, но видимо проблема была в том, что я пытался вызвать функцию в объявлении переменных класса...

Ответить

oo22max oo22max 06.01.2012 19:33:10

Все консультация не нужна, все сделал, работает =). Спасибо за идею!

Ответить

volkodafer volkodafer 26.05.2013 12:31:46

Здравствуйте, Михаил А для сайта на wordpress что и где прописать для меня ваш хитрый ход может быть спасательным кругом,хостинг закрыл мой сайт, как раз из за перегрузки сервера, купить выделенный нет возможности вот читаю ваши статьи уже второй день думаю эта хитрость мне помогла бы но я полный ноль мне надо знать куда и где после чего или до чего вставлять(для реализации этой штуки)возможно пользователей смогу наштамповать в phpmyadmin искал информацию по оптимизации долго в разных местах а нашёл у себя на почте оказывается я ваш подписчик вот начал читать, читаю с большим интересом но сайт закрыт уже больше недели (просьба закиньте в моё болото спасательный круг)я буду очень благодарен Вам.

Ответить

Admin Admin 26.05.2013 15:52:57

Я не работаю с готовыми движками http://myrusakov.ru/php-engine-vs-null.html А исправлять нужно где-то в конфигурационном файле. Но без знаний по PHP не получится.

Ответить

lokomanx lokomanx 07.12.2013 12:26:20

А десяти пользователей хватит для того, чтобы обеспечить максимально возможную нагрузку на хостинг?

Ответить

alexandrdante alexandrdante 07.12.2013 12:29:37

да хватит и одного) продублируйте запрос раз этак 400 и увидите) или вы имеете в виду пользователей БД если да,то это не столь важно и вообще всё зависит от дозволенных ресурсов хостера на ваш аккаунт =)

Ответить

lokomanx lokomanx 07.12.2013 13:34:24

Но я не думаю, что дозволенные ресурсы хостера позволят различным посетителям безгранично загружать страницы используя только одного пользователя БД. Потому и спросил, может кто слышал об этом.

Ответить

alexandrdante alexandrdante 07.12.2013 13:41:48

защит много от этого)вообще то,что нагрузка велика - всё от плохой оптимизации. а положить сайт,как я уже говорил,может и один пользователь) например,сделайте сто новостей,и для каждой вывод из бд - отдельным запросом,с предварительным входом в базу для каждого и попробуйте зайти на такой сайт на хостинге =)

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.