是否可以将我的默认MySQL数据目录更改为另一个路径?我能从旧位置访问数据库吗?
答案 0 :(得分:249)
使用以下命令停止MySQL:
sudo /etc/init.d/mysql stop
使用以下命令复制现有数据目录(默认位于/var/lib/mysql
):
sudo cp -R -p /var/lib/mysql /newpath
使用以下命令编辑MySQL配置文件:
sudo gedit /etc/mysql/my.cnf # or perhaps /etc/mysql/mysql.conf.d/mysqld.cnf
查找datadir
的条目,并将路径(应该是/var/lib/mysql
)更改为新的数据目录。
在终端中输入命令:
sudo gedit /etc/apparmor.d/usr.sbin.mysqld
查找以/var/lib/mysql
开头的行。使用新路径更改行中的/var/lib/mysql
。
保存并关闭文件。
使用以下命令重新启动AppArmor配置文件:
sudo /etc/init.d/apparmor reload
使用以下命令重启MySQL:
sudo /etc/init.d/mysql restart
现在登录MySQL,您可以访问之前的相同数据库。
答案 1 :(得分:13)
首先你应该停止mysql服务器。 e.g。
# /etc/init.d/mysql stop
之后你应该复制旧数据目录(例如/ var / lib / mysql)incl。通过
对新目录的权限# cp -R -p /var/lib/mysql /new/data/dir
现在您可以更新/etc/mysql/my.cnf
数据new并重新启动服务器
# /etc/init.d/mysql restart
答案 2 :(得分:12)
您必须将当前数据复制到新目录并更改您的my.cnf
MySQL。
[mysqld]
datadir=/your/new/dir/
tmpdir=/your/new/temp/
当服务器未运行时,您必须复制数据库。
答案 3 :(得分:9)
快速简便:
# 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
答案 4 :(得分:5)
我想在我的机器上保留一个数据库,但我的外部硬盘上也有数据,并在使用这两个数据库之间切换。
如果您使用的是Mac,并使用Homebrew安装了MySQL,这应该适合您。否则,您只需要在计算机上替换MySQL 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
并且您再次使用本地数据库。希望有所帮助。
答案 5 :(得分:5)
首先停止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)也可能会出问题。
答案 6 :(得分:4)
首先停止你的mysql
sudo service mysql stop
将mysql数据复制到新位置。
sudo cp -rp /var/lib/mysql /yourdirectory/
如果您使用apparmor,请编辑以下文件并执行以下操作
sudo vim /etc/apparmor.d/usr.sbin.mysqld
将/ var / lib /替换为/ yourdirectory /然后在文件不存在的情况下添加以下内容
/yourdirectory/mysql/ r,
/yourdirectory/mysql/** rwk,
使用命令
保存文件:wq
编辑文件my.cnf
sudo vim /etc/mysql/my.cnf
将/ var / lib /替换为/ yourdirectory /然后使用命令
保存:wq
最后启动mysql
sudo service mysql start
@更多关于raid0,优化ici
的信息答案 7 :(得分:3)
此解决方案适用于使用Workbench的Windows 7。您将需要管理员权限才能执行此操作。它创建了一个连接点(如快捷方式),可以存储您真正想要存储数据的地方
打开Workbench并选择INSTANCE - Startup / Shutdown 停止服务器
从https://bitsum.com/junctionmaster.php
安装Junction Master导航到C:\ ProgramData \ MySQL \ MySQL Server 5.6
右键单击Data并选择“MOVE然后将LINK文件夹设置为...” 接受警告 将目标指向“此处没有引号的新数据目录” 点击移动和链接
现在转到“这里没有引号的新数据目录”
右键单击“数据” 转到安全选项卡 单击编辑 单击添加 键入NETWORK SERVICE,然后检查名称 单击确定 单击“允许完全控制”复选框,然后单击“确定”
返回Workbench并启动服务器
这种方法适用于我在Windows 7 Enterprise上使用MySQL Workbench 6.2。
答案 8 :(得分:3)
如果像我一样,您使用的是debian,并且想将mysql目录移动到您的家庭或/ home / ...上的路径,则解决方法是:
有一天可以在mariadb文档中找到适合我的解决方案。 希望这对某些人有所帮助!
答案 9 :(得分:2)
@ user1341296所说的一切,加上......
你最好不要改变/etc/mysql/my.cnf
相反,您想要创建新文件/etc/mysql/conf.d/ext.cnf
(任何名称,但扩展名应为cnf
)
并将其改为:
[mysqld]
datadir=/vagrant/mq/mysql
以这种方式
答案 10 :(得分:1)
升级机器时,我经常需要这样做,从一个盒子到另一个盒子。除了将/ var / lib / mysql移动到更好的位置之外,我经常需要从旧的MySQL安装中恢复旧的DB表。为了做到这一点......
答案 11 :(得分:1)
我们不得不将MySQL移动到/home
目录,因为它是从另一个物理光盘映射的。为了使实时更简单,我们在my.cnf中更改目录,而不是在原始目录/home/mysql
的位置映射新目录/var/lib/mysql
。它对我们来说就像一个魅力(在CentOS 7.1上测试过)。
创建新目录并设置正确的权限。
mkdir -p /home/mysql
chmod 755 /home/mysql
chown mysql:mysql /home/mysql
如果正在运行,请停止MySQL。
systemctl stop mysql
移动数据目录。
mv -f /var/lib/mysql/* /home/mysql
创建永久挂载并执行它。
echo "/home/mysql /var/lib/mysql none bind 0 0" >> /etc/fstab
mount -a
重启服务器。
systemctl start mysql
答案 12 :(得分:1)
如果你想以编程方式执行此操作(没有使用gedit手动输入文本),这里是基于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/
答案 13 :(得分:1)
如果您是Windows用户并且登陆此处以查找所有答案均适用于Linux用户,请不要失望!我不会让你像以前那样浪费时间。
解决方案前的一些胡说八道:
MySQL使用数据目录存储您创建的不同数据库的数据。好吧,最后,它必须以文件的形式存储它们,并在应用程序和文件格式中添加一些杂项,以确保您在数据库类中学习到的数据库承诺是完整的。
现在,您要确保有足够的空间来存储将来可能创建的大型数据库,所以您想,嘿!我想将其放入具有更多空间的另一个驱动器中。
所以您执行以下操作。
步骤-1 :停止MySQL服务。
Window Key + R - will open Run
servies.msc - will open services manager
Locate MySQL80 (80 is for version 8.0, look for the one you've).
Stop it. (Right click, Stop)
步骤-2 :查找当前数据目录
Goto C:\ProgramData\MySQL\MySQL Server 8.0
默认情况下,这里应该有一个名为Data
的文件夹,这是一个
在默认设置下由MySQL使用(前提是他们没有找到其他更好的位置),但是让我们检查一下。
查找my.ini
文件,应该在该位置。
在编辑器中打开它(可能是Notepad ++)。
执行CTRL + F可以在文件中找出datadir
。
这里所说的是 MySQL当前用于数据目录的实际位置。这就是您要更改的内容。
步骤-3 :用新的数据目录替换。
假设您希望新数据目录为W:__ MySQL_Data。让我们改变
datadir
文件中的my.ini
值与此值相同。保留前一个值的注释,这样您就不必记住它。
# Path to the database root
# datadir=C:/ProgramData/MySQL/MySQL Server 8.0/Data
datadir=W:/__MySQL_Data
现在使用xcopy
将默认的datadir
复制到W:\
。启动命令提示符(Window + R,cmd,Enter)
>> xcopy "\C:\ProgramData\MySQL\MySQL Server 8.0" "W:\" /E /H /K /O /X
,然后将复制的文件夹重命名为您更改的新datadir
值。此处:W:/__MySQL_Data
为什么不简单地复制?好吧,因为那不是COOL !,这可以帮助您避免丢失对复制的文件夹的权限,因此,当您重新启动MySQL80
时,它不会出现愚蠢的错误:“本地计算机上的MySQL80服务已启动然后停止。如果某些服务未被其他服务或程序使用,则会自动停止。” -礼貌: Microsoft
步骤-4 :重新启动服务
Well, go back to the Services Manager to Start again,
"MySQL80" that you stopped, to restart it again.
步骤-5 :完成!现在开始工作!
答案 14 :(得分:0)
首先,您应该知道配置文件在哪里?你的配置文件在哪里?
如果您使用apt-get或yum install安装。
配置文件可能会出现在
中/etc/mysql/my.cnf
数据文件可能会出现在
中的/ var / lib中/ MySQL的
你应该做的是
然后完成工作。
但如果您没有使用apt或yum安装它,则可能不喜欢这样 ,你可以用
找到mysql文件whereis mysql
答案 15 :(得分:0)
在SuSE 13.1下,这可以很好地将mysql数据目录移动到其他位置,例如到/ home / example_user /,并给它一个更具信息性的名称:
在/ var / lib /中:
// Include standard libraries
#include <cstdlib>
#include <cmath>
#include <vector>
#include <array>
#include <iostream>
int main(int nargs, char* args[])
{
std::cout << "bessel function " << jn(5./2., 1.) << "\n" ;
}
我重启了mysql:
# mv -T mysql /home/example_user/mysql_datadir
# ln -s /home/example_user/mysql_datadir ./mysql
但怀疑即使这不是必要的。
答案 16 :(得分:0)
对于其中一个环境,我将mysql数据目录更改为新位置,但在重启mysql服务器期间,需要时间。所以我检查了端口,发现其他进程正在侦听mysql端口。所以我杀了进程并重新启动了mysql服务器,它运行良好。
我按照以下步骤更改了优秀的数据目录。 change mysql data directory in Linux
答案 17 :(得分:0)
以上步骤是基础和基本步骤。我跟随他们,仍然出现“ mysql无法启动”错误。
对于用于存储mysql数据的新文件夹,您需要确保 该文件夹具有权限和所有权mysql:mysql。
此外,如果具有/ data / mysql /,则需要检查mysql父目录的权限和所有权。 / data /目录应为root:root。在更改/ mysql父目录的所有权后,我修复了“ mysql无法启动”的错误。 我的VM中的操作系统是RHEL 7.6。
答案 18 :(得分:0)
也可以符号链接数据目录。至少在macOS开发环境中。
(自制)e。 g。
# make sure you're not overwriting anything important, backup existing data
mv /usr/local/var/mysql [your preferred data directory]
ln -s [your preferred data directory] /usr/local/var/mysql
重新启动mysql。
答案 19 :(得分:0)
除了已接受的答案,如果您想在 bash 脚本或 dockerfile 中以编程方式更改配置文件中的 datadir,您可以使用 sed:
sed -i 's|# datadir\t= /var/lib/mysql|datadir\t= custom_path|g' /etc/mysql/mysql.conf.d/mysqld.cnf
这会取消对设置的注释并将值设置为 custom_path
。这里的一个重要细节是 =
左侧的字符是制表符,右侧的字符是空格。我花了一段时间才找到它。
答案 20 :(得分:-1)
如果您使用的是SE Linux,请通过编辑/ etc / selinux / config将其设置为许可模式 和改变 SELINUX =强制执行SELINUX = permissive