Easy MySQL Replication Setup and Troubleshooting

Post on 15-Jan-2015

725 views 3 download

Tags:

description

MySQL Replication 101 From Percona Live 2014

Transcript of Easy MySQL Replication Setup and Troubleshooting

Easy MySQL ReplicationSetup and Troubleshooting

Bob BurgessSalesforce ExactTarget Marketing Cloud (Radian6)

• Introduction• Description• Configuration Items• Commands• Setup• Beyond the Basics• Troubleshooting Faults• Gotchas• Closing

• Introduction• Description• Configuration Items• Commands• Setup• Beyond the Basics• Troubleshooting Faults• Gotchas• Closing

Slides

• I will post these slides on the conference site and slideshare

• No need to copy them down

Who Am I?

• MySQL user since 2007• Radian6: Social Media Monitoring• Now part of

Salesforce ExactTarget Marketing Cloud• Large Data Set• Dozens of Databases • Replication is CRUCIAL for us

Why Am I Doing This?

• Replication isn’t hard• Show simplest replication case• Share how we deal with common problems

Our First Replication

• Set up a separate database for running reports, to separate back-end from user-facing activity

• Alexander Rubin of MySQL Support in 2008

What is “Replication”?

Why Replication?

• Database Failure• Share Read Traffic (Scale-Out)• Reporting/Analytics Databases• Network Load• Backups

Replication Compared

• DRBD– Block-level– Replica is unusable until switched to

• Galera / Percona Cluster– More complicated– Not WAN-Friendly for High Transaction Rate

• Tungsten Replicator• Others..?

• Introduction• Description• Configuration Items• Commands• Setup• Beyond the Basics• Troubleshooting Faults• Gotchas• Closing

Replication Described

Master Replica

Replication Described

Master

table1table2

mysql

Update table1 set...Insert into table2...

Binlogs:•Events in commit order•Contains timestamps and auto-increment IDs

client

Replica

table1table2

IO Thread SQL Thread

Update table1 set...Insert into table2...

mysql

• Introduction• Description• Configuration Items• Commands• Setup• Beyond the Basics• Troubleshooting Faults• Gotchas• Closing

Replication Described

log_bin=/data/log/mysql-bin

Config items

Master

table1table2

mysql

Update table1 set...Insert into table2...

client

Replica

table1table2

IO Thread SQL Thread

Update table1 set...Insert into table2...

mysql

Replication Described

server_id=1 server_id=2

Config items

(1) Master

table1table2

mysql

Update table1 set...Insert into table2...

client

Replica (2)

table1table2

IO Thread SQL Thread

Update table1 set...Insert into table2...

mysql

• Introduction• Description• Configuration Items• Commands• Setup• Beyond the Basics• Troubleshooting Faults• Gotchas• Closing

Replication Commands

• change master to• start slave• stop slave• reset slave• show slave status\G• show master status• mysqlbinlog• grant replication slave

Replication Commandschange master to... Which server? Port? Credentials? Log file & position?

(1) Master

table1table2

mysql

client

Replica (2)

table1table2

IO Thread SQL Thread

Update table1 set...Insert into table2...

mysql

Update table1 set...Insert into table2...

Replication Commands• change master to...

Which server? Port? Credentials? Log file & position?•change master to master_host=‘Master’, master_port=3306, master_user=‘repl’, master_password=‘pass’, master_log_file=‘mysql_bin.000001’, master_log_pos=4563744;

Replication Commands

(1) Master

table1table2

mysql

Update table1 set...Insert into table2...

client

Replica (2)

table1table2

mysql

Replication Commandschange master to master_host=‘Master’, master_port=3306, master_user=‘repl’, master_password=‘pass’, master_log_file=‘mysql_bin.000001’, master_log_pos=4563744;

(1) Master

table1table2

mysql

Update table1 set...Insert into table2...

client

Replica (2)

table1table2

IO Thread

Update table1 set...Insert into table2...

