2009-10-13 4 views
1

У меня есть сервер MySQL (только InnoDB) с несколькими пользователями. Каждый пользователь имеет доступ к одной эксклюзивной схеме. Как я могу ограничить размер схемы, чтобы каждый пользователь мог использовать только 1 ГБ (например)?Размер схемы MySQL

ответ

2

Сам MySQL не предлагает систему квот. Использование метода, предложенного Джеймсом Макнеллисом, вероятно, будет работать, однако, если InnoDB достигнет жесткого предела квоты, это, безусловно, не принесет стабильности; все файлы данных все еще подключены через системное табличное пространство, от которого невозможно избавиться.

К сожалению, я не вижу практического способа достижения желаемого. Если вас беспокоит использование дискового пространства, превышающее предопределенные лимиты, и вы не хотите идти по пути внешних правил квоты, я предлагаю остановиться в комбинированных настройках табличного пространства (то есть нет innodb_file_per_table) и удалить из конфигурации :autoextend.

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

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

+0

Это хороший момент, что MySQL, вероятно, не хотел бы исчерпывать дисковое пространство. Файл innodb_file_per_table может использоваться для поддержки мягких ограничений, поскольку вы знаете, сколько дискового пространства используется каждой базой данных. –

+0

Innodb должен хорошо переносить пробег на диске. MyISAM не работает; он блокирует процесс навсегда (это связано с тем, что он не имеет транзакций, поэтому он не может откатить любую работу, которую он уже сделал). Прошу протестировать, что происходит, когда InnoDB исчерпывает дисковое пространство. Вам нужно innodb_file_per_table. – MarkR

+0

Также обратите внимание, что вы не можете легко удалять пользователей из таблиц MyISAM - механизм встроен в mysql и не удаляется. Также могут использоваться временные таблицы и т. Д. Временные таблицы Innodb по-прежнему попадают в большой файл «ibdata1», когда включен параметр file_per_table. – MarkR

Смежные вопросы