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

如何在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

相关文章:

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

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

Cortex-M 内核的 OS 特性

目录 一、通用堆栈知识二、双堆栈用法三、PendSV 中断介绍和用法四、SVC 软中断介绍和用法五、特权级和非特权级使用方法 一、通用堆栈知识 在前面讲解 STM32 启动文件的时候就已经提到过,有关堆栈大小的设置是在启动文件中设置的: Heap 主要用于 Mal…...

第十六章 RabbitMQ延迟消息之延迟插件优化

目录 一、引言 二、优化方案 三、核心代码实现 3.1. 生产者代码 3.2. 消息处理器 3.3. 自定义多延迟消息封装类 3.4. 订单实体类 3.5. 消费者代码 四、运行效果 一、引言 上一章节我们提到,直接使用延迟插件,创建一个延迟指定时间的消息&…...

[单master节点k8s部署]32.ceph分布式存储(三)

基于ceph rbd生成pv 在集群中认证ceph 用下面代码生成ceph的secret .创建 ceph 的 secret,在 k8s 的控制节点操作: 回到 ceph 管理节点创建 pool 池: [rootmaster1-admin ~]# ceph osd pool create k8stest 56 pool k8stest created [rootm…...

git 相关问题解决一一记录

文章目录 gitssh.github.com: Permission denied (publickey)1. 检查 SSH 密钥生成新的 SSH 密钥添加 SSH 密钥到 GitHub 2. 配置 SSH 代理启动 SSH 代理添加私钥到 SSH 代理 3. 检查 SSH 配置文件4. 测试 SSH 连接5. 检查防火墙和网络设置6. 检查 GitHub 账户设置详细步骤 更新…...

UE4 材质学习笔记04(着色器性能优化)

一.着色器性能优化 1.衡量着色器的性能 衡量着色器性能的主要方法有三个 第一个:可以使用场景的视图模式的优化视图模式的着色器复杂度 下面的滑条代表了着色器指令的复杂度 如果场景大部分是绿色的,说明着色器耗能低,反之白色则是很糟糕…...

3、Redis Stack扩展功能

文章目录 一、了解Redis产品二、申请RedisCloud实例三、Redis Stack体验1、RedisStack有哪些扩展?2、Redis JSON1、Redis JSON是什么2、Redis JSON有什么用3、Redis JSON的优势 3、Search And Query1、传统Scan搜索2、Search And Query搜索 4、Bloom Filter1、布隆过…...

Flythings学习(二)控件相关

文章目录 1 前言2 通用属性2.1 控件ID值2.2 控件位置2.3 背景色2.4 背景图2.5 显示与隐藏2.6 控件状态2.7 蜂鸣器控制 3 文本类TextView4 按键类 Button4.1 系统按键4.2 处理按钮长按事件4.3 处理按键触摸事件 5 复选框CheckBox6 单选组 RadioGroup7 进度条,滑块7.1…...

关于multiprocessing使用freeze_support()方法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、freeze_support()?二、使用方法总结 **注意下面** 如果有车载讨论需要的小伙伴,可以私信加我微信,拉你进群,…...

基于rk356x u-boot版本功能分析及编译相关(一)

🎏技术驱动源于热爱,祝各位学有所成。 文章目录 uboot的分支是next-dev历史版本v2017-09uboot支持DM框架uboot前级pre-loader支持及引导下级uboot分区支持uboot支持固件格式secure bootuboot编译脚本位置build.shuboot/make.shrkbin仓库uboot的分支是next-dev历史版本v2017-…...

Jenkins---01

什么是敏捷开发 敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开 发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、 可集成和可运行使用的特征。换言之&…...

第十五届蓝桥杯C++B组省赛

文章目录 1.握手问题解题思路1(组合数学)解题思路2(暴力枚举) 2.小球反弹做题思路 3.好数算法思路(暴力解法)---不会超时 4.R格式算法思路 5.宝石组合算法思路---唯一分解定理 6.数字接龙算法思路----DFS 7…...

线程 vs 虚拟线程:深入理解及区别

Java 提供了两种线程机制:普通线程(平台线程)和 虚拟线程。普通线程是 Java 中经典的并发处理方式,而虚拟线程是随着 Java 21 引入的新特性,旨在提升并发性能和开发体验。本文将详细探讨它们的区别,并帮助你…...

【WEB应用安全测试指南–蓝队安全测试2】--超详细-可直接进行实战!!!亲测-可进行安全及渗透测试

安全基础理论入门知识参考上一篇《WEB应用安全测试指南蓝队安全测试1》 WEB应用安全测试指南2 一、文件 I/O 类1.1、任意文件上传1.2、任意文件下载1.3、文件包含 二、接口安全类2.1、短信炸弹2.2、邮件炸弹2.3、短信内容可控2.4、邮件内容可控 三、逻辑流程类3.1、越权3.2、未…...

使用HTML、CSS和JavaScript创建滚动弹幕效果

使用HTML、CSS和JavaScript创建滚动弹幕效果 在现代网页设计中,滚动文本是一种常见的动态效果,可以吸引用户的注意力并增强交互体验。在这篇博客文章中,我们将详细介绍如何使用HTML、CSS和JavaScript实现滚动文本效果。 效果 步骤1&#xf…...

【C语言】--数组

😊个人主页: 起名字真南 😋个人专栏:【数据结构初阶】 【C语言】 【C】 目录 1 数组的概念2 一维数组的创建和初始化2.2 数组的初始化2.3 数组类型 3 一维数组的使用3.1 数组下标3.2 数组的输入 4 一维数组在内存中的存储5 sizeof计算数组中的元素6 二维…...

面向B2B市场的Spring Boot医疗病历系统开发

第1章绪论 计算机已经从科研院所,大中型企业,走进了平常百姓家,Internet遍及世界各地,在网上能够用计算机进行文字草拟、修改、打印清样、文件登陆、检索、综合统计、分类、数据库管理等,用科学的方法将无序的信息进行…...

闭着眼学机器学习——支持向量机分类

引言: 在正文开始之前,首先给大家介绍一个不错的人工智能学习教程:https://www.captainbed.cn/bbs。其中包含了机器学习、深度学习、强化学习等系列教程,感兴趣的读者可以自行查阅。 1. 算法介绍 支持向量机(Support Vector Mach…...

今日指数项目day8实战权限管理器(上)

3.权限管理器 3.1 权限列表展示功能 1)原型效果 2)接口说明 功能描述: 查询所有权限集合 服务路径: /api/permissions 服务方法:Get 请求参数:无响应数据格式: {"code": 1,"data":…...

《机器学习与数据挖掘综合实践》实训课程教学解决方案

一、引言 随着信息技术的飞速发展,人工智能已成为推动社会进步的重要力量。作为人工智能的核心技术之一,机器学习与数据挖掘在各行各业的应用日益广泛。本方案旨在通过系统的理论教学、丰富的实践案例和先进的实训平台,帮助学生掌握机器学习…...

GitHub宝藏项目:生成式AI公司全景导航图与实战应用指南

1. 项目概述:一份AI创业公司的全景导航图最近在GitHub上闲逛,发现了一个宝藏仓库,名字叫“awesome-generative-ai-companies”。这个项目,说白了,就是一个由社区驱动的、持续更新的生成式AI公司名录。它不像那些商业咨…...

紧急更新!MJ v6.1新增--style raw对表现主义的影响深度解析(附6种失效场景急救方案)

更多请点击: https://intelliparadigm.com 第一章:紧急更新!MJ v6.1新增--style raw对表现主义的影响深度解析(附6种失效场景急救方案) MidJourney v6.1 引入的 --style raw 参数并非简单降低美学修饰,而是…...

FPGA驱动ADS1256的ADC精度优化实战(三)

1. 硬件连接优化:从杜邦线到PCB布局的精度跃升 第一次用杜邦线连接FPGA和ADS1256时,我测得的电压误差居然有30mV,这让我差点怀疑人生。后来把万用表直接怼到ADC引脚上,才发现杜邦线本身就有5-8mV的压降波动。这种看似微不足道的干…...

基于CircuitPython的电机动态性能测试系统:从原理到实践

1. 项目概述与核心价值搞电机驱动,最怕的就是“凭感觉”。你手上有个直流有刷电机,数据手册上写着空载转速12000转,堵转扭矩50mNm,但实际装到你的机器人关节或者小车上,带上传动机构,性能到底怎么样&#x…...

内容创作平台集成多个AI模型提升内容多样性的实践

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 内容创作平台集成多个AI模型提升内容多样性的实践 对于内容创作平台而言,用户的偏好千差万别,内容的类型也…...

个人代码问题记录

内容全部来自网上搜集,防止再次遇到同样问题找不到地方参考了,遇到问题解决了就更新 MATLAB 1,求逆问题,奇异 使用函数xlsqminnorm(A,b)或伪逆xpinv(A)*b 矩阵求逆若出现“矩阵接近奇异值,或者缩放错误“怎么办 2…...

分析梳理--分子动力学模拟的常规步骤八(Gromacs)

作者,Evil Genius 每一个组学内容都很多啊,都需要花费大量的时间学习,学习的最好阶段就是学生阶段,你的导师就是你的伯乐,像我这种社会底层人员,纯纯没事干,学了有没有用真的不知道。 这一篇我们继续分子动力学,上一步我们处理配体分子得到符合Gromacs的出入文件 这里…...

监控与日志:Prometheus+Grafana实时追踪GPU、显存、推理延迟与错误率

系列导读 你现在看到的是《本地大模型私有化部署与优化:从入门到生产级实战》的第 8/10 篇,当前这篇会重点解决:让你的本地大模型服务像云服务一样可观测,提前发现并解决性能问题。 上一篇回顾:第 7 篇《量化部署终极指南:从GPTQ到AWQ,精度损失与显存节省的平衡艺术》…...

STM32 HAL库设计解析:从GPIO到外设的面向对象编程实践

1. 项目概述:从寄存器操作到HAL API的思维跃迁如果你是从标准外设库(SPL)或者更早的寄存器直接操作时代过来的STM32开发者,第一次接触HAL库时,可能会觉得有点“绕”。为什么一个简单的引脚翻转,不再是对GPI…...

观察不同模型在Taotoken平台上的实际Token消耗速率

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 观察不同模型在Taotoken平台上的实际Token消耗速率 对于依赖大模型API进行开发的团队和个人而言,成本控制是一个持续关…...