drush sql-sync structure tables in alias dont work It seems that the structure tables dont work on a sql sync from my live site to my dev. Using the following comman:

drush sql-sync @example.live @example.dev

The search_api_server is every time overritten, so it gets synced. So i think also my cache tables get synced. Whats wrong with my aliases?

/**
 * Dev/Local alias
 */
$aliases['dev'] = array(
  'root' =&gt; '/var/www/example_dev',
  'uri'  =&gt; 'example.dev',
  'path-aliases' =&gt; array(
    '%files' =&gt; 'sites/default/files',
  ),
  'source-command-specific' =&gt; array (
    'sql-sync' =&gt; array (
      'no-cache' =&gt; TRUE,
      'structure-tables-key' =&gt; 'common',
    ),
  ),
  // No need to modify the following settings
  'command-specific' =&gt; array (
    'sql-sync' =&gt; array (
      'sanitize' =&gt; TRUE,
      'no-ordered-dump' =&gt; TRUE,
      'structure-tables' =&gt; array(
       // You can add more tables which contain data to be ignored by the database dump
        'common' =&gt; array('cache', 'cache_filter', 'cache_menu', 'cache_page', 'history', 'sessions', 'watchdog','search_api_server'),
      ),
    ),
  ),
);

/**
 * Live alias
 */
$aliases['live'] = array(
  'remote-host' =&gt; '000.000.00.00',
  'remote-user' =&gt; 'username',
  'root' =&gt; '/var/www/html/example-live',
  'uri'  =&gt; 'example.net',
  'path-aliases' =&gt; array(
    '%files' =&gt; 'sites/default/files',
  ),
);
There are three places you can reference aliases when using sql-sync:

drush @site sql-sync @prod @dev

@site - Where the sql-sync will execute. If this is a remote site, then the other two aliases must be defined in files that reside on the remote machine.  Options from 'command-specific' will be applied to the command.

@prod - The source for the sync.  Options from 'source-command-specific' will be applied to the command.

@dev - The target for the sync.  Options from 'target-command-specific' will be applied to the command.

The alias @site is not usually used with sql-sync; most people just run drush sql-sync @prod @dev.

Drush is going to look for different 'command-specific' records depending on the position of the alias appears on the commandline.

@site - The alias that appears before the command name will have options from the 'command-specific' -> 'sql-sync' record added to the evaluated options list.

@prod - The alias that appears in the first position after the command name will have options from the 'source-command-specific' -> 'sql-sync' record used.

@dev - The alias that appears in the second position after the command name will have options from the 'target-command-specific' -> 'sql-sync' record used.

In the typical case (drush sql-sync @prod @dev), the 'command-specific' record is not used at all, the 'source-command-specific' record from @prod is used, and the 'target-command-specific' record from @dev is used. 

Try using alias records more like the following set:

/**
 * Dev/Local alias
 */
$aliases['dev'] = array(
  'root' =&gt; '/var/www/example_dev',
  'uri'  =&gt; 'example.dev',
  'path-aliases' =&gt; array(
    '%files' =&gt; 'sites/default/files',
  ),
  'target-command-specific' =&gt; array (
    'sql-sync' =&gt; array (
      'no-cache' =&gt; TRUE,
      'structure-tables-list' =&gt; 'cache,cache_admin_menu,cache_block,cache_bootstrap',
      ),
    ),
  ),
);

/**
 * Live alias
 */
$aliases['live'] = array(
  'remote-host' =&gt; '000.000.00.00',
  'remote-user' =&gt; 'username',
  'root' =&gt; '/var/www/html/example-live',
  'uri'  =&gt; 'example.net',
  'path-aliases' =&gt; array(
    '%files' =&gt; 'sites/default/files',
  ),
  'source-command-specific' =&gt; array (
    'sql-sync' =&gt; array (
      'sanitize' =&gt; TRUE,
      'no-ordered-dump' =&gt; TRUE,
    ),
  ),
);