是否可以将默认的MySQL数据目录更改为其他路径?我可以从旧位置访问数据库吗?
是否可以将默认的MySQL数据目录更改为其他路径?我可以从旧位置访问数据库吗?
Answers:
使用以下命令停止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,您可以访问以前的数据库。
alias /var/lib/mysql/ -> /newpath/,
快速简便:
# 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
您将不得不将当前数据复制到新目录并更改您my.cnf
的MySQL。
[mysqld]
datadir=/your/new/dir/
tmpdir=/your/new/temp/
服务器未运行时,必须复制数据库。
ln -s
静态符号天猫,那不是吗?
my.cnf
首先,您应该停止mysql服务器。例如
# /etc/init.d/mysql stop
之后,您应该复制旧的数据目录(例如/ var / lib / mysql),包括。通过新目录的特权
# cp -R -p /var/lib/mysql /new/data/dir
现在您可以更改/etc/mysql/my.cnf
新数据并重新启动服务器
# /etc/init.d/mysql restart
如果像我一样,您使用的是debian,并且想将mysql目录移动到您的家庭或/ home / ...上的路径,则解决方案是:
有一天可以在mariadb文档中为我找到解决方案。希望这对某些人有所帮助!
我想在我的机器上保留一个数据库,但还要在外部硬盘驱动器上保留一个数据,然后在使用两者之间进行切换。
如果您使用的是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
并且您再次使用本地数据库。希望有帮助。
首先停止mysqld
mysql_install_db --user=mysql \
--basedir=/opt/mysql/mysql \
--datadir=/opt/mysql/mysql/data
然后在/etc/mysql/my.cnf
启动mysqld中更改datadir
注意:
#1:可能您必须调整SELinux设置(如果遇到麻烦,请禁用SELinux进行尝试),也可能会出现Apparmor(Ubuntu)。
#2:请参阅《MySQL Install DB参考》
首先停止你的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的更多信息
此解决方案在Windows 7中使用Workbench起作用。您将需要管理员权限才能执行此操作。它会在您真正想要存储数据的地方创建一个结点(如快捷方式)
打开Workbench并选择INSTANCE-启动/关闭停止服务器
从https://bitsum.com/junctionmaster.php安装Junction Master
导航到C:\ ProgramData \ MySQL \ MySQL Server 5.6
右键单击“数据”,然后选择“移动,然后将文件夹移动到...”,接受警告,将指针指向“您的新数据目录,不带引号”。单击“移动并链接”
现在转到“此处没有引号的新数据目录”
右键单击“数据”,然后转到“安全性”选项卡。单击“编辑”,单击“添加类型”,然后单击“检查名称”,然后单击“确定”。单击“允许完全控制”复选框,然后单击“确定”。
返回工作台并启动服务器
在Windows 7 Enterprise上使用MySQL Workbench 6.2时,此方法对我有效。
如果您是Windows用户并且登陆此处以查找所有答案均适用于Linux用户,请不要失望!我不会让你像我那样浪费时间。
解决方案前的一些胡说八道:
MySQL使用数据目录存储您创建的不同数据库的数据。好吧,最后,它必须以文件的形式存储它们,并在应用程序和文件格式中添加一些附加功能,以确保您在Databases类中学到的Database承诺是完整的。
现在,您要确保有足够的空间来存储将来可能创建的大型数据库,所以您想,嘿!我想将其放入具有更多空间的另一个驱动器中。
因此,请执行以下操作。
步骤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服务已启动,然后停止。它们未被其他服务或程序使用。” -礼貌:微软
步骤4:重新启动服务
Well, go back to the Services Manager to Start again,
"MySQL80" that you stopped, to restart it again.
步骤5:完成!现在恢复工作!
升级机器时,在箱子之间移动时,我经常需要这样做。除了将/ var / lib / mysql移至更好的位置之外,我通常还需要从旧的MySQL安装还原旧的DB表。为此...
我们必须将MySQL移到/home
目录中,因为它是从另一个物理磁盘映射的。为了简化工作流程,我们将新目录映射/home/mysql
到原始目录的位置,而不是在my.cnf中更改目录/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
如果您想以编程方式执行此操作(不使用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 Hub上可用:https : //hub.docker.com/r/richardjecooke/ruby-mysql-in-memory/
首先,您应该知道配置文件在哪里?您的配置文件在哪里?
如果您使用apt-get或yum install进行安装。
配置文件可能会出现在
/etc/mysql/my.cnf
数据文件可能会出现在
/ var / lib / mysql
而你应该做的是
然后完成工作。
但是,如果您未使用apt或yum安装它,则目录可能不会这样,您可以使用以下命令找到mysql文件
MySQL在哪里
对于其中一种环境,我将mysql数据目录更改为新位置,但是在mysql服务器重新启动期间,这需要时间。所以我检查了端口,发现其他进程正在监听mysql端口。因此,我终止了该进程并重新启动了mysql服务器,它运行良好。
我按照以下步骤更改了数据目录,效果很好。 在Linux中更改mysql数据目录
以上步骤是基础和基本的。我跟随他们,仍然出现“ mysql无法启动”的错误。
对于用于存储mysql数据的新文件夹,您需要确保该文件夹具有mysql:mysql的权限和所有权。
除此之外,如果具有/ data / mysql /,它还需要检查mysql父目录的权限和所有权。/ data /目录应位于root:root。在更改/ mysql父目录的所有权后,我修复了“ mysql无法启动”的错误。我的VM中的操作系统是RHEL 7.6。
也可以符号链接数据目录。至少在macOS开发环境中。
(自制)例如
# 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。
如果使用的是SE linux,请通过编辑/ etc / selinux / config并将SELINUX = enforceing更改为SELINUX = permissive将其设置为宽松模式。
datadir