So the situation is that I am going to have two or more “insert” machines where my web application just inserts data that we want to log into the machines (they are all behind a load balancer). Every couple hours, one by one the machines will be disconnected from the load balancer and upload their information into the “master” database machine should have a relatively up to date version of all the data we are collecting.
Originally I was going to use mysqldump, but found that you cannot specify the command to not grab the auto_increment id column I have (which would lead to collisions on primary key). I saw another post recommending using a temporary table to put the data in and then drop the column, but the “insert” machines have very low specs, and the amount of data could be pretty significant on the order of 50,000 rows. Other than just programatically just taking x rows at a time and inserting them into the remote “master” database, is there an easier way to do this? Currently I have php installed on the “insert” machines.
Thank you for your input.
Wouldn’t you want the master database record to have the same primary key for each record as the slave database? If not, that could lead to problems where a query will produce different results based on which machine it’s on.
If you want an arbitrary primary key that will avoid collisions, consider removing the auto-increment ID and constructing an ID that’s guaranteed to be unique for every record on each server. For example, you could concatenate the unix time (with microseconds) with an identifier that’s different for each server. A slightly lazier solution would be to concatenate time + a random 10-digit number or something. PHP’s uniqid() function does something like this automatically.
If you don’t intend to ever use the ID, then just remove it from your tables. There’s no rule saying that every table has to have a primary key. If you don’t use it, but you want to encode information about when each record was inserted, add a timestamp column instead (and don’t make it a key).