How To Setup Disk Quotas For MySQL Database

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.

Want to read Linux tips and tricks, but don't have time to check our blog everyday? Subscribe to our daily email newsletter to make sure you don't miss a single tip/tricks. Subscribe to our weekly newsletter here!

{ 5 comments… read them below or add one }

1 Jonathan 01.29.08 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?

2 Nilesh 01.29.08 at 12:53 pm

Johnathan, i have no solution for it. :D

3 Raj 01.29.08 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

4 Mohammad 12.19.08 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.

5 Özkan ŞENOVA 06.12.09 at 2:38 pm

third link is gone :S

Leave a Comment

You can use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Tagged as: , , , , ,

Previous post: Asus Linux EEE PC – India Launch on 29th January 2008

Next post: scapy – Interactive Packet Manipulation / Generation Tool for Linux / UNIX