如何更改MySQL数据目录?

是否有可能将我的默认MySQL数据目录更改为另一个path? 我能够从旧位置访问数据库吗?

  1. 使用以下命令停止MySQL:

    sudo /etc/init.d/mysql stop 
  2. 使用以下命令复制现有的数据目录(默认位于/var/lib/mysql ):

     sudo cp -R -p /var/lib/mysql /newpath 
  3. 使用以下命令编辑MySQLconfiguration文件:

     sudo gedit /etc/mysql/my.cnf # or perhaps /etc/mysql/mysql.conf.d/mysqld.cnf 
  4. 查找datadir的条目,并将path(应该是/var/lib/mysql )更改为新的数据目录。

  5. 在terminal中input命令:

     sudo gedit /etc/apparmor.d/usr.sbin.mysqld 
  6. 寻找以/var/lib/mysql开头的行。 用新path更改/var/lib/mysql

  7. 保存并closures文件。

  8. 使用以下命令重新启动AppArmorconfiguration文件:

     sudo /etc/init.d/apparmor reload 
  9. 使用以下命令重新启动MySQL:

     sudo /etc/init.d/mysql restart 
  10. 现在login到MySQL,你可以访问你以前的相同的数据库。

首先你应该停止mysql服务器。 例如

 # /etc/init.d/mysql stop 

之后,你应该复制旧的数据目录(例如/ var / lib / mysql)incl。 特权通过你的新目录

 # cp -R -p /var/lib/mysql /new/data/dir 

现在您可以在/etc/mysql/my.cnf中更改新的数据并重新启动服务器

 # /etc/init.d/mysql restart 

你将不得不复制当前的数据到新的目录,并改变你的my.cnf你的MySQL。

 [mysqld] datadir=/your/new/dir/ tmpdir=/your/new/temp/ 

服务器不运行时,您必须复制数据库。

首先停止mysqld

 mysql_install_db --user=mysql \ --basedir=/opt/mysql/mysql \ --datadir=/opt/mysql/mysql/data 

然后改变/etc/mysql/my.cnf中的datadir
启动mysqld

笔记:
#1:可能你必须调整你的SELinux设置(如果遇到问题,可以试试SELinux禁用),Apparmor(Ubuntu)也可能是问题。

#2:请参阅MySQL安装数据库参考

我想保留我的机器上的数据库,但也有我的外部硬盘上的数据,并使用两者之间切换。

如果你在Mac上,并使用Homebrew安装MySQL,这应该为你工作。 否则,只需要在机器上replaceMySQL数据datadir的适当位置即可。

 #cd to my data dir location cd /usr/local/var/ #copy contents of local data directory to the new location cp -r mysql/ /Volumes/myhd/mydatadir/ #temporarily move the old datadir mv mysql mysql.local #symlink to the new location ln -s /Volumes/myhd/mydatadir mysql 

然后,当你想切换回来,只需做到:

 mv mysql mysql.remote mv mysql.local mysql 

并且您正在使用您的本地数据库了。 希望有所帮助。

首先停止你的MySQL

 sudo service mysql stop 

将mysql数据复制到新的位置。

 sudo cp -rp /var/lib/mysql /yourdirectory/ 

如果使用apparmor,请编辑以下文件并执行以下操作

 sudo vim /etc/apparmor.d/usr.sbin.mysqld 

