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

don*_*ote 9 mysql arch-linux 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
Run Code Online (Sandbox Code Playgroud)

旧系统有很多大型数据库,我真的不想用 mysqldump 进行复制。我更喜欢从旧系统复制 /var/lib/mysql 文件夹。

这可能吗?

don*_*ote 21

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

  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。(对应于 MySQL 5.6 的 MariaDB 在我的 Linux 发行版上不可用)。

  • 您还应该注意,此过程不会复制服务器配置。虽然您可能希望接受一些新的默认值,但您可能还想确保您也从 `/etc/my.cnf` 复制任何自定义变量。 (4认同)