【问题标题】:Import mysql database remotely without using files不使用文件远程导入mysql数据库
【发布时间】:2021-06-22 12:02:08
【问题描述】:

我正在尝试设置复制从属设备。

我希望如果我在从站上将 binlog 位置设置为 0,它会从 0 开始读取并从头开始复制所有内容,直到它与主站匹配,但从站不做任何事情,也不会出错。

所以我首先需要一个当前数据库快照。如果两台服务器都可以在本地网络上相互通信,我可以在不将数据库转储到文件的情况下执行此操作吗?我试过这个命令,但它只是吐出使用帮助:

slave ~$ sudo mysqlimport --host='[master-server-ip]' --user='repl' -pC

重申一下,我想通过网络传输所有数据库(除了 mysql 内置数据库),而无需手动传输文件。

【问题讨论】:

  • @AmirSaleem 很遗憾不是因为它使用文件和手动文件传输。我知道你可以这样做,但我想做得更精简。
  • 我已经发布了一个可能的答案,但无论如何你为什么不想使用文件传输数据库?是因为主数据库不断更新吗?对于这种情况,Percona XtraBackup 工具可以备份热数据库,导入后您可以轻松配置复制而不会丢失任何内容。
  • @Stalinko 一方面是因为它很乏味,另一方面是因为在生产环境中我必须跳过保护节点,所以我必须 scp, rm, scp, rm, scp, rm ad iniftum .另外,为什么 mariadb 可以将数据传输到远程客户端,但您不能使用该功能进行即时备份?
  • @USB_S0lderer 通常不应该将复制用于完整数据传输。在实时数据库上,只有最后几天的二进制日志,而不是所有时间,因此不可能进行完整的数据传输。这种传输方式也是过度的,因为您不仅要复制数据,还要重复生成该数据的所有查询。如果您无法将备份存储在主服务器上,则可以将其直接转储到从服务器中。或者您可以将 master 转储到您的计算机上,然后将该备份上传到 slave。这很简单,而且复杂的复制也不会让人头疼。

标签: mysql replication


【解决方案1】:

您可以使用 0 作为 binlog 位置,但您还必须指定日志文件。

您可以在 MySQL 数据目录中看到第一个 binlog 文件的名称(在 unix 上通常为 /var/lib/mysql)。

然后在从服务器上尝试这样的事情:

STOP SLAVE;
CHANGE MASTER TO
    MASTER_HOST='...',
    MASTER_PORT=3306,
    MASTER_USER='...',
    MASTER_PASSWORD='...',
    MASTER_LOG_FILE='<your first binlog file>',
    MASTER_LOG_POS=0;
START SLAVE;

当然,如果所有 binlog 仍然存在于主服务器上,因为它已经创建,这可能不是你的情况,因为 binlog 会在一段时间后自动清理。

【讨论】:

  • 谢谢,第一个日志似乎仍然存在。但是,填写命令并执行它会给我ERROR 1201 (HY000): Could not initialize master info structure for ''; more error messages can be found in the MariaDB error log,并且错误日志中没有实际条目。知道是什么原因造成的吗?我应该向 mariadb 提交错误报告吗?
  • @USB_S0lderer 也许这有帮助? stackoverflow.com/a/9933590/2244262
猜你喜欢
  • 1970-01-01
  • 2020-09-12
  • 2021-12-30
  • 2013-02-19
  • 2017-12-19
  • 2014-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多