Martin Fandel martin.fandel
Thu May 18 01:54:37 PDT 2006
Hi,

I have a problem to understand the replication-procedure of existing 
data.

I have tried it this way:

- DB1 is master and has 2k records in the table "transactions"
- DB2 is a new slave with schema only and has 0 transactions in 
      the table "transactions"
- the table "transactions" has already a primary key with a not null 
  constraint BUT NOT a unique constraint. So I have added a new
  colum with slony's "table add key" command
- the new key-column is named "_Slony-I_my_cluster_rowID" and is not  
  serialized for the 2k records. Only new records will be  
  serialized.

How can I replicate the existing data? To replicate the existing 
record, must I serialize the "_Slony-I_my_cluster_rowID" for all 2k
records?

Here is my slony skript:

        #!/bin/bash
        
        CLUSTERNAME=my_cluster
        MASTERDBNAME=mydb
        SLAVEDBNAME=mydb
        MASTERHOST=192.168.1.1
        SLAVEHOST=192.168.1.2
        REPLICATIONUSER=postgres
        
        case $1 in
                create)
                        createdb -U $REPLICATIONUSER -O postgres -h
        $MASTERHOST $MASTERDBNAME
                        createdb -U $REPLICATIONUSER -O postgres -h
        $SLAVEHOST $SLAVEDBNAME
                        createlang -U $REPLICATIONUSER -h $MASTERHOST
        plpgsql $MASTERDBNAME
                        createlang -U $REPLICATIONUSER -h $SLAVEHOST
        plpgsql $SLAVEDBNAME
                        pg_dump -i -s -U $REPLICATIONUSER -h $MASTERHOST
        $MASTERDBNAME | psql -U $REPLICATIONUSER -h $SLAVEHOST
        $SLAVEDBNAME
                ;;
                clusteron)
                        slonik <<_EOF_
        cluster name = $CLUSTERNAME;
        node 1 admin conninfo = 'dbname=$MASTERDBNAME host=$MASTERHOST
        user=$REPLICATIONUSER';
        node 2 admin conninfo = 'dbname=$SLAVEDBNAME host=$SLAVEHOST
        user=$REPLICATIONUSER';
        init cluster ( id=1, comment = 'Master Node');
        _EOF_
                ;;
                createset)      
                        slonik <<_EOF_
        cluster name = $CLUSTERNAME;
        node 1 admin conninfo = 'dbname=$MASTERDBNAME host=$MASTERHOST
        user=$REPLICATIONUSER';
        node 2 admin conninfo = 'dbname=$SLAVEDBNAME host=$SLAVEHOST
        user=$REPLICATIONUSER';
        table add key (node id = 1, fully qualified name =
        'public.transactions');
        create set (id=1, origin=1, comment='All transactions');
        set add table (set id=1, origin=1, id=1, fully qualified name =
        'public.transactions', comment = 'transactions table');
        _EOF_
                ;;
                createstore)
                        slonik <<_EOF_
        cluster name = $CLUSTERNAME;
        node 1 admin conninfo = 'dbname=$MASTERDBNAME host=$MASTERHOST
        user=$REPLICATIONUSER';
        node 2 admin conninfo = 'dbname=$SLAVEDBNAME host=$SLAVEHOST
        user=$REPLICATIONUSER';
        store node (id=2, comment = 'Slave node');
        store path (server = 1, client = 2, conninfo='dbname=
        $MASTERDBNAME host =$MASTERHOST user=$REPLICATIONUSER');
        store path (server = 2, client = 1, conninfo='dbname=
        $SLAVEDBNAME host =$SLAVEHOST user=$REPLICATIONUSER');
        store listen (origin=1, provider = 1, receiver = 2);
        store listen (origin=2, provider = 2, receiver = 1);
        _EOF_
                ;;
                removeset)
                        slonik <<_EOF_
        cluster name = $CLUSTERNAME;
        node 1 admin conninfo = 'dbname=$MASTERDBNAME host=$MASTERHOST
        user=$REPLICATIONUSER';
        node 2 admin conninfo = 'dbname=$SLAVEDBNAME host=$SLAVEHOST
        user=$REPLICATIONUSER';
        drop set ( id = 1, origin = 1 );
        _EOF_
                ;;
                startslon)
                        slon $CLUSTERNAME "dbname=$MASTERDBNAME user=
        $REPLICATIONUSER host=$MASTERHOST"
                        ssh $MASTERHOST
                ;;
                replicate)
                        slonik <<_EOF_
        cluster name = $CLUSTERNAME;
        node 1 admin conninfo = 'dbname=$MASTERDBNAME host=$MASTERHOST
        user=$REPLICATIONUSER';
        node 2 admin conninfo = 'dbname=$SLAVEDBNAME host=$SLAVEHOST
        user=$REPLICATIONUSER';
        subscribe set ( id = 1, provider = 1, receiver = 2, forward =
        no);
        _EOF_
                ;;
        esac

The skript is called this way:

        slony.sh create
        slony.sh clusteron
        slony.sh createset
        slony.sh createstore
        slony.sh startslon
        slony.sh replicate #loop
        
        
Thanks a lot!

Regards,

Martin




More information about the Slony1-general mailing list