【问题标题】:Moving and Backing Up a Large MySQL Database移动和备份大型 MySQL 数据库
【发布时间】:2014-02-11 23:04:35
【问题描述】:
我正在使用 MySQL Workbench,并且构建了一个非常大的 (17 GB) 数据库。 MySQL 将数据放在 C:\ProgramData\MySQL\MySQL Server 5.5\data 目录中名为 ibdata1 的单个文件中。我的 C 盘空间不足,我想将其移至外部驱动器。是否可以移动该 ibdata1 文件,然后告诉 MySQL 指向另一个位置来找到它?另外,如果我想备份该数据,我可以复制 ibdata1 文件并保存它。然后,如果我的电脑被偷了或其他什么,我能以某种方式从那个文件中恢复那些数据吗?
【问题讨论】:
标签:
mysql
database
mysql-workbench
database-administration
【解决方案1】:
[mysqld]
innodb_data_file_path=ibdata1:10M:autoextend:max:500M
InnoDB 默认在 MySQL 数据目录中创建表空间文件。要明确指定位置,请使用 innodb_data_home_dir 选项。例如,要使用名为 ibdata1 和 ibdata2 的两个文件,但在 /ibdata 目录中创建它们,请像这样配置 InnoDB:
[mysqld]
innodb_data_home_dir = /ibdata
innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend
InnoDB 不创建目录,因此在启动服务器之前确保 /ibdata 目录存在。您配置的任何日志文件目录也是如此。使用 Unix 或 DOS mkdir 命令创建任何必要的目录。
确保 MySQL 服务器具有在数据目录中创建文件的适当访问权限。更一般地说,服务器必须在需要创建数据文件或日志文件的任何目录中具有访问权限。
- 除非您删除所有数据库、删除文件并重新加载转储,否则实际上无法缩小 ibdata1 文件。
但是您可以配置 MySQL,以便将每个表(包括其索引)存储为单独的文件。这样 ibdata1 就不会增长得那么大。根据 Bill Karwin 的评论,从 MySQL 5.6 版开始默认启用此功能。
这是我不久前做的。但是,要将您的服务器设置为对每个表使用单独的文件,您需要更改 my.cnf 以启用此功能:
[mysqld]
innodb_file_per_table
【解决方案2】:
是的,您可以更改 Mysql 服务器的数据目录。
从 Windows 服务停止 MySQL 服务器。
将现有数据目录(默认位于 C:/Program Files/mysql/data)复制到新路径或目录。
使用以下命令编辑 MySQL 配置文件:
打开my.cnf或my.ini这个文件位于mysql bin目录下。
查找 datadir 条目,并更改新数据目录的路径。
保存并关闭文件。
重启 MySQL 服务器。
【解决方案3】:
您可以将整个C:\ProgramData\MySQL\MySQL Server 5.5\data 复制/备份到另一个驱动器,更新my.cnf 或my.ini 中的datadir 选项以指向新位置,然后重新启动MySQL。