小智 253
使用以下命令停止MySQL:
sudo /etc/init.d/mysql stop
Run Code Online (Sandbox Code Playgroud)/var/lib/mysql
使用以下命令复制现有数据目录(默认位于):
sudo cp -R -p /var/lib/mysql /newpath
Run Code Online (Sandbox Code Playgroud)使用以下命令编辑MySQL配置文件:
sudo gedit /etc/mysql/my.cnf # or perhaps /etc/mysql/mysql.conf.d/mysqld.cnf
Run Code Online (Sandbox Code Playgroud)查找条目datadir
,并将路径(应该是/var/lib/mysql
)更改为新数据目录.
在终端中,输入命令:
sudo gedit /etc/apparmor.d/usr.sbin.mysqld
Run Code Online (Sandbox Code Playgroud)寻找以...开头的行/var/lib/mysql
./var/lib/mysql
使用新路径更改行.
保存并关闭文件.
使用以下命令重新启动AppArmor配置文件:
sudo /etc/init.d/apparmor reload
Run Code Online (Sandbox Code Playgroud)使用以下命令重启MySQL:
sudo /etc/init.d/mysql restart
Run Code Online (Sandbox Code Playgroud)现在登录MySQL,您可以访问之前的相同数据库.
Rag*_*geZ 14
您必须将当前数据复制到新目录并更改您my.cnf
的MySQL.
[mysqld]
datadir=/your/new/dir/
tmpdir=/your/new/temp/
Run Code Online (Sandbox Code Playgroud)
您必须在服务器未运行时复制数据库.
H6.*_*H6. 13
首先你应该停止mysql服务器.例如
# /etc/init.d/mysql stop
Run Code Online (Sandbox Code Playgroud)
之后你应该复制旧的数据目录(例如/ var/lib/mysql)incl.通过的新目录的权限
# cp -R -p /var/lib/mysql /new/data/dir
Run Code Online (Sandbox Code Playgroud)
现在您可以更改/etc/mysql/my.cnf
数据new并重新启动服务器
# /etc/init.d/mysql restart
Run Code Online (Sandbox Code Playgroud)
sMy*_*les 11
快速简便:
# 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/
Run Code Online (Sandbox Code Playgroud)
编辑/etc/my.cnf
文件,然后[mysqld]
添加以下行:
datadir=/new/dir/for/mysql/
Run Code Online (Sandbox Code Playgroud)
如果您正在使用CageFS(有或没有CloudLinux)并想要更改MySQL目录,您必须将新目录添加到此文件:
/etc/cagefs/cagefs.mp
Run Code Online (Sandbox Code Playgroud)
然后运行此命令:
cagefsctl --remount-all
Run Code Online (Sandbox Code Playgroud)
小智 8
如果像我一样使用 debian 并且想将 mysql 目录移动到您的家或 /home/... 上的路径,则解决方案是:
有一天在 mariadb 文档上为我找到了解决方案。希望这可以帮助一些人!
如果您是 Windows 用户并登陆这里发现所有答案都适用于 Linux 用户,请不要失望!我不会让你像我那样浪费时间。
解决方案前的一些废话:
MySQL 使用一个 Data 目录来存储您创建的不同数据库的数据。好吧,最后,它必须以文件的形式存储它们,并在应用程序和文件格式中添加一些杂耍,以确保您在 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)
Run Code Online (Sandbox Code Playgroud)
Step - 2 : 找出当前的Data目录
Goto C:\ProgramData\MySQL\MySQL Server 8.0
Run Code Online (Sandbox Code Playgroud)
默认情况下,这里应该有一个名为 的文件夹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
Run Code Online (Sandbox Code Playgroud)
现在使用xcopy
将默认值复制datadir
到W:\
. 启动命令提示符(Window + R、cmd、Enter)
>> xcopy "\C:\ProgramData\MySQL\MySQL Server 8.0" "W:\" /E /H /K /O /X
Run Code Online (Sandbox Code Playgroud)
并将复制的文件夹重命名为datadir
您更改的新值。这里:W:/__MySQL_Data
为什么不简单地复制?好吧,因为那不是很酷!,这有助于您不会失去对复制文件夹的权限,因此当您重新启动时MySQL80
,它不会给出愚蠢的错误:“本地计算机上的 MySQL80 服务启动然后停止。某些服务会自动停止,如果它们未被其他服务或程序使用。” - 礼貌:微软
第 4 步:重新启动服务
Well, go back to the Services Manager to Start again,
"MySQL80" that you stopped, to restart it again.
Run Code Online (Sandbox Code Playgroud)
第 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
Run Code Online (Sandbox Code Playgroud)
然后当你想要切换回来时,只需:
mv mysql mysql.remote
mv mysql.local mysql
Run Code Online (Sandbox Code Playgroud)
并且您再次使用本地数据库.希望有所帮助.
小智 5
首先停止mysqld
mysql_install_db --user=mysql \
--basedir=/opt/mysql/mysql \
--datadir=/opt/mysql/mysql/data
Run Code Online (Sandbox Code Playgroud)
然后在/etc/mysql/my.cnf
Start mysqld中更改datadir
注意:
#1:可能你必须调整你的SELinux设置(尝试在发生故障时禁用SELinux),Apparmor(Ubuntu)也可能会出问题.
#2:请参阅MySQL安装数据库参考
小智 5
首先停止你的mysql
sudo service mysql stop
Run Code Online (Sandbox Code Playgroud)
将mysql数据复制到新位置。
sudo cp -rp /var/lib/mysql /yourdirectory/
Run Code Online (Sandbox Code Playgroud)
如果您使用apparmor,请编辑以下文件并执行以下操作
sudo vim /etc/apparmor.d/usr.sbin.mysqld
Run Code Online (Sandbox Code Playgroud)
将 where /var/lib/ 替换为 /yourdirectory/ 然后将以下内容添加到文件中(如果不存在)
/yourdirectory/mysql/ r,
/yourdirectory/mysql/** rwk,
Run Code Online (Sandbox Code Playgroud)
使用命令保存文件
:wq
Run Code Online (Sandbox Code Playgroud)
编辑文件 my.cnf
sudo vim /etc/mysql/my.cnf
Run Code Online (Sandbox Code Playgroud)
用 /yourdirectory/ 替换 where /var/lib/ 然后用命令保存
:wq
Run Code Online (Sandbox Code Playgroud)
最后启动mysql
sudo service mysql start
Run Code Online (Sandbox Code Playgroud)
@查看更多关于raid0,优化ici
我可以成功地更改MySQL或MariaDB的数据目录,并解决Fedora 30上的所有相关问题。我认为以下步骤也适用于其他发行版。
注意:Debian-based
类似发行版的用户Ubuntu
应搜索如何禁用和编辑AppArmor
,然后按照以下步骤操作。
首先,我要提一下基于 RedHat 的 Linux 发行版(RHEL),例如Fedora、CentOS等。使用强制执行强制访问控制策略的SELinux 。因此,最好disable
在以下步骤中使用它,然后通过一些调整来启用它。
打开SELinux配置文件
nano /etc/selinux/config
Run Code Online (Sandbox Code Playgroud)
找到包含的行SELINUX=enforcing
并将其值更改为SELINUX=disabled
,保存文件并重新启动系统。
停止MySQL服务
systemctl stop mysqld.service
Run Code Online (Sandbox Code Playgroud)
为MySQl的数据目录创建一个新目录。由于某些原因超出了此解决方案的范围,强烈建议不要在该/home
目录下创建数据目录,但也许你们中的一些人像我一样更喜欢它(它需要更多步骤)。
mkdir /home/eloy/applications/mysql-datadir/
Run Code Online (Sandbox Code Playgroud)
将新目录的所有权和权限设置为默认的 MySQL 数据目录( ):/var/lib/mysql
chown --reference=/var/lib/mysql /home/eloy/applications/mysql-datadir/
chmod --reference=/var/lib/mysql /home/eloy/applications/mysql-datadir/
Run Code Online (Sandbox Code Playgroud)
将所有文件从默认目录复制到新目录
cp -rp /var/lib/mysql/* /home/eloy/applications/mysql-datadir/
Run Code Online (Sandbox Code Playgroud)
编辑/etc/my.cnf
文件,在部分下添加以下行[mysqld]
:
[mysqld]
datadir=/home/eloy/applications/mysql-datadir/
Run Code Online (Sandbox Code Playgroud)
现在你可以通过以下命令启动MySQL服务
systemctl start mysqld.service
Run Code Online (Sandbox Code Playgroud)
但是如果数据目录是在 下创建的/home
,MySQL 将不会启动,并且您会在之后看到以下错误和警告journalctl -xe
:
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: 2021-10-05 10:22:03 0 [Warning] Could not increase number of max_open_files to more than 16384 (request: 32190)
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: 2021-10-05 10:22:03 0 [Warning] Can't create test file /home/eloy/applications/mysql-datadir/eloy-fedora-laptop.lower->
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: [113B blob data]
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: 2021-10-05 10:22:03 0 [ERROR] Aborting
Run Code Online (Sandbox Code Playgroud)
/home
问题确保新向上的所有父目录对所有(用户、组和其他datadir
)都具有x
(执行)权限。我不想使用递归脚本,所以:
chmod +x /home/eloy/applications/mysql-datadir
chmod +x /home/eloy/applications
chmod +x /home/eloy/
chmod +x /home
Run Code Online (Sandbox Code Playgroud)
正如前面提到的,在/home
目录下创建 datadir 是很棘手的,因为默认情况下 MySQL 不允许这样做。在 /etc/systemd/system/mariadb.service.d 下创建一个文件并放入以下行:
#open an editor to create a file
nano /etc/systemd/system/mariadb.service.d/centreon.conf
Run Code Online (Sandbox Code Playgroud)
将以下行复制到新centreon.conf
文件并保存
[Service]
ProtectHome=false
#ProtectSystem=off
Run Code Online (Sandbox Code Playgroud)
通过运行以下命令应用更改
systemctl daemon-reload
Run Code Online (Sandbox Code Playgroud)
现在您可以运行 MySQL 服务:
systemctl start mysqld.service
Run Code Online (Sandbox Code Playgroud)
再次编辑该/etc/selinux/config
文件,并将行更改SELINUX=disabled
为SELINUX=enforcing
。保存文件并重新启动系统。
要查询 SELinux 的当前状态,请使用以下命令,它应该enforcing
作为输出打印。
getenforce
Run Code Online (Sandbox Code Playgroud)
如果未正确设置,则使用SELinux context
过程将中止,因此您需要更新它:mysqld_db_t
mysqld
semanage fcontext -a -t mysqld_db_t "/home/eloy/applications/mysql-datadir(/.*)?"
restorecon -Rv /home/eloy/applications/mysql-datadir
Run Code Online (Sandbox Code Playgroud)
现在你可以运行MySQL了。干杯;-)