mysql

Replication Commandsstart slave;

(1) Master

table1table2

mysql

Update table1 set...Insert into table2...

client

Replica (2)

table1table2

IO Thread SQL Thread

Update table1 set...Insert into table2...

mysql

Replication Commandsstop slave;

(1) Master

table1table2

mysql

Update table1 set...Insert into table2...

client

Replica (2)

table1table2

Update table1 set...Insert into table2...

mysql

Replication Commandsreset slave;

(1) Master

table1table2

mysql

Update table1 set...Insert into table2...

client

Replica (2)

table1table2

mysql

Replication Commands• show slave status\G• Manual troubleshooting• Use in scripts for alarming

LAG=$(mysql -s -e’show slave status\G’|grep ‘Seconds_Behind_Master’|cut -f2 -d:| tr -d ‘ ‘)

IO_UP=$(mysql -s -e’show slave status\G’|grep ‘Slave_IO_Running’|cut -f2 -d:| tr -d ‘ ‘)

Slave_IO_State: Waiting for master to send event

Master_Host: Master Master_User: repl Master_Port: 3306 Connect_Retry: 3 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 28762843 Relay_Log_File: relay-bin.000002 Relay_Log_Pos: 548 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error:

Skip_Counter: 0 Exec_Master_Log_Pos: 23456234 Relay_Log_Space: 52 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 8Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: 0 Master_Server_Id: 1

Slave_IO_State: Waiting for

master to send event

Master_Host: Master Master_User: repl Master_Port: 3306 Connect_Retry: 3 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 28762843 Relay_Log_File: relay-bin.000002 Relay_Log_Pos: 548 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table:

Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 23456234 Relay_Log_Space: 52 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 8Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: 0 Master_Server_Id: 1

What it’s doing

Slave_IO_State: Waiting for master to send event

Master_Host: Master Master_User: repl Master_Port: 3306 Connect_Retry: 3 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 28762843 Relay_Log_File: relay-bin.000002 Relay_Log_Pos: 548 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table:

Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 23456234 Relay_Log_Space: 52 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 8Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: 0

Master_Server_Id: 1

Where it’s connected

Slave_IO_State: Waiting for master to send event

Master_Host: Master Master_User: repl Master_Port: 3306 Connect_Retry: 3

Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 28762843 Relay_Log_File: relay-bin.000002 Relay_Log_Pos: 548 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0

Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 23456234 Relay_Log_Space: 52 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 8Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: 0 Master_Server_Id: 1

Where the IO Thread has read up to

Master

table1table2

mysql

Update table1 set...Insert into table2...

client

Replica

table1table2

IO Thread SQL Thread

Update table1 set...Insert into table2...

mysql

Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 28762843

Slave_IO_State: Waiting for master to send event

Master_Host: Master Master_User: repl Master_Port: 3306 Connect_Retry: 3 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 28762843

Relay_Log_File: relay-bin.000002 Relay_Log_Pos: 548 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0

Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 23456234 Relay_Log_Space: 52 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 8Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: 0 Master_Server_Id: 1

Where the SQL Thread has executed up to (in relaylog)

Master

table1table2

mysql

Update table1 set...Insert into table2...

client

Replica

table1table2

IO Thread SQL Thread

Update table1 set...Insert into table2...

mysql

Relay_Log_File: relay-bin.000002 Relay_Log_Pos: 548

Slave_IO_State: Waiting for master to send event

Master_Host: Master Master_User: repl Master_Port: 3306 Connect_Retry: 3 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 28762843 Relay_Log_File: relay-bin.000002 Relay_Log_Pos: 548

Relay_Master_Log_File: mysql-bin.000001

Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0

Last_Error: Skip_Counter: 0

Exec_Master_Log_Pos: 23456234

Relay_Log_Space: 52 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 8Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: 0 Master_Server_Id: 1

Where the SQL Thread has executed up to (corresponding position in Master’s binlog)

Master

table1table2

mysql

