无需转储即可物理迁移 MySQL

Mar*_*raz 7 mysql migration

一个客户让我迁移他的 MySQL 数据库:服务器没有可用空间,而且它还有一个非常大的表坏了,所以我不能转储它。

由于缺乏可用空间,我无法修复它。

问题:有没有办法将 MySQL 数据库数据文件物理移动到另一台服务器并将它们用于“新”MySQL?

Rol*_*DBA 9

您可以执行以下操作:

  • 旧数据库服务器:10.1.2.30
  • 新数据库服务器:10.1.2.40

STEP 01) 在旧服务器上, service mysql stop

STEP 02) 在旧服务器上, rsync -av --progress /var/lib/mysql root@10.1.2.40:/var/lib/mysql

STEP 03) 在新服务器上, chown -R mysql:mysql /var/lib/mysql

STEP 04) 在新服务器上, service mysql start

确保/var/lib/mysql新服务器上的磁盘安装更大


Bru*_*JCM 5

您还可以将其即时迁移到另一台服务器,通过管道和 SSH 发送数据。例如,如果目标主机具有不同的 MySQL 版本,这将很有用。

我刚刚写了一篇博客文章解释了我是如何做到的:

http://blog.techutils.space/2016/02/on-fly-database-migration-between-two.html

那里有解释,但如果您不在乎,只需运行如下所示的内容。

目标主机:

nc -l 3456 | \
  gunzip | \
  pv | \
  mysql -u tdb_user -ptdb_pass targetdatabase
Run Code Online (Sandbox Code Playgroud)

源主机:

mysqldump -u sdb_user -psdb_pass sourcedatabase | \
  pv | \
  gzip | \
  ssh sshuser@targethost nc 127.0.0.1 3456
Run Code Online (Sandbox Code Playgroud)