The OpenNET Project
 
Поиск (ключи):    ПРОГРАММЫ СТАТЬИ СОВЕТЫ ФОРУМ
  WIKI НОВОСТИ (+) MAN'ы ДОКУМЕНТАЦИЯ

MySQL - квотирование баз под FreeBSD
Хитрости квотирования MySQL.

Каждую базу MySQL хранит в отдельном каталоге внутри datadir. MySQL работает под своим пользователем и соответственно создает файлы баз под им же. Соответственно квотирование в данном случае не возможно. Необходимо заставить его создавать файлы баз, влaдельцем которых будет конкретный квотируемый пользователь. Сделать это можно выставив бит SUID (4000) на каталог базы.

Для начала:


     в ядре:
        options SUIDDIR

     в /etc/fstab:
        добавляем в список опций suiddir

В MySQL создаем базу. Находим каталог базы в datadir. По умолчанию он будет mysql:mysql.


   Меняем владельца:
     chown sql-user databasedir
     теперь наш каталог sql-user:mysql
  
   Меняем права:  
       chmod 4070 databasedir

Такая настройка заставит систему создавать файлы от имени владельца каталога (sql-user) причем сам пользователь не будет иметь к нему доступа. К нему будет иметь полный доступ MySQL (от группы mysql).

Теперь мы можем использовать квоты как для обычных файлов. При превышении квот MySQL будет генерить ошибку full disk что является нормальным явлением и корректно отрабатывается MySQL, хотя сопровождается некоторыми проблемами: при запросе на добавление в базу, превысившую квоты, запрос повисает, повисают также последующие запросы, которые можно снять только их убийством или освобождением дополнительного места на диске. При дефолтных настройках это сразу вызовет проблему, так как такие запросы займут все сетевые соединения. Поэтому необходимо ОБЯЗАТЕЛЬНО ограничить максимальное количество подключений одного пользователя MySQL. В /etc/my.cnf:


   max_connections  = 500 (всего коннектов)
   max_user_connections = 30 (максимум для одного пользователя)

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

Убить повисшие процессы может только root базы если они достигли max_user_connections.

Не работает с таблицами innodb, так последние хранятся в одном месте независимо от базы.

Коментируйте.

 
26.10.2005 , Автор: Pahanivo
Раздел:    Корень / Программисту и web-разработчику / SQL и базы данных / MySQL специфика / Оптимизация и администрирование MySQL

