How To Setup Disk Quotas For MySQL Database

by on January 28, 2008 · 6 comments· LAST UPDATED January 28, 2008

in , ,

This is a user contributed article.

MySQL server has no support for preventing disk from getting filled up. You need to depend upon external configurations. Let us see how to use standard Linux disk quota to limit user database size.

Suppose you have a user foo on the system as well as on MySQL. Now how do you limit space for foo?

Step #1: Create a separate directory for databases in foo's home say /home/foo/dbs with ownership mysql:foo and permissions 3755:
# mkdir /home/foo/dbs && chown mysql:foo /home/foo/dbs && chmod 3755 /home/foo/dbs
Step #2: Now move all foo's databases from /var/lib/mysql to /home/foo/dbs
# mkdir /root/backup
# cp -avr /var/lib/mysql/* root/backup
# mv /var/lib/mysql/database-name /home/foo/dbs/
# chown -Rf mysql:foo /home/foo
# chmod -Rf 3755 /home/foo
# ln -s /var/lib/mysql/database-name /home/foo/dbs/database-name -v

Finally, restart mysqld. If mysqld starts with OK status, then its working else it isn't:
# /etc/init.d/mysqld restart

NOTE- I AM NOT RESPONSIBLE FOR ANY DAMAGES OCCURRED & TO TEST THIS TRY RESTARTING mysqld. Always backup database before trying something new.

Other tools

  • MySQL Quota-Tool : 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.
  • MySQL Quota Daemon : MySQL Quota Daemon is a lightweight tool for limiting database sizes.
  • Developing a MySQL Quota Daemon : One of the drawbacks of MySQL is the lack of a real quota system. This article will cover how our ISP was able to solve this problem and keep track of our customers' databases. With this completely automated solution, many hours of administration work was avoided.
  • Feel free to add your tools and tricks in the comments.

About the author: This article is contributed by Nilesh.

TwitterFacebookGoogle+PDF versionFound an error/typo on this page? Help us!

{ 6 comments… read them below or add one }

1 Jonathan January 29, 2008 at 3:14 am

How will MySQL react when the quota kicks in? Will MySQL crash (I’ve googled it and a couple of people complained about MySQL crashing when the disk runs out of space)? What happens if MySQL is half-way through an insert and quotas kick in? Does it roll back the insert?

Reply

2 Nilesh January 29, 2008 at 12:53 pm

Johnathan, i have no solution for it. :D

Reply

3 Raj January 29, 2008 at 1:21 pm

Jonathan,

A few years back I used to work for a large ISP and we used to jail both MySQL and apache (apache request proxy via 2-3 backends) using FreeBSD jail. Each user has 2GiB disk space for MySQL. MySQL will stop private instance when user reaches her disk quota. This way it was only affecting a single user.

Today you can do the same thing using easily with XEN or other VPS software.

HTH

Reply

4 Mohammad December 19, 2008 at 3:20 pm

I have one single database and server. now load is too enough to break the thread between them and let the db server down. i want to do clustering. How to do database clustering and web server clustering. Please suggest.

Reply

5 Özkan ŞENOVA June 12, 2009 at 2:38 pm

third link is gone :S

Reply

6 Bachsau August 29, 2012 at 4:00 pm

This won’t work, as disk quota is calculated by inodes not directory. Additionaly, you don’t want to give others write and execute permissions to a users home, just to allow mysqld access it.

Reply

Leave a Comment

Tagged as: , , , , ,

Previous post:

Next post: