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

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

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

我现在使用带有 MariaDB 的新系统(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

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

  1. 在新的 Arch 系统中安装 MariaDB,验证它是否正常工作。
    对 /etc/mysql/my.cnf 进行更改。例如 innodb_file_per_table。
    (更多内容超出了这个问题的范围)
  2. sudo systemctl stop mysqld
    (您想在两台服务器上都停止,但就我而言,另一台服务器已经关闭)
  3. 重命名 /var/lib/mysql 文件夹,例如重命名为 /var/lib/_mysql。
  4. 从旧的 Debian(LMDE)系统复制旧的 /var/lib/mysql 文件夹。
  5. 将 /var/lib/mysql 中的所有内容的所有权恢复为 mysql: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.
  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

警告:显然您无法降级到较低的 MySQL 版本。我尝试将我的数据库迁移到 MySQL 5.5(或者更确切地说,相应的 MariaDB),但服务器无法启动。我不得不安装 MySQL 5.6。(我的 Linux 发行版上没有与 MySQL 5.6 对应的 MariaDB)。

相关内容