Update table1 set...Insert into table2...

client

Replica

table1table2

IO Thread SQL Thread

Update table1 set...Insert into table2...

mysql

Relay_Master_Log_File: mysql-bin.000001 Exec_Master_Log_Pos: 23456234

Slave_IO_State: Waiting for master to send event

Master_Host: Master Master_User: repl Master_Port: 3306 Connect_Retry: 3 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 28762843 Relay_Log_File: relay-bin.000002 Relay_Log_Pos: 548 Relay_Master_Log_File: mysql-bin.000001

Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0

Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 23456234 Relay_Log_Space: 52 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 8Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: 0 Master_Server_Id: 1

If the IO and SQL Threads are running

Slave_IO_State: Waiting for master to send event

Master_Host: Master Master_User: repl Master_Port: 3306 Connect_Retry: 3 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 28762843 Relay_Log_File: relay-bin.000002 Relay_Log_Pos: 548 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes

Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table:

Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 23456234 Relay_Log_Space: 52 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 8Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: 0 Master_Server_Id: 1

Replication Filters in effect

Slave_IO_State: Waiting for master to send event

Master_Host: Master Master_User: repl Master_Port: 3306 Connect_Retry: 3 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 28762843 Relay_Log_File: relay-bin.000002 Relay_Log_Pos: 548 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error:

Skip_Counter: 0 Exec_Master_Log_Pos: 23456234 Relay_Log_Space: 52 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key:

Seconds_Behind_Master: 8Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: 0 Master_Server_Id: 1

Replication Lag (how long ago was timestamp of latest-processed query?)

Can be “NULL”

Slave_IO_State: Waiting for master to send event

Master_Host: Master Master_User: repl Master_Port: 3306 Connect_Retry: 3 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 28762843 Relay_Log_File: relay-bin.000002 Relay_Log_Pos: 548 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 23456234 Relay_Log_Space: 52 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 8Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error:

Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: 0 Master_Server_Id: 1

Replication Error (SQL Thread)

Slave_IO_State: Waiting for master to send event

Master_Host: Master Master_User: repl Master_Port: 3306 Connect_Retry: 3 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 28762843 Relay_Log_File: relay-bin.000002 Relay_Log_Pos: 548 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error:

Skip_Counter: 0 Exec_Master_Log_Pos: 23456234 Relay_Log_Space: 52 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 8Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: 0 Master_Server_Id: 1

Replication Error (IO Thread)

• Introduction• Description• Configuration Items• Commands• Setup• Beyond the Basics• Troubleshooting Faults• Gotchas• Closing

Basic Setup Walk-Through

• Unique server_id values

my.cnf on master[mysqld]server_id=1

my.cnf on replica[mysqld]server_id=2

Basic Setup Walk-Through

• Replication UserOn Master:

grant replication slave on *.* to ‘repl’ identified by ‘pass’;

Basic Setup Walk-Through

• Point to the correct binlog position• On master:show master status;

...once both databases are equal• On Replica:change master to ...

Basic Setup Walk-Through

• Start it up• On replica:start slave;

• Check it• On replica:show slave status\G

And that’s it.

• Introduction• Description• Configuration Items• Commands• Setup• Beyond the Basics• Troubleshooting Faults• Gotchas• Closing

Limiting Tables or Schemas

• If you don’t need all the tables• In my.cnf:replicate-do-table=schema.tableNamereplicate-skip-table=schema.otherTable

• If you don’t need all the schemas• In my.cnfreplication-do-db=schemaOnereplication_skip_db=schemaTwo

Limiting Tablesreplicate-do-table=schema.tableName

(1) Master

table1table2

mysql

Update table1 set...Insert into table2...

client

Replica (2)

table1table2

IO Thread SQL Threadwith filter

Update table1 set...Insert into table2...

mysql

Limiting Columns or Rows

• If you don’t need all columns• Subset of table for reporting or analytics

Limiting Columns or Rows

• Original tablecreate table x (a int primary key, b int, c int) engine=InnoDB;

• Blackhole table on replica like master tablecreate table x (a int, b int, c int) engine=blackhole;

• Target table on replicacreate table y (a int primary key, b int) engine=InnoDB;

Limiting Columns or Rows

• Before-insert trigger on replica to put data into second “real” table

• Only columns a and b, and only for b=1create trigger x_bi before insert on x for each row insert into y (a, b) select new.a, new.b from dual where new.b=1;

Limiting Columns or Rows

(1) Master

table1table2

mysql

Update table1 set...Insert into table2...

client

Replica (2)

x y

IO Thread SQL Thread

Update table1 set...Insert into table2...

mysql

TRG

Multi-Level

• Local and Remote DR Site• Spreading load over many servers

M R M R

M R

R

RR

R

R

R

R

...

Multi-Level

• Configlog_slave_updates=1

Multi-LevelMaster Replica

table1table2

table1table2

mysql IO Thread SQL Thread

Update table1 set...Insert into table2...

Update table1 set...Insert into table2...

Replica

table1table2

IO Thread SQL Thread

Update table1 set...Insert into table2...

Update table1 set...Insert into table2...

mysql

Types of Binlogs

• Statement-Based– Contains the actual statements run– Data drift is more likely (code modified by triggers,

etc)• Row-based– Replicates changes for each row– Mostly unreadable by humans– Unaffected by how the change is done (data drift less

likely)– mysqlbinlog -v

• Introduction• Description• Configuration Items• Commands• Setup• Beyond the Basics• Troubleshooting Faults• Gotchas• Closing

Fault: Lag

• Long-running transactions• High concurrency on master becomes single

session on replica• show slave status\G• Easy to alarm on

Fault: Stopping from Error

• Any error stops SQL Thread!• Duplicate Key• Unknown Function• slave_exec_mode=idempotent

...suppresses duplicate-key and no-key-found errors

• show slave status\G

Faults: Can’t Connect to Master

• Fault shows in slave status as soon as you start slave.

• Did you create replication slave user?• Correct user/password?• Correct hostname/port?• Master is running and reachable?

Fault: Can’t Find Binlog

• Clearly stated in the slave status• Can happen if replica has been stopped (or is

lagged) and the binlogs are removed from the master

• Execute from archiveOR• Rebuild replica and restart from a known good

binlog position

Faults: Configuration

• replication-do-table• replication-do-schema• log_slave_updates

Faults: server_id

• Must be unique!• If equal: “Seconds behind” jumps everywhere.

• Introduction• Description• Configuration Items• Commands• Setup• Beyond the Basics• Troubleshooting Faults• Gotchas• Closing

Gotcha: functions

• Functions will be run on the replica even if only appearing in a select on the master

• Make sure all functions exist on replica DB, even if only a dummy version

create function myFtn (a int, b int) returns int deterministic return 0;

Gotcha: Reconnection

• When a replica is stopped and reset, until the database is restarted, replication may reconnect to a master after “reset slave”

change master to master_port=1234;

Gotcha: Master Crash

• Replication becomes unstable if master crashes• Error: unknown instruction at position xxx• Often need to use mysqlbinlog to find a

suitable position in the binlog to restart replication from

stop slave; reset slave;change master to ...;start slave;

Gotcha: MySQL Versions

• Replication not completely compatible between versions (especially later=>earlier)

• 5.5 master to 5.1 replica: character set error “sometimes”

• Stops replication

Impossible

• One replica can have only one master(until 5.7)

• Can’t change table or schema filters dynamically

• Can’t put binlogs back on master server, for recovery purposes

• Introduction• Description• Configuration Items• Commands• Setup• Beyond the Basics• Troubleshooting Faults• Gotchas• Closing

The Book

Alternatives

• Tungsten Replicator from Continuent• Others?

Questions?

Thank you!

Bob Burgessrburgess@salesforce.com

Don’t forget your session evaluation!