如何将MySQL数据库移动到另一个驱动器?


34

我在本地计算机上使用MySQL 5.5来分析大量政府数据。我创建了一个本地数据库,该数据库位于默认驱动器(Win7 C:驱动器)上。我想将数据存储在E:驱动器(大型eSATA外部驱动器)上。

我应该采取什么步骤?

mysql 

您不能将dB导出为sql文件,然后将文件保存为e:然后在将来,如果您想恢复dB,则可以导入此文件

@tq-那行不通。他想更改MySQL服务器数据目录。如果他导出并导入它,它仍将在同一驱动器上!

请注意,将数据库文件移动到外部驱动器时,必须将其插入计算机中,否则数据库将崩溃,因为它将无法找到数据文件
Stephen Senkomago Musoke 2012年

Answers:


35
  1. 关闭mysql。
  2. 将当前数据目录中的所有文件移动到新位置(在步骤3- datadir参数中检出该位置)。
  3. 找到my.ini文件(位于mysql安装目录中)。更改datadir参数值以指向新位置。
  4. 启动mysql。

这在尝试启动mysql时给了我错误(权限问题)。我决定在这里发布解决方案,希望该方法可以帮助您节省一些时间。
snapfractalpop

1
@snapfractalpop问题是针对Windows的
亚当

问题的正文中提到了@adam windows,但没有将其标记为仅Windows问题,也没有在标题中提及windows。我在评论中张贴了该链接,因为其他非Windows用户也可能会偶然发现此问题。
snapfractalpop

我发现我必须使用/\而不是\作为目录路径中的目录分隔符datadir。我在Windows 10上使用WAMPserver。–
Steve

ProgramData目录可能隐藏在文件浏览器中。我以为它不存在,直到我将设置更改为显示“隐藏文件”。
WestAce

6

尽管您要使用Windows,但对于那些最终在此寻找linux / ubuntu方向的人,这里有一些好的指导:

假设:

  • 您在外部/ usb /备用驱动器上有mysql数据/mountpoint/var/lib/mysql,可能来自已死机或旧安装的计算机
  • 您希望将其移动到本地的新Ubuntu安装中 /var/lib/mysql
  • 停止MySQL的使用:
    sudo /etc/init.d/mysql stop
  • 使用以下命令备份当前(干净的)MySQL数据目录
    sudo cp -Rp /var/lib/mysql /var/lib/mysql.backup
  • 然后使用以下命令从旧驱动器中复制旧数据目录:
    sudo cp -Rp /mountpoint/var/lib/mysql /var/lib/mysql
    where mountpoint是安装路径。
  • 现在使用以下命令重启MySQL:
    sudo /etc/init.d/mysql start

运气好的话,MySQL应该重新启动,并且您应该恢复旧数据库。

资料来源mb_webguy@ubuntuforums.org


3
(!)这将不起作用,因为配置仍指向旧位置
ADOConnection '18

4

解决方案1:

  1. 首先,使用mysqldump备份数据。
  2. 如果从官方程序包安装Mysql Server,则可以通过从服务器的bin目录运行程序MySQLINstanceConfig.exe来完成。
  3. 汇入资料

MySQLINstanceConfig.exe

第二种解决方案(不推荐,但可在同一台机器上使用)

  1. 停止Mysql服务器。
  2. 将数据从数据目录复制到新目录
  3. 打开my.cnf文件(在我的情况下为“ C:\ ProgramData \ MySQL \ MySQL Server 5.5 \ my.ini”)
  4. 查找类似datadir =“ C:\ ProgramData \ MySQL \ MySQL Server 5.5 \ data \”的行,并将路径更改为新位置
  5. 启动你的服务器

从5.6版本开始,不再分发MySQLInstanceConfig.exe。此功能已由安装程序取代。http://bugs.mysql.com/bug.php?id=66306


是否存在用于移动数据的等效Linux程序
Ron Piggott

使用第二种方法移动数据后,我无法启动MariaDB(5.5版)。授予服务用户访问新数据目录的权限后,服务将启动,并且我将连接到数据库。但是访问任何表仍然失败:[ERROR] Cannot find or open table <db>/<table> from the internal data dictionary of InnoDB though the .frm file for the table exists.。如何确保权限设置正确?
布拉姆

2

对于Windows,自MySQL Installer 1.4.6(2015-04-07)起,可以在指定my.ini文件位置的注册表项中指定数据位置,因此如果数据最初是安装在非默认位置该my.ini文件将不在C:\ProgramData\MySQL\MySQL Server x.x\

注册表值的位置是(至少从MySQL 5.6开始):

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MySQL AB\MySQL Server x.x\

LocationREG_SZ指向MySQL应用程序文件所在文件夹的;默认:C:\Program Files\MySQL\MySQL Server x.x\

DataLocationREG_SZ指向所在文件夹的my.ini;默认情况下也:C:\Program Files\MySQL\MySQL Server x.x\

此外,my.ini文件路径也包含在service命令中此注册表项下HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\MySQLXXImagePath REG_EXPAND_SZ值中:

该字符串的默认值为: "C:/Program Files/MySQL/MySQL Server 5.6/bin\mysqld" --defaults-file="C:\Program Files\MySQL\MySQL Server x.x\my.ini" MySQLXX

因此,最重要的是,在这种情况下,要移动数据文件,您必须遵循@ITCuties发布的步骤并进行一些补充。

完整步骤如下:

  1. 关闭mysql。
  2. 查找上面的DataLocation注册表值以找到当前my.ini文件位置,如果您还想移动my.ini文件,请更新DataLocation路径并将my.ini文件移动到该新路径。
  3. 如果要更改my.ini文件的位置,则需要更新上面列出的服务命令注册表项中的路径。
  4. 打开my.ini文件,找到datadir参数。将文件从该datadir路径移动到您想要数据驻留的路径,然后还datadir使用此新路径更新参数。
  5. 启动mysql。
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.