Обсуждение [ Линейный режим | Показать все | RSS ]
 
  • 1.1, const86, 22:55, 27/10/2005 [ответить] [смотреть все]
  • +/
    Возможен ли такой же фокус с postgres'ом? Видал там некие tablespace, но не углублялся в суть...
     
     
  • 2.2, ртфлы, 06:25, 28/10/2005 [^] [ответить] [смотреть все] [показать ветку]
  • +/
    В postgre будут нормальные user quota Правда, только в 7 6... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.3, vvvua, 14:29, 28/10/2005 [^] [ответить] [смотреть все]  
  • +/
    А откуда такая инфа ... весь текст скрыт [показать]
     
  • 3.4, const86, 17:25, 28/10/2005 [^] [ответить] [смотреть все]  
  • +/
    Всё в постгресе хорошо, да только вот квот нет и с разными кодировками никак ... весь текст скрыт [показать]
     
  • 2.5, Pahanivo, 13:40, 02/11/2005 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Ну какбы сдесь квотирование использует тот факт что мускул хранит базы в разных ... весь текст скрыт [показать] [показать ветку]
     
  • 1.6, stellar, 11:52, 25/03/2006 [ответить] [смотреть все]  
  • +/
    В который раз поражаюсь аффффтарам с Опеннета.

    Это отвратительное решение. Потому что как только место для базы кончится, MySQL крякнет и с большой вероятностью запорет таблицу(ы) в базе.

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

    Вдобавок оно не работает с InnoDB.

    В результате Вы получите кривое решение, которое ничего, кроме головной боли не принесет.

     
     
  • 2.7, Pahanivo, 08:48, 06/04/2006 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Никто не сказал что решение идеальное Просто как вариант У тебя есть другое ... весь текст скрыт [показать] [показать ветку]
     
  • 1.8, Abigor, 08:27, 02/05/2006 [ответить] [смотреть все]  
  • +/
    а у меня вот что говорит
    # chown -vR management:mysql management/
    chown: management: Invalid argument
     
     
  • 2.9, Pahanivo, 10:48, 02/05/2006 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    chown R management mysql management ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.10, Abigor, 11:22, 02/05/2006 [^] [ответить] [смотреть все]  
  • +/
    chown R management mysql management chown R Invalid argument ... весь текст скрыт [показать]
     
     
  • 4.11, Pahanivo, 12:17, 02/05/2006 [^] [ответить] [смотреть все]  
  • +/
    >>chown R management:mysql management
    >
    >chown R management:mysql management
    >chown: R: Invalid argument


    Sorry )) -R ))
    > man chown )

     
  • 1.12, voron, 16:07, 08/07/2006 [ответить] [смотреть все]  
  • +/
    http://projects.marsching.org/mysql_quota/
    The MySQL Quota-Tool helps you to set a size limit on MySQL databases.

    It works by checking the size of each database and revoking the INSERT- and CREATE-priveleges for the databases, which exceed the given size limit.
    When the size of the database falls below the given limit, the INSERT- and CREATE-priveleges are granted again.

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

    хотя лучшим решением наверно будет комбинация 2-х решений, чтобы какой-нить запрос вроде load data( которым можно гигабайты заливать), не завалил диск

     
     
  • 2.13, Pahanivo, 15:02, 25/08/2006 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    >http://projects.marsching.org/mysql_quota/
    >The MySQL Quota-Tool helps you to set a size limit on MySQL
    >databases.
    >
    >It works by checking the size of each database and revoking the
    >INSERT- and CREATE-priveleges for the databases, which exceed the given size
    >limit.
    >When the size of the database falls below the given limit, the
    >INSERT- and CREATE-priveleges are granted again.
    >
    >не мегакрасивое решение, но зато без фатальных последствий для пользователя, базы и
    >тп.
    >
    >хотя лучшим решением наверно будет комбинация 2-х решений, чтобы какой-нить запрос вроде
    >load data( которым можно гигабайты заливать), не завалил диск

    Возможно комбинация будет лучше, но прикинте скока гемора чтобы завети одну паршивую базу ))
    Блин, столько лет существует мускул - почему не могут это сделать средствами сервака?

     
  • 1.14, Exe, 14:26, 11/11/2006 [ответить] [смотреть все]  
  • +/
    кто вам сказал что innodb обязательно все базы в одном файле? учите маны, они рулез.
    хинт: innodb_file_per_table
     
  • 1.15, Jack, 07:22, 03/03/2007 [ответить] [смотреть все]  
  • +/
    А вот в 5.0.X поведение MySQL сервера не очень понятное. При правах на директорию БД 070, где 7 - права для группы в которую входит псевдопользователь от которого работает MySQL, сервер не видит эту БД. Т.е. 'show databases' - не находит базу. А вот запрос 'use my_db' - Успешен и уже внутири этой БД возможно осуществлять все операции с таблицами. Может кто знает с чем это связано, и как версию 5.0.Х приточить к использованию квотирования описанному в исходной статье.
     
     
  • 2.16, stellar, 12:14, 21/03/2007 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Повторяю: Квотирование средствами файловой системы - отвратительное решение. Потому что как только место для базы кончится, MySQL с большой вероятностью запорет таблицу(ы) в базе.

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

    Вдобавок оно не работает с InnoDB.

    В результате Вы получите кривое решение, которое ничего, кроме головной боли не принесет.

     
     
  • 3.19, ol, 15:00, 26/02/2008 [^] [ответить] [смотреть все]  
  • +/
    >[оверквотинг удален]
    >место для базы кончится, MySQL с большой вероятностью запорет таблицу(ы) в
    >базе.
    >
    >Если Вам надо иметь проблемы с регулярным восстановлением базы у клиентов --
    >дерзайте.
    >
    >Вдобавок оно не работает с InnoDB.
    >
    >В результате Вы получите кривое решение, которое ничего, кроме головной боли не
    >принесет.

    ну хоть 10 раз повтори
    у тебя есть другое решение? вот и не умничай )))

    лично я квоты поставил в два раза больше чтобы серв не свалился, а по крону проверяю размер базы и шлю на мыло пользователям сообщения, что это им боком может выйти, пусть пишут если база нужна больше или чистят..

     
  • 3.20, Pahanivo, 19:41, 22/03/2008 [^] [ответить] [смотреть все]  
  • +/
    Тебя все прекрасно поняли дорогой. Но предположим вариант:
    у тебя на серваке мало места свободного осталось и помимио мускула висит пара процессов общитывающих трафик, которые весьма критичны к свободному пространству. А юзер любит заливать в базу бааальшие порции инфы.
    Вот теперь вопрос: что критичнее - база юзера, которую можно поднять из бекапа или неучтенный трафик и соотвесвенно проепаные деньги за которые тебя еще и вздрючат?
     
  • 1.17, abrikos, 06:41, 05/06/2007 [ответить] [смотреть все]  
  • +/
    а если написать скрипт проверяющий размер базы и при привышении отменять привилегии на insert ?
     
     
  • 2.18, Pahanivo, 09:17, 13/06/2007 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    >а если написать скрипт проверяющий размер базы и при привышении отменять привилегии
    >на insert ?

    тоже вариант

     
  • 1.21, chesnok, 00:07, 02/09/2009 [ответить] [смотреть все]  
  • +/
    на п0нTаL0o0n-хостинге у бородачей работает скрипт usr bin perl use lib qw ... весь текст скрыт [показать]
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:

     Добавить заметку
     Версия для печати
     
     Поиск заметки:
     

    Последние заметки
    - 12.05 Организация шифрованного бэкапа с помощью rdiff-backup, encfs и Dropbox
    - 11.05 Настройка беспроводного соединения в Debian GNU/Linux
    - 07.05 Использование Google Drive в Linux
    - 18.04 Использование нескольких сетевых стеков в Linux
    - 15.04 Восстановление стандартного KDE меню после его удаления (например, wine)
    - 11.04 Настройка gmirror при использовании GPT во FreeBSD 9
    - 09.04 Маршрутизатор на базе FreeBSD с приоритизация трафика средствами PF и ALTQ
    - 02.04 Частичное восстановление данных MySQL из бэкапа, созданного с использованием LVM
    - 21.03 Настройка DNSSEC в BIND 9.9
    - 17.03 Набор номера на Cisco IP Phone 7960/7940 из скрипта
    RSS | Следующие 15 записей >>


    ПОДПИШИСЬ НА ЖУРНАЛ Linux Format 2012!

    Журнал "Linux Format" (Линукс Формат)- Единственный в России и странах СНГ журнал на русском языке, посвящённый Linux и свободному ПО. Журнал для IT-директоров, IT-менеджеров, программистов, системных администраторов, учителей школ и преподавателей ВУЗов и всех пользователей ПК. В каждом выпуске: Новости индустрии OpenSource, обзоры новинок свободного ПО, обучающие и методические статьи.

    Каждый, кто оформит подписку, получает бонусы и подарки- объёмные наклейки на системный блок, диск с архивом номеров за 2005-2011 г.г. и ежемесячно электронную версию журнала в pdf-формате.

    Оформить подписку на год


      Закладки на сайте
      Проследить за страницей
    Created 1996-2012 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    RUNNet TopList