So I have this application that would have multiple modules, from project management to accounting modules. The question is should I have one database per client (company) or o
1) Having separate databases allows for easier distribution of load on several hosts, it lifts the roof in many ways; disk, memory, locking, cpu, backup-time and so on. If you are serious about putting millions of rows in mysql, it is certainly a good idea with separate databases (not only schemas), and even separate instances, so that the resource-consuming customers won't impose downtime on less resource consuming ones.
2) It is going to be exactly N times harder to manage where N is the number of databases :o) This extra cost you must compare to the cost of using just one db/schema and instead manage separation of customer in code. It's also inherently much harder to manage if you have to call customer support at your hosting company, or even your local grumpy dba, instead of just running a neat script from your console each time you need to update schema or create a new database.
Some databases and persistence frameworks have support for multi-tenancy, Oracle has this and support is beginning to emerge in Hibernate 4.
Even though many arguments point in the direction of separate databases, it is generally possible to use just one database as well.
In theory, multiple databases will be better for performance. That is, if you could put them on separate disk controllers. But in actuality they will most probably all be on the same disk, so there will probably be no performance gain. Plus, additional disks are better utilized as additional members of RAID arrays than as additional separate logical disks to which you can offload data.
From the point of view of maintenance, multiple databases are going to be a nightmare. Every ALTERation to the database will need to be made N times, where N is the number of clients. Of course you will never do that by hand, so you will always have to do it programmatically, and pretty soon you will start appreciating how easy things would be if you could just do the same ALTERations with a few clicks on the management console instead of having to write code to do them for you every time.
security will be a real bear if you don't use separate databases, regardless of any other concerns. you would have to be extremely cautious with coding to make sure one company doesn't see (or modify or delete) the others' data.