🔥 Sync databases between two servers. 🔥
syncdb syncs databases between two servers.
Install Homebrew and then coreutils:
brew install coreutils
Choose one of the two following options:
unzip
C:\cygwin64\bin
to your environment PATH (high priority, but below php)
mkdir ~/.syncdb
cd ~/.syncdb
composer require vielhuber/syncdb
chmod +x vendor/vielhuber/syncdb/src/syncdb
Now add ~/.syncdb/vendor/vielhuber/syncdb/src/
to your path environment.
mkdir "%USERPROFILE%/.syncdb"
cd "%USERPROFILE%/.syncdb"
composer require vielhuber/syncdb
Now add C:\Users\xxx\.syncdb\vendor\vielhuber\syncdb\src\
to your path environment.
cd ~/.syncdb
composer update
chmod +x vendor/vielhuber/syncdb/src/syncdb
cd "%USERPROFILE%/.syncdb"
composer update
syncdb profile-name
Simply put your desired configuration files in ~/.syncdb/profiles/profile-name.json:
mkdir ~/.syncdb/profiles
cd ~/.syncdb/profiles
nano example.json
{
"engine": "mysql",
"source": {
"host": "200.10.10.10",
"port": "3307",
"database": "EXAMPLE",
"username": "EXAMPLE",
"password": "EXAMPLE",
"cmd": "mysqldump",
"ssh": false
},
"target": {
"host": "localhost",
"port": "3306",
"database": "EXAMPLE",
"username": "EXAMPLE",
"password": "EXAMPLE",
"cmd": "mysql",
"ssh": false
},
"replace": {
"https://www.example.com": "http://www.example.local",
"www.example.com": "www.example.local"
}
}
You can find more examples in the profiles folder in this git repo.
Sometimes it is useful to exclude certain table data (e.g. logs
, cache
, …), while preserving the structure.
Database engines don’t provide a good way to do this.
Therefore you can use the ignore_table_data
-directive in your json
-config:
{
"ignore_table_data": ["table1", "table2", "table3"]
}
Since MySQL 5.7 and MySQL 8.0.21 accessing the INFORMATION_SCHEMA.FILES table now requires the PROCESS privilege. Most providers don’t have this option available. This results in the error message:
Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces
syncdb
automatically adds --no-tablespaces
to your mysqldump-commands. You can turn off this behaviour by adding "tablespaces": true
to your configuration.