vielhuber/syncdb

在两个服务器(可选通过ssh隧道)之间同步数据库(mysql, pgsql)。

1.8.4 2024-04-23 12:28 UTC

README

syncdb 在两个服务器之间同步数据库。

功能

  • 最常见用例:将生产数据库同步到本地环境
  • 您还可以在任何服务器之间同步,甚至从远程到远程(无需本地)
  • 支持直接数据库连接或通过ssh隧道
  • 目前支持mysql,将很快添加对postgresql的支持
  • 还有一个快速模式,其中sql文件被压缩(您还可以选择压缩级别)
  • 还包括一个名为magicreplace的搜索/替换机制
  • (远程)命令如mysqldump、mysql、zip等可以手动重写以适应任何环境
  • 在Linux、Mac和Windows(带有WSL)上运行
  • 支持多个同步的并行执行
  • 使用优化技术以实现更快的恢复
  • 还支持不支持公钥的ssh连接到服务器
  • 显示实时恢复进度

要求

Mac

安装 Homebrew 然后安装 coreutils

brew install coreutils

Windows

选择以下两个选项之一

  • 安装 WSL2
  • 安装 Cygwin
    • 安装所有默认包 + unzip
    • C:\cygwin64\bin 添加到您的环境 PATH(优先级高,但低于 php)

安装

Mac / Windows(WSL2)/ Linux

mkdir ~/.syncdb
cd ~/.syncdb
composer require vielhuber/syncdb
chmod +x vendor/vielhuber/syncdb/src/syncdb

现在将 ~/.syncdb/vendor/vielhuber/syncdb/src/ 添加到您的路径环境。

Windows(CMD)

mkdir "%USERPROFILE%/.syncdb"
cd "%USERPROFILE%/.syncdb"
composer require vielhuber/syncdb

现在将 C:\Users\xxx\.syncdb\vendor\vielhuber\syncdb\src\ 添加到您的路径环境。

更新

Mac / Windows(WSL2)/ Linux

cd ~/.syncdb
composer update
chmod +x vendor/vielhuber/syncdb/src/syncdb

Windows(CMD)

cd "%USERPROFILE%/.syncdb"
composer update

用法

syncdb profile-name

配置

只需将您的所需配置文件放入 ~/.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"
    }
}

您可以在本git仓库的配置文件夹中找到更多示例。

权限

由于MySQL 5.7和MySQL 8.0.21访问INFORMATION_SCHEMA.FILES表现在需要PROCESS权限。大多数提供商都没有此选项可用。这导致错误消息

错误:'访问被拒绝;您需要(至少一个)PROCESS权限才能执行此操作',当尝试转储表空间时

syncdb会自动将--no-tablespaces添加到您的mysqldump命令中。您可以通过将"tablespaces": true添加到您的配置中关闭此行为。