replace/ var / lib / by / yourdirectory /然后添加如果不存在的文件

  /yourdirectory/mysql/ r, /yourdirectory/mysql/** rwk, 

用这个命令保存文件

 :wq 

编辑文件my.cnf

 sudo vim /etc/mysql/my.cnf 

replace/ var / lib / by / yourdirectory /然后用命令保存

 :wq 

终于启动mysql了

 sudo service mysql start 

@更多关于raid0,优化ici

该解决scheme使用Workbench在Windows 7中运行。 您将需要pipe理员权限来执行此操作。 它创build一个交汇点(如快捷方式)到任何你想要存储数据的地方

打开工作台并select实例 – 启动/closures停止服务器

https://bitsum.com/junctionmaster.php安装Junction Master

导航到C:\ ProgramData \ MySQL \ MySQL Server 5.6

右键单击数据,然后select“移动,然后LINK文件夹…”接受警告点的目的地为“您的新数据目录在这里没有引号”单击移动和链接

现在转到“您的新数据目录没有引号”

右键单击数据转到安全选项卡单击编辑单击添加typesnetworking服务,然后检查名称单击确定单击允许完全控制checkbox,然后单击确定

返回工作台并启动服务器

此方法在Windows 7 Enterprise上使用MySQL Workbench 6.2。

一切都像@ user1341296说的,再加上…

您最好不要更改/etc/mysql/my.cnf而是要创build新文件/etc/mysql/conf.d/ext.cnf (任何名称,但扩展名应该是cnf

并把它放在你的变化:

 [mysqld] datadir=/vagrant/mq/mysql 

通过这种方式

  • 您不需要更改现有文件(对于自动化脚本更容易)
  • MySQL版本(及其configuration!)更新没有问题。

升级机器时,我经常需要这样做,从一个盒子到另一个盒子。 除了将/ var / lib / mysql移动到更好的位置之外,我还经常需要从旧的MySQL安装中恢复旧的DB表。 为此…

  1. 停止mysql。 按照上面的说明,它是必要的。
  2. 将数据库目录复制到新的DATADIR位置,每个旧的安装数据库都会有一个目录。 但省略“mysql”和“performance_schema”目录。
  3. 更正复制的数据库目录中的权限。 所有权应该是mysql:mysql,目录应该是700,文件应该是660。
  4. 重新启动mysql。 根据您的安装,旧版本的DB文件应该被更新。

我们必须将MySQL移动到/home目录,因为它是从另一个物理磁盘映射的。 为了让生活变得更简单,我们已经将新目录/home/mysql映射到原始目录/var/lib/mysql的位置,而不是更改my.cnf中的目录。 它对我们来说就像一个魅力(在CentOS 7.1上testing)。

创build新的目录并设置正确的权限。

 mkdir -p /home/mysql chmod 755 /home/mysql chown mysql:mysql /home/mysql 

停止MySQL如果运行。

 systemctl stop mysql 

移动数据目录。

 mv -f /var/lib/mysql/* /home/mysql 

创build一个永久安装并执行它。

 echo "/home/mysql /var/lib/mysql none bind 0 0" >> /etc/fstab mount -a 

重新启动服务器。

 systemctl start mysql 

首先,你应该知道你的configuration文件在哪里? 你的configuration文件在哪里?

如果你安装了apt-get或yum安装。

configuration文件可能会出现在

/etc/mysql/my.cnf

数据文件可能会出现在

在/ var / lib中/ MySQL的

你应该做的是

  1. 停止mysql
  2. 将mysql数据更改为新的dirctory
  3. 更改configuration文件
  4. 重新加载configuration文件
  5. 重启mysql

然后完成工作。

但是如果你没有安装apt或yum,direcotry可能不喜欢这个,你可以findmysql文件

whereis mysql

在SuSE 13.1下,这可以很好地将mysql数据目录移动到其他地方,例如移动到/ home / example_user /,并为其提供更多信息的名称:

在/ var / lib /中:

 # mv -T mysql /home/example_user/mysql_datadir # ln -s /home/example_user/mysql_datadir ./mysql 

我重新启动mysql:

 # systemctl restart mysql.service 

但怀疑即使这不是必要的。

如果你想以编程的方式来做到这一点(没有使用gedit的手动input文本),那么根据上面user1341296的回答,这里是一个Dockerfile的版本:

 FROM spittet/ruby-mysql MAINTAINER you@gmail.com RUN cp -R -p /var/lib/mysql /dev/shm && \ rm -rf /var/lib/mysql && \ sed -i -e 's,/var/lib/mysql,/dev/shm/mysql,g' /etc/mysql/my.cnf && \ /etc/init.d/mysql restart 

在Docker中心可用: https : //hub.docker.com/r/richardjecooke/ruby-mysql-in-memory/

快速简单的做法:

 # Create new directory for MySQL data mkdir /new/dir/for/mysql # Set ownership of new directory to match existing one chown --reference=/var/lib/mysql /new/dir/for/mysql # Set permissions on new directory to match existing one chmod --reference=/var/lib/mysql /new/dir/for/mysql # Stop MySQL before copying over files service mysql stop # Copy all files in default directory, to new one, retaining perms (-p) cp -rp /var/lib/mysql/* /new/dir/for/mysql/ 

编辑/etc/my.cnf文件,在[mysqld]添加这一行:

 datadir=/new/dir/for/mysql/ 

如果您正在使用CageFS(有或没有CloudLinux)并且想要更改MySQL目录,则必须将新目录添加到此文件中:

 /etc/cagefs/cagefs.mp 

然后运行这个命令:

 cagefsctl --remount-all 

如果您正在使用SE linux,请通过编辑/ etc / selinux / config并将SELINUX = enforcing更改为SELINUX = permissive将其设置为宽容模式