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

news2024/11/26 3:38:55

文章目录

    • 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.coloradmin.cn/o/2208490.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cpp::STL—list类的模拟实现(上)(13)

文章目录 前言一、结点类的实现二、迭代器类的实现迭代器类的存在意义迭代器类的模板参数构造函数运算符的重载--运算符的重载、!运算符的重载*运算符的重载->运算符的重载 总结 前言 注意本篇难度偏高,其主要体现在迭代器类的实现!   什么&#xf…

【论文#码率控制】ADAPTIVE RATE CONTROL FOR H.264

目录 摘要1.前言2.基本知识2.1 蛋鸡悖论2.2 基本单元的定义2.3 线性MAD预测模型 3.GOP级码率控制3.1 总比特数3.2 初始化量化参数 4.帧级码率控制4.1 非存储图像的量化参数4.2 存储图像的目标比特 5.基本单元级码率控制6.实验结果7.结论 《ADAPTIVE RATE CONTROL FOR H.264》 A…

望繁信科技创始人索强出席2022福布斯中国·青年海归菁英100人评选颁奖典礼

2022年12月20日,由福布斯中国和福科无限共同举办的“2022福布斯中国青年海归菁英100人评选”颁奖典礼在上海圆满落幕。 来自福布斯中国的高层、知名企业家、投资人齐聚一堂,围绕全球化趋势、海归创业机遇等话题,共同把脉数字时代发展风向&am…

vim实用笔记

函数跳转功能 想要使用函数跳转功能需要先安装 ctags sudo apt-get install exuberant-ctags接着,在源文件目录树执行如下命令: ctags -R . 即可在该目录下生成一个tags文件, 这个文件就是所有函数和变量的索引 接着打开用vim打开任一文件…

使用node+prisma+socket+vue3实现一个群聊功能,拓展功能:使用lottie实现入场动画

使用nodeprisma和vue3实现一个群聊功能 后端代码编写 node环境初始化 新建一个空文件夹node,初始化node环境 npm init -y修改 packages.json,添加 type 为 module,删除 main {"name": "node","version": …

iLogtail 开源两周年:UC 工程师分享日志查询服务建设实践案例

作者:UC 浏览器后端工程师,梁若羽 传统 ELK 方案 众所周知,ELK 中的 E 指的是 ElasticSearch,L 指的是 Logstash,K 指的是 Kibana。Logstash 是功能强大的数据处理管道,提供了复杂的数据转换、过滤和丰富…

如何写好SCI论文的Abstract

摘要是一篇论文的缩影,是对全文内容的高度浓缩和提炼,也是整篇论文的精髓和灵魂。读者通常先通过摘要快速获得文章信息,然后决定是否要进一步仔细阅读全文,因此,写好摘要至关重要! 那么如何才能写好论文摘要呢&#xf…

线性代数在大一计算机课程中的重要性

线性代数在大一计算机课程中的重要性 线性代数是一门研究向量空间、矩阵运算和线性变换的数学学科,在计算机科学中有着广泛的应用。大一的计算机课程中,线性代数的学习为学生们掌握许多计算机领域的关键概念打下了坚实的基础。本文将介绍线性代数的基本…

睡眠小乖 2.2.19 | 免费改善睡眠神器

睡眠小乖是一款完全免费的睡眠监测软件、冥想软件、改善睡眠软件。支持的功能包括:睡眠监测、梦话鼾声记录、睡眠报告、多种白噪音、冥想板块。白噪音板块提供了近80种白噪音,支持任意选择4种白噪音组合成一个混音,支持单独调节每种白噪音的音…

高标准农田建设专项整治行动拉开序幕,建设监管如何破局?

近日,高标准农田建设工程质量“回头看”和专项整治行动拉开序幕,将全面梳理2020年以来立项实施的高标准农田建设项目,围绕前期工作、施工建设、管护利用等环节,聚焦方案设计是否规范、监管责任是否落实、建后利用是否到位、建后管…

安全认证:oath2

一、一些概念: 1、认证:主要解决的是你是谁的问题。 三个层面认证:信道认证(SSL等),协议认证(例如用http协议的时候的格式),内容认证(比如浏览网页的时候&a…

ASO优化截图如何影响 App Store 和 Google Play 的安装数量

无论您的应用程序多么吸引人和有用,用户在下载它之前都不知道它。但是,您如何让潜在用户在众多竞争对手应用程序中选择您的应用呢?关键是让您的应用程序引人注目。在本文中,我将向您介绍应用程序的视觉组件以及如何增强它以从其他…

自主性革命:人工智能赋予人形机器人大脑

大家好,我是Shelly,一个专注于输出AI工具和科技前沿内容的AI应用教练,体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具,拥抱AI时代的到来。 人工智能(AI)是人形…

蛋鸡养殖场饲料粉碎加工机器设备

蛋鸡养殖场饲料粉碎加工机器设备种类繁多,包括粉碎机、混合机、制粒机等多种设备,用于将饲料原料进行粉碎、混合、制粒等处理,以生产出营养均衡、易于消化吸收的蛋鸡饲料‌。具体来说:‌粉碎机‌:用于将谷物、豆类等饲…

安卓手机termux安装ubuntu24桌面环境

要在 proot-distro 中的 Ubuntu 上安装桌面环境并实现 远程连接,可以按照以下步骤进行。这将包括安装轻量级桌面环境(如 LXDE 或 XFCE)、VNC 服务器,并配置远程访问。 步骤 1:安装 Ubuntu 安装并登录 Ubuntu&#xff1…

数据结构 ——— 单链表oj题:环状链表(判断链表是否带环)

目录 题目要求 手搓简易环状单链表 代码实现 问题1:slow 指针和 fast 指针一定会相遇吗 问题2:slow 每次走一步,fast 每次走 n 步是否还能判断链表带环?(n > 2) 题目要求 有一个单链表的头节点 …

适合新手的快速搭建全景VR服务器教程

近期有一些朋友在使用BZ全景可视化编辑器的过程中, 不了解如何把全景编辑器生成的静态全景VR HTML项目部署到自己的服务器上, 本篇文章将详细介绍如何使用宝塔面板来搭建一个全景VR服务器 我们将从安装宝塔面板开始,配置静态网页服务器,上传全景静态HTM…

英伟达股价分析:英伟达股价能否上涨到150美元,接下来该如何操作?

来源:猛兽财经 作者:猛兽财经​ 猛兽财经核心观点: (1)华尔街投行Oppenheimer已将英伟达的目标价上调到了150美元。 (2)产品方面的最新进展和合作伙伴关系进一步提升了英伟达的市场地位。 &…

Java生成Excel_低内存占用_更快

EasyExcel:高效Java Excel工具,解决大文件读写难题 EasyExcel是一个基于Java的、快速简洁且能有效解决大文件内存溢出问题的Excel处理工具。它使得用户可以在无需过多关注性能和内存消耗的情况下,轻松实现Excel文件的读写功能。相较于传统的…

微信小程序后台搭建—node+mysql

想必大家都有一个困扰,想要用微信小程序作为前端,但是后端不知道如何用node连接微信小程序,我最近也一直困扰许久,所以我就想用node写后端接口在连接微信小程序,记录一下学习笔记 前言 前端:微信小程序 后端:nodeexpr…