当前位置: 首页 > article >正文

如何在Ubuntu上更改MySQL数据存储路径

文章目录

    • 0 背景
    • 1 备份现有数据库数据
    • 2 停止 MySQL 服务
    • 3 复制现有的 MySQL 数据到新目录
    • 4 修改 MySQL 配置文件
    • 5 更新 AppArmor 或 SELinux 配置(如有启用)
    • 6. 修改 MySQL 系统文件中的 datadir
    • 7. 启动 MySQL 服务
    • 8. 验证更改
    • 参考资料

0 背景

在原先划分ubuntu磁盘分区的时候,给/分区划分的空间很少,但是其他的分区还有很多的空间。
故想把 mysql 数据库的数据迁移到另外的磁盘分区中。

1 备份现有数据库数据

更改 datadir 前,建议备份现有的 MySQL 数据,以防数据丢失。使用以下命令导出所有数据库:

mysqldump --all-databases > all-databases-backup.sql

2 停止 MySQL 服务

  • 查看 mysql 当前状态
    service mysql status 或者 systemctl status mysql
    在这里插入图片描述
    stop mysql
    sudo systemctl stop mysql
    再次查看 mysql 的状态
    在这里插入图片描述

3 复制现有的 MySQL 数据到新目录

复制当前的 MySQL 数据目录内容到新位置:
在 mysql 的命令中,运行下述指令,即可查看到数据文件的地址。
show global variables like "%datadir%";

我电脑的原始的 mysql 数据文件保存路径为:/var/lib/mysql/

数据迁移:

sudo cp -R /var/lib/mysql /home/soft/mysql_datadir/
sudo chown -R mysql:mysql /home/soft/mysql_datadir/mysql
sudo chmod 755 /home/soft/mysql_datadir/mysql

【注意】:

我最初选择放在我的家目录下,程序一直报错,没有权限访问该文件夹。
原来路径: /home/jie/soft/mysql_data/mysql 报错
新路径是 : /home/soft/mysql_data/mysql 正常使用
mysql 的数据存储,放在某个用户的家目录下,确实也不合适。因为可能会导致其他用户没有权限访问。

4 修改 MySQL 配置文件

我的电脑的 mysql 系统目录是: /etc/mysql/,找到 MySQL 的配置文件并更新 datadir:

根据自己的 mysql 选择下述两个文件的其中一个文件进行编辑:

sudo vim /etc/mysql/my.cnf

或者, (我用的是这个)

在这里插入图片描述
在修改前,可先备份。
针对配置文件进行修改:

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

找到 datadir 这一行并更改为新的目录,更新 socket 位置为新的 socket:

#
# The MySQL database server configuration file.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

# Here is entries for some specific programs
# The following values assume you have at least 32M ram

[mysqld]
#
# * Basic Settings
#
user            = mysql
# pid-file      = /var/run/mysqld/mysqld.pid
# socket        = /var/run/mysqld/mysqld.sock
#socket = /var/lib/mysql/mysql.sock
socket  = /home/soft/mysql_data/mysql/mysql.sock

#port           = 3306
datadir = /home/soft/mysql_data/mysql

5 更新 AppArmor 或 SELinux 配置(如有启用)

我只更新了 AppArmor 没有更新 SELinux

如果你的系统启用了 AppArmor 或 SELinux,可能需要更新其配置以允许 MySQL 访问新的 datadir。

AppArmor: 编辑 AppArmor 配置文件

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

添加新的 datadir 路径:

/home/soft/mysql_datadir/mysql/ r,
/home/soft/mysql_datadir/mysql/** rwk,

usr.sbin.mysqld 文件内容:

# Allow data dir access
  /var/lib/mysql/ r,
  /var/lib/mysql/** rwk,
  /home/soft/mysql_data/mysql/ r,
  /home/soft/mysql_data/mysql/** rwk,

保存后,重新加载 AppArmor 配置:

sudo systemctl restart apparmor

SELinux:如果使用 SELinux,你需要更新文件的安全上下文(我没有用到这个):

sudo semanage fcontext -a -t mysqld_db_t "/home/jie/soft/mysql_datadir(/.*)?"
sudo restorecon -Rv /home/jie/soft/mysql_datadir

6. 修改 MySQL 系统文件中的 datadir

编辑 MySQL 系统文件 /lib/systemd/system/mysql.service:

sudo vim /lib/systemd/system/mysql.service

找到以下部分:

ExecStartPre=/usr/share/mysql/mysql-systemd-start pre

在这一行的下方添加:

ExecStartPre=/bin/mkdir -p /home/jie/soft/mysql_datadir/mysql
ExecStartPre=/bin/chown -R mysql:mysql /home/jie/soft/mysql_datadir/mysql

效果如下图所示:
在这里插入图片描述

保存后,刷新 systemd 配置:

sudo systemctl daemon-reload

7. 启动 MySQL 服务

重新启动 MySQL 服务:

sudo systemctl start mysql

然后检查 MySQL 状态:

sudo systemctl status mysql

8. 验证更改

验证 MySQL 是否使用了新的 datadir:

mysql -u root -p -e "SHOW VARIABLES LIKE 'datadir';"

或者

mysql -h 127.0.0.1 -P 3306 -u root -p -e "SHOW VARIABLES LIKE 'datadir';"

如下图所示,返回新的 datadir 路径 /home/soft/mysql_datadir/mysql
在这里插入图片描述

如果一切正常,MySQL 将会在新的 datadir 下运行。如果遇到任何问题,可以通过日志文件 /home/soft/mysql_datadir/mysql/error.log 检查更多细节。

参考资料

  • MySQL更换数据存储路径的方法
  • chatgpt 4o

http://www.kler.cn/a/350459.html

相关文章:

  • 神经网络常见面试题
  • 在 Vue 3 项目中集成和使用 vue3-video-play
  • RabbitMQ---事务及消息分发
  • 1.写在前面
  • 新阿里云买服务器配置需手动配置80端口
  • (十五)WebGL中gl.texImage2D函数使用详解
  • 【优选算法】——双指针(下篇)!
  • AcWing 1024 装箱问题
  • 深度学习 size 属性
  • 特步引入IPD管理,钉钉项目 Teambition 助力高效产品研发管理
  • 第十二章 Spring之不得不了解的内容——AOP概念篇
  • ssh为什么是安全的?ssh怎么预防中间人攻击?
  • 【C语言】数据输出格式控制
  • 2.4 STM32启动过程
  • 操作系统(2) (进程调度/进程调度器类型/三种进程调度/调度算法)
  • Qt-系统线程安全(63)
  • 【系统架构设计师】案例专题二:系统开发基础考点梳理
  • Python 如何使用 Bert 进行中文情感分析
  • Linux网络命令:用于管理和显示网络路由表的工具route详解
  • KAN论文
  • PCL滤波器之面试总结
  • linux----cd和pwd命令
  • 基于yolov5的手机屏幕缺陷检测系统,支持图像、视频和摄像实时检测【pytorch框架、python源码】
  • 前端vue-获取验证码和重新获取验证码倒计时
  • 【数据结构】栈和队列 + 经典算法题
  • C语言 编程练习:解决五个有趣的问题