[ZODB-Dev] RelStorage: Which tables to replicate?

Shane Hathaway shane at hathawaymix.org
Thu May 22 12:28:18 EDT 2008


Stefan H. Holek wrote:
> We have put up two boxes in a MySQL master-master replication setup  
> [1]. As long as we only write to one of the masters all is fine.  
> Writing to both masters (and expecting MySQL to sort it out) is giving  
> us trouble. We see things like:
> 
> Last_Errno: 1062
> Last_Error: Error 'Duplicate entry '41860' for key 1' on query.
> Default database: 'prod_zodb'.
> Query: 'INSERT INTO new_oid VALUES ()'

Perhaps we can solve this by making each server allocate a different set 
of OIDs.  For example, one server might allocate odd-numbered OIDs while 
the other allocates even-numbered OIDs.  Even better would be some kind 
of standard MySQL solution, but I haven't found any yet.

> Last_Errno: 1050
> Last_Error: Error 'Table 'temp_store' already exists' on query.
> Default database: 'prod_zodb'.
> Query: 'CREATE TEMPORARY TABLE temp_store
>         (
>          zoid        BIGINT NOT NULL PRIMARY KEY,
>          prev_tid    BIGINT NOT NULL,
>          md5         CHAR(32),
>          state       LONGBLOB
>         ) ENGINE MyISAM'

Uh-oh.  The commit lock should have prevented this, so this error 
suggests that each master has a completely independent set of locks! 
That is a serious issue that will lead to database corruption.  The 
commit and pack locks need to be cluster-wide.  Does MySQL have a way to 
do that?

Thanks for working on this!

Shane



More information about the ZODB-Dev mailing list