我可以将整个/ var / lib / mysql文件夹复制到不同的服务器上吗? (mysql vs mariadb,不同的版本)

我曾经有一个Linux系统(LMDE)与MySQL。 系统对大多数数据库使用了innodb_file_per_table。 (不知道该版本是什么,无论LMDE中的“最新”)

我现在正在与MariaDBbuild立一个新系统(Manjaro / Arch)。

$ mysql --version mysql Ver 15.1 Distrib 10.0.15-MariaDB, for Linux (x86_64) using readline 5.1 

旧系统有大量的大数据库,我真的不想复制mysqldump。 我更愿意从旧系统复制/ var / lib / mysql文件夹。

这可能吗?

是的,这是可能的。 (我在写这个问题的时候想到了这个)

  1. 在新的Arch系统中安装MariaDB,validation它是否正常工作。
    对/etc/mysql/my.cnf进行更改。 例如innodb_file_per_table。
    (更多的是这个问题的范围之外)
  2. sudo systemctl stop mysqld
    (你想停止在两台服务器上,但在我的情况下,另一台已经closures)
  3. 重命名/ var / lib / mysql文件夹,例如/ var / lib / _mysql。
  4. 从旧的Debian(LMDE)系统复制旧的/ var / lib / mysql文件夹。
  5. 将文件所有权恢复到mysql:mysql在/ var / lib / mysql中的所有内容:
    sudo chown -R mysql:mysql /var/lib/mysql
  6. sudo systemctl start mysqld
    – > Job for mysqld.service failed. See "systemctl status mysqld.service" and "journalctl -xe" for details. Job for mysqld.service failed. See "systemctl status mysqld.service" and "journalctl -xe" for details.
  7. sudo systemctl status mysqld
    – >这表明该服务正在运行,但有些事情出错了。 这是mysql_upgrade的用途。
  8. mysql_upgrade -u root -p
    笔记:
    • 这是旧系统的mysql root密码!
    • 由于数据库名称无效,我必须从/ var / lib / mysql中删除一个剩余的文件夹。
    • 文件/ var / lib / mysql / mysql_upgrade_info需要是可写的。
    • 该过程可能需要一段时间。
  9. sudo systemctl restart mysqld

CAVEAT:显然你不能降级到较低的MySQL版本。 我试图将我的数据库迁移到MySQL 5.5(或者相应的MariaDB),并且服务器不会启动。 我不得不安装MySQL 5.6。 (对应于MySQL 5.6的MariaDB在我的Linux发行版上不可用)。