Download the PHP package sourcebroker/deployer-extended-database without Composer

On this page you can find all versions of the php package sourcebroker/deployer-extended-database. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package deployer-extended-database

deployer-extended-database

|

:local:

What does it do?

The package provides additional tasks for deployer (deployer.org) for synchronizing databases between instances. Most useful are two tasks:

  1. task "db:pull [source-instance]" task which allows you to pull database from remote instance to local instance,
  2. task "db:push [target-instance]" task which allows you to push database from local to remote instance,
  3. task "db:copy [source-instance] --options=target:[target-instance]" which allows to copy database between remote instances.

Installation

1) Install package with composer:

composer require sourcebroker/deployer-extended-database

2) Put following lines in your deploy.php:

require_once(__DIR__ . '/vendor/sourcebroker/deployer-loader/autoload.php');
new \SourceBroker\DeployerLoader\Load([
    ['path' => 'vendor/sourcebroker/deployer-instance/deployer'],
    ['path' => 'vendor/sourcebroker/deployer-extended-database/deployer'],
]);

MPORTANT NOTE!
o not put ``require('/vendor/autoload.php')`` inside your deploy.php because you can have dependency problems.
se ``require_once(__DIR__ . '/vendor/sourcebroker/deployer-loader/autoload.php');`` instead as suggested.

4) Create ".env" file in your project root (where you store deploy.php file). The .env file should be out of git because you need to store here information about instance name. Additionally put there info about database you want to synchronise. You can move the info about database data to other file later but for the tests its better to put it in .env file. Remember to protect .env file from downloading with https request if the root folder is readable from WWW server level.

INSTANCE="local"

DATABASE_HOST="127.0.0.1"
DATABASE_NAME="database_name"
DATABASE_USER="database_user"
DATABASE_PASSWORD="password"

 INSTANCE must correspond to ``host()`` name. You need to put the .env file with proper INSTANCE name and
abase access data on on each of you instances.

5) Define "local" host and set the "db_databases" for it. Use following code:

(new \SourceBroker\DeployerExtendedDatabase\Driver\EnvDriver())->getDatabaseConfig()

ch will read database data from .env file.


host('local')
    ->set('deploy_path', getcwd())
    ->set('db_databases', [
        'database_default' => [
            (new \SourceBroker\DeployerExtendedDatabase\Driver\EnvDriver())->getDatabaseConfig()
        ]
    ])

6) Add "db_databases" var for all other hosts. For example for live host it can be:

host('live')
    ->setHostname('my-server.example.com')
    ->setRemoteUser('deploy')
    ->set('deploy_path', '/var/www/myapplication/')
    ->set('db_databases', [
        'database_default' => [
            (new \SourceBroker\DeployerExtendedDatabase\Driver\EnvDriver())->getDatabaseConfig()
        ]
    ])

7) Make sure all instances have the same /vendors folder with deployer-extended-database and the same deploy.php file. Most problems are because of differences in deploy.php file between instances.

8) Run dep db:pull live to test if all works.

Options

Options for "db_databases"

"db_databases" is an array of "database configurations" and "database configuration" is array of configuration parts. Configuration part can be array or string. If its string then its treated as absolute path to file which should return array of configuration. Each or array configuration parts is merged. Look for Examples for better understanding.

Examples

Below examples should illustrate how you should build your database configuration.

Config with one database and database data read from .env file ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

deploy.php file:

set('db_default', [
   'ignore_tables_out' => [
       'caching_.*'
   ]
]);

host('live')
      ->setHostname('my-server.example.com')
      ->setRemoteUser('deploy')
      ->set('deploy_path', '/var/www/myapplication')
      ->set('db_databases',
         [
           'database_foo' => [
               get('db_default'),
               (new \SourceBroker\DeployerExtendedDatabase\Driver\EnvDriver())->getDatabaseConfig()
            ],
         ]
      );

host('local')
      ->set('deploy_path', getcwd())
      ->set('db_databases',
         [
           'database_foo' => [
               get('db_default'),
               (new \SourceBroker\DeployerExtendedDatabase\Driver\EnvDriver())->getDatabaseConfig()
            ],
         ]
      );

Mind that because the db* settings for all hosts will be the same then you can make the 'db_databases' setting global and put it out of host configurations. Look for below example where we simplified the config.

