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


9

我曾经有一个带有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文件夹。

这可能吗?


滑稽。现在我需要完全相反的方向,从Arch到Mint(基于Ubuntu),而我又一无所知。替换/ var / lib / mysql后,出现“启动:作业启动失败”的消息。
donquixote

Answers:


20

是的,有可能。(我在写问题时发现了这一点)

  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根密码!
    • 由于数据库名称无效,我不得不从/ var / lib / mysql中删除一个剩余文件夹。
    • 文件/ var / lib / mysql / mysql_upgrade_info必须可写。
    • 该过程可能需要一段时间。
  9. sudo systemctl restart mysqld

CAVEAT:显然您不能降级到较低的MySQL版本。我尝试将数据库迁移到MySQL 5.5(或者相应的MariaDB),服务器无法启动。我不得不安装MySQL 5.6。(与Linux 5.6对应的MariaDB在我的Linux发行版中不可用)。


1
似乎令人印象深刻,+ 1。但是:仅仅在两端停止mysql,rsync-ing / var / lib / mysql,然后启动还不够吗?
彼得-恢复莫妮卡2015年

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

@理查德:是的。实际上,我必须做一些这样的事情,只是我不记得确切地更改了什么。一项更改是我启用了innodb_file_per_table。
donquixote 2015年

@PeterHorvath不,必须使用mysql_upgrade。
donquixote 2015年

只是说,我只是从Manjaro到Mint做过同样的事情。它起作用了,但是再次重要的是使用MySQL 5.6,而不是MariaDB 5.5。
donquixote
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.