MySQL quick database transfer between two servers
Option A
Definitely the safest, but long downtime not necessary if Option D is applied correctly. Your downtime would be based on collecting the incremental, not the initial load of the target server. This would be very short if the loading of incrementals are being done frequently.
Option B
This is good, provided the large tables are archive data only.
If the large tables are active logs, go to Option D
Option C
To ensure an rsync, mysqld should be down. To do so, run this
mysql&gt; SET GLOBAL innodb_fast_shutdown = 0;

Next, run this
service mysql stop

Then, issue the rsync of the data directory. This will ensure the mysqld commits everything is has on hand when performing MySQL shutdown. Thus, when you run
service mysql start

the MySQL will not do any crash recovery during mysqld's startup phase.
If you decide to rsync a live server, you are not taking into account the InnoDB Buffer Pool that has dirty pages (changes needed to be flushed to disk). Starting mysqld from a live rsync would impose crash recovery using ibdata1's double write buffer and a scan for any changes (deltas) in the redo logs (ib_logfile0,ib_logfile1). This is risky in a write-intensive live database.
Option D
Doing --single-transaction mysqldump creates a convenient point-in-time backup. Doing the incremental using binary logs will require four(4) things:

Enable binary loggging on DB Server
Ensure that binary logs stay around by increasing expire_logs_days in case you delay doing the incremental load of changes a day or two
Use mysqlbinlog to dump events after the replicaton coordinates of the dump to create incremental data
Use --master-data=2 to record binary log and position of the dump (will appear on line 23)