deploy.php file:

set('db_databases',
    [
        'database_foo' => [
            'ignore_tables_out' => [
               'caching_.*'
            ]
            (new \SourceBroker\DeployerExtendedDatabase\Driver\EnvDriver())->getDatabaseConfig()
         ],
    ]
);

host('live')
    ->setHostname('my-server.example.com')
    ->setRemoteUser('deploy')
    ->set('deploy_path', '/var/www/myapplication/');

host('local')
   ->set('deploy_path', getcwd());

The .env file should look then like:

INSTANCE="[instance name]"

DATABASE_HOST="127.0.0.1"
DATABASE_NAME="database_name"
DATABASE_USER="database_user"
DATABASE_PASSWORD="password"

Config with two databases and database data read from .env file +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

deploy.php file:

set('db_databases',
    [
         'database_application1' => [
            'ignore_tables_out' => [
               'caching_.*'
            ]
         (new \SourceBroker\DeployerExtendedDatabase\Driver\EnvDriver())->getDatabaseConfig('APP1_')
      ],
         'database_application2' => [
            'ignore_tables_out' => [
               'cf_.*'
             ]
         (new \SourceBroker\DeployerExtendedDatabase\Driver\EnvDriver())->getDatabaseConfig('APP2_')
      ],
    ]
);

host('live')
    ->setHostname('my-server.example.com')
    ->setRemoteUser('deploy')
    ->set('deploy_path', '/var/www/myapplication/');

host('local')
   ->set('deploy_path', getcwd());

The .env file should look then like:

INSTANCE="[instance name]"

APP1_DATABASE_HOST="127.0.0.1"
APP1_DATABASE_NAME="database_name"
APP1_DATABASE_USER="database_user"
APP1_DATABASE_PASSWORD="password"

APP2_DATABASE_HOST="127.0.0.1"
APP2_DATABASE_NAME="database_name"
APP2_DATABASE_USER="database_user"
APP2_DATABASE_PASSWORD="password"

Config with one database and database config read from from different sources +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

In example we will use:

1) array,

'ignore_tables_out' => [
            'caching_*'
         ]

2) get() which returns array with database options, get('db_default')

3) direct file include which returns array with database options __DIR__ . '/.dep/database/config/additional_db_config.php

4) class/method which returns array with database options (new \YourVendor\YourPackage\Driver\MyDriver())->getDatabaseConfig()

5) closure which returns array with database options function() { return (new \YourVendor\YourPackage\Driver\MyDriver())->getDatabaseConfig() }

Each of this arrays are merged to build final configuration for database synchro.

deploy.php file:

set('db_default', [
   'post_sql_in' => 'UPDATE sys_domains SET hidden=1;'
]);

set('db_databases',
    [
        'database_foo' => [
            [
                'ignore_tables_out' => [
                   'caching_.*'
                ]
            ],
            get('db_default'),
            __DIR__ . '/databases/config/additional_db_config.php',
            (new \YourVendor\YourPackage\Driver\MyDriver())->getDatabaseConfig(),
            function() {
               return (new \YourVendor\YourPackage\Driver\MyDriver())->getDatabaseConfig();
            }
         ],
    ]
);

host('live')
    ->setHostname('my-server.example.com')
    ->setRemoteUser('deploy')
    ->set('deploy_path', '/var/www/myapplication/');

host('local')
   ->set('deploy_path', getcwd());

Config with one database and database config read from "my framework" file ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Its advisable that you create you own special method that will return you framework database data. In below example its call to \YourVendor\YourPackage\Driver\MyDriver(). This way you do not need to repeat the data of database in .env file. In that case .env file should hold only INSTANCE.

set('db_databases',
       [
           'database_default' => [
               (new \YourVendor\YourPackage\Driver\MyDriver())->getDatabaseConfig()
           ],
       ]
   );

Config of truncate_tables, ignore_tables_out, post_sql_in_markers +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Real life example for CMS TYPO3:

set('db_default', [
    'truncate_tables' => [
        'cf_.*'
    ],
    'ignore_tables_out' => [
        'cf_.*',
        'cache_.*',
        'be_sessions',
        'fe_sessions',
        'sys_file_processedfile',
        'tx_devlog',
    ],
]);

Tasks

db:backup +++++++++

Backup database. In background, on target instance, two tasks are executed 'db:export' and 'db:compress'. Results are stored in "{{deploy_path}}/.dep/databases/dumps/".

If releases folder will be detected then it adds info about release in dumpcode name like in this example: 2017-12-04_00:20:22#server=live#dbcode=database_default#dumpcode=backup_for_release_160_ec77cb6bc0e941b0ac92e2109ad7b04e#type=structure.sql.gz

Example

dep db:backup local
dep db:backup live
dep db:backup live --options=dumpcode:mycode

db:compress +++++++++++

Compress dumps with given dumpcode stored in folder "{{deploy_path}}/.dep/databases/dumps/" on target instance. There is required option --options=dumpcode:[value] to be passed.

Look for config vars 'db_compress_suffix', 'db_compress_command', 'db_uncompress_command' for possible ways to overwrite standard gzip compression with your own.

Example

dep db:compress live --options=dumpcode:0772a8d396911951022db5ea385535f6

db:copy +++++++

This command allows you to copy database between instances.

dep db:copy [source-instance] --options=target:[target-instance]

In the background it runs several other tasks to accomplish this. Lets assume we want to copy database from live to dev instance. We will run following command on you local instance:

dep db:copy live --options=target:dev

Here are the tasks that will be run in background:

In below description: source instance = live target instance = dev * local instance = local

1) First it runs dep db:export live --options=dumpcode:123456 task on source instance. The dumps from export task are stored in folder "{{deploy_path}}/.dep/databases/dumps/" on target instance.

2) Then it runs db:download live --options=dumpcode:123456 on local instance to download dump files from live instance from folder "{{deploy_path}}/.dep/databases/dumps/" to local instance to folder "{{deploy_path}}/.dep/databases/dumps/".

3) Then it runs db:process local --options=dumpcode:123456 on local instance to make some operations directly on SQL dumps files.

4) Then it runs db:upload dev --options=dumpcode:123456 on local instance. This task takes dump files with code:123456 and send it to dev instance and store it in folder "{{deploy_path}}/.dep/databases/dumps/".

5) Finally it runs db:import dev --options=dumpcode:123456 on target instance. This task reads dumps with code:123456 from folder "{{deploy_path}}/.dep/databases/dumps/" on dev instance and import it to database.

6) At the very end it removes dumps it just imported in step 5 with command db:rmdump dev --options=dumpcode:123456

Copy to instance defined in instance_live_name (default live) is special case. If you copy to highest instance then by default you will be asked twice if you really want to. You can disable asking by setting db_allow_copy_live_force to true. You can also forbid copy to live instance by setting db_allow_copy_live to false.

db:decompress +++++++++++++

Decompress dumps with given dumpcode stored in folder "{{deploy_path}}/.dep/databases/dumps/" on target instance. There is required option --options=dumpcode:[value] to be passed.

Look for config vars 'db_compress_suffix', 'db_compress_command', 'db_uncompress_command' for possible ways to overwrite standard gzip compression with your own.

Example

dep db:decompress live --options=dumpcode:0772a8d396911951022db5ea385535f6

db:download +++++++++++

Download database dumps with selected dumpcode from folder "{{deploy_path}}/.dep/databases/dumps/" on target instance and store it in folder "{{deploy_path}}/.dep/databases/dumps/" on local instance. There is required option --options=dumpcode:[value] to be passed.

Example

dep db:download live --options=dumpcode:0772a8d396911951022db5ea385535f6

db:dumpclean ++++++++++++

Clean database dump storage on target instance. By default it removes all dumps except last five but you can set your values and also change the values depending on instance.

Example

set('db_dumpclean_keep', 10); // keep last 10 dumps for all instances

set('db_dumpclean_keep', [
   'live' => 10 // keep last 10 dumps for live instance dumps
   'dev' => 5   // keep last 5 dumps for dev instance dumps
   '*' => 2     // keep last 5 dumps for all other instances dumps
]);

dep db:dumpclean live

db:export +++++++++

Dump database to folder on local instance located by default in "{{deploy_path}}/.dep/databases/dumps/". Dumps will be stored in two separate files. One with tables structure. The second with data only. There is option --options=dumpcode:[value] that can be passed. If there is no dumpcode then its created and returned as json structure.

Example

Example task call:

dep db:export live

Example output files located in folder {{deploy_path}}/.dep/databases/dumps/:

2017-02-26_14:56:08#server=live#dbcode=database_default#type=data#dumpcode=362d7ca0ff065f489c9b79d0a73720f5.sql
2017-02-26_14:56:08#server=live#dbcode=database_default#type=structure#dumpcode=362d7ca0ff065f489c9b79d0a73720f5.sql

Example task call with own dumpcode=

dep db:export live --options=dumpcode:mycode

Example output files:

2017-02-26_14:56:08#server=live#dbcode=database_default#type=data#dumpcode=mycode.sql
2017-02-26_14:56:08#server=live#dbcode=database_default#type=structure#dumpcode=mycode.sql

db:import +++++++++

Import database dump files from local instance folder "{{deploy_path}}/.dep/databases/dumps/" to local database(s). There is required option --options=dumpcode:[value] to be passed.

Example

dep db:import dev --options=dumpcode:0772a8d396911951022db5ea385535f66

db:process ++++++++++

This command will run some defined commands on pure sql file as its sometimes needed to remove or replace some strings directly on sql file before importing. There is required option --options=dumpcode:[value] to be passed.

Example

dep db:process dev --options=dumpcode:0772a8d396911951022db5ea385535f66

db:pull +++++++

This command allows you to pull database from target instance to local instance. In the background it runs several other tasks to accomplish this.

Here is the list of tasks that will be done when you execute "db:pull":

1) First it runs db:export task on target instance and get the "dumpcode" as return to use it in next commands. 2) Then it runs db:download on local instance (with "dumpcode" value from first task). 3) Then it runs db:process on local instance (with "dumpcode" value from first task). 4) Then it runs db:import on local instance (with "dumpcode" value from first task).

Pull to instance defined in instance_live_name (default live) is special case. If you pull to highest instance then by default you will be asked twice if you really want to. You can disable asking by setting db_allow_pull_live_force to true. You can also forbid pull to live instance by setting db_allow_pull_live to false.

Example

dep db:pull live

db:push +++++++

This command allows you to push database from local instance to remote instance. In the background it runs several other tasks to accomplish this.

Here is the list of tasks that will be done when you execute "db:push":

1) First it runs db:export task on local instance and get the "dumpcode" as return to use it in next commands. 2) Then it runs db:upload on local instance with remote as argument (with "dumpcode" value from first task). 3) Then it runs db:process on remote instance (with "dumpcode" value from first task). 4) Then it runs db:import on remote instance (with "dumpcode" value from first task).

Push to instance defined in instance_live_name (default live) is special case. If you push to highest instance then by default you will be asked twice if you really want to. You can disable asking by setting db_allow_push_live_force to true. You can also forbid push to live instance by setting db_allow_push_live to false.

Example

dep db:push live

db:rmdump +++++++++

This command will remove all dumps with given dumpcode (compressed and uncompressed). There is required option --options=dumpcode:[value] to be passed.

Example

dep db:rmdump live --options=dumpcode:0772a8d396911951022db5ea385535f66

db:truncate +++++++++++

This command allows you to truncate database tables defined in database config var "truncate_tables". No dumpcode is needed because it operates directly on database.

Example Truncate local instance databases tables.

dep db:truncate

Truncate live instance databases tables.

dep db:truncate live

db:upload +++++++++

Upload database dumps with selected dumpcode from folder "{{deploy_path}}/.dep/databases/dumps/" on local instance and store it in folder "{{deploy_path}}/.dep/databases/dumps/" on target instance. There is required option --options=dumpcode:[value] to be passed.

Example

dep db:upload live --options=dumpcode:0772a8d396911951022db5ea385535f6

Changelog

See https://github.com/sourcebroker/deployer-extended-database/blob/master/CHANGELOG.rst


All versions of deployer-extended-database with dependencies

PHP Build Version
Package Version
Requires deployer/deployer Version ^7.0.0
symfony/dotenv Version ^3.3 || ^4 || ^5 || ^6
sourcebroker/deployer-instance Version ^6.0.0 || dev-master
sourcebroker/deployer-loader Version ^4.0.0 || dev-master
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package sourcebroker/deployer-extended-database contains the following files

Loading the files please wait ....