Linux上更改mysql数据库目录

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Linux上更改mysql数据库目录

Linux上更改mysql数据库目录,是一个辛酸历程,其实我想交代更多的内容,只是限于文章的实用性,我决定去繁就简。


今天早上,客户告诉我期货交易平台登陆不上去,这肯定是项目出了bug。


一、show processlist


show processlist;




发现部分sql等待表级锁(且这么叫吧,懒得找翻译软件了),我首先想到的是“某几张表是myisam引擎,容易发生表级锁,之前就有类似的问题发生,先kill掉sql进程,然后将表引擎由myisam改为innodb。”


当然了,我按照这个想法准备要执行表引擎的更换了,但出现了突发状况。


二、got error 28 from storage engine


如题所示,当我准备打开表查看数据的时候,出现了“got error 28 from storage engine”错误消息提示,我的翻译是“存储引擎出现了28错误”。


当然我百度了,找到这样一篇mysql的“Got error 28 from storage engine”错误,说实话,这篇文章没有给我什么鸟的帮助,但现在回想起来,确实是我自己大意了,虽然说清空“/tmp”目录的做法不值得推荐,但至少应该去清空一些磁盘,把数据库备份一下。


当然了,我想到去备份数据,使用了“mysqldump”命令尝试了一次数据备份,但是遗憾的是,报了一个错误,提示我无法保存。这是显而易见的,因为磁盘本身就不足了,没有清空磁盘,搞毛线的备份。但这是事后诸葛亮的想法,当时的我显然没有针对性的对数据进行备份!再次奉劝各位,数据库出问题时,即使有自动化的数据备份,但尽量在修正问题之前再做一次实时的备份!


三、df -h


没有备份成功,我就转向了另外一个方向,查看数据磁盘空间。


[root@iZ23gsv94suZ run]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       20G  19G   16M  100% /
tmpfs           1.9G     0  1.9G   0% /dev/shm
/dev/xvdb1       99G  255M   99G  1% /mnt


看到use等于“100%”,我已经确定问题出在哪里了,但是我在这里继续犯了一个错误。


“莫非是阿里云的磁盘没有挂载成功,就是/dev/xvdb1对应的这个100G磁盘没有挂载成功,否则怎么把20G的这个盘给沾满了呢?”


后知后觉的我现在恍然大悟,对于windows操作系统,C盘满了,怎么也不会把数据移动到D盘来,然而当时我怎么都在怀疑阿里云的磁盘没有挂载成功!这就是一个天大的错误!


四、阿里云磁盘挂载


由于上面这一步认为阿里云磁盘没有挂载成功,所以当时糊涂的我一心要重新挂载磁盘,于是我又在Linux 系统挂载数据盘这个泥潭里深陷不已,久久不能自拔,由于硬盘确实已经挂在成功,所以我再怎么费尽心思也只能得到“磁盘已挂载成功”的答案。但是,这里还是不得不说,一个人的精力实在有限,我几乎已经是一个全栈工程师,自己对自己在意的标签是“打杂工,偏java”,这就让我不得不感慨万千。


由于是个创业团队,我又是一个负责人,所以我要做的工作有:


java编程

web编程

Linux编程(shell脚本、项目部署)

C#客户端协调(调查bug、业务探讨、相关代码审核)

安卓编程(目前处于学习阶段)

项目管理(麻雀虽小肝胆俱全,我必须要让每个人开心快乐的工作,效率最大化)

财务、行政(发发工资、请大家聚餐活动、游玩、工作环境布置、浇花、打扫卫生)

需求分析(客户沟通、需求调查、业务建模)

个人能力提升(编程能力、为人处事能力)

等等等等,只要能想得到的,没有不做的,实在是无法集中重心专业负责哪一块,就导致哪一块都不精通,这也是导致本次问题出现一个关键因素。


所以,如果朋友们有好的解决方案,请不吝赐教,我希望通过互联网认识更多朋友,在未来的创业道路上一路前行,互惠互利。


五、mysql数据库目录更改


既然阿里云的磁盘已经挂在,那么接下来的工作就是把mysql的默认数据目录迁移到100G的盘上,而不是系统盘!


这个过程现在说起来很简单,但是在执行的过程中,却是千辛万苦!


linux 更改mysql的数据库目录,这篇文章提供了相应的办法,按理说,按照里面提到的方法执行下去就OK,但这里,我不得不强调,项目千差万别,每个人解决问题的办法也不尽相同,所以,动数据库之前,千万要先备份!


显然,我按照这篇文章所说,是没有把目录迁移成功,所以你也需要这样,请千万注意!


①、mv


Linux的mv命令很强大,但风险系数也很高!

强烈建议使用cp命令,而非mv命令,除非你一万个确定方案可行。


②、chown -R mysql:mysql /home/data/mysql/


chown -R mysql:mysql /home/data/mysql/  # 改变数据库的归属为mysql


这个语句慎用,反正坑哭了我!


③、 /mnt


前面曾提到

/dev/xvdb1 99G 255M 99G 1% /mnt

不知道,你是否注意,对于我一个Linux的雏鸟来说,显然没有意识到这个100G的磁盘,其路径是“/mnt”,也就是说,mysql的数据目录需要重置到该“/mnt”目录下。


④、目录迁移


1、cp -afpr /var/lib/mysql/ /mnt/


使用cp命令,将mysql的数据默认目录,移动到新的挂载盘/mnt下面


[root@iZ23gsv94suZ mysql]# pwd
/mnt/mysql
[root@iZ23gsv94suZ mysql]# ls
auto.cnf  ib_logfile0  ibtmp1            iZ23gsv94suZ.pid  mysql-bin.000001  mysql.sock          RPM_UPGRADE_HISTORY      
ibdata1   ib_logfile1  iZ23gsv94suZ.err  mysql             mysql-bin.index   performance_schema  RPM_UPGRADE_MARKER-LAST


2、vim /etc/my.cnf


 

[mysql]
    default-character-set=utf8
    socket          = /mnt/mysql/mysql.sock
    #
    [mysqld]
    # The TCP/IP Port the MySQL Server will listen on
    port=3306
    socket          = /mnt/mysql/mysql.sock


把mysql配置文件的socket目录更改到/mnt下对应的路径


3、vim /etc/init.d/mysql


then
   # datadir=/var/lib/mysql
datadir=/mnt/mysql


将该文件中的datadir修改为对应的/mnt目录


4、ln -s /mnt/mysql/mysql.sock /var/lib/mysql/mysql.sock


使用ln命令,指定一条链接给mysql.sock,具体的作用,我不知,你可百度。


按照以上四步,就可以转移mysql的数据库目录了,但是,我的过程远比这个艰辛。


搞来搞去,我的mysql是搞崩溃了,没有办法,需要重新安装。这里,你可以参照centOS下安装mysql5.7、升级mysql到5.7。然后,数据恢复你可以使用source命令,如果涉及到二进制日志恢复,你可以参照mysql之备份和导入数据(包括二进制日志)


但最重要的是,操作数据库之前,想尽一切办法先备份数据库!


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
11天前
|
自然语言处理 数据库 iOS开发
DBeaver Ultimate Edtion 25.0 Multilingual (macOS, Linux, Windows) - 通用数据库工具
DBeaver Ultimate Edtion 25.0 Multilingual (macOS, Linux, Windows) - 通用数据库工具
65 12
DBeaver Ultimate Edtion 25.0 Multilingual (macOS, Linux, Windows) - 通用数据库工具
|
15天前
|
Linux
Linux目录删除指南:彻底解决“Is a directory”错误
在 Linux 系统中遇到 `cannot remove 'xxx': Is a directory` 错误,是因为删除目录时未使用正确参数。解决方法包括:1) 使用 `rmdir` 删除空目录或 `rm -r` 删除非空目录;2) 检查并调整目录权限(如通过 `sudo` 提权);3) 处理特殊场景,例如文件属性异常、特殊字符或进程占用;4) 替代方法如 `find -delete` 或文件系统修复。操作前建议备份数据,并启用防误删功能(如 `alias rm='rm -i'`)。掌握 `rm` 和 `rmdir` 的区别是关键。
60 1
|
1月前
|
存储 Linux
linux中的目录操作函数
本文详细介绍了Linux系统编程中常用的目录操作函数,包括创建目录、删除目录、读取目录内容、遍历目录树以及获取和修改目录属性。这些函数是进行文件系统操作的基础,通过示例代码展示了其具体用法。希望本文能帮助您更好地理解和应用这些目录操作函数,提高系统编程的效率和能力。
166 26
|
1天前
|
监控 Linux
Linux基础:文件和目录类命令分析。
总的来说,这些基础命令,像是Linux中藏匿的小矮人,每一次我们使用他们,他们就把我们的指令准确的传递给Linux,让我们的指令变为现实。所以,现在就开始你的Linux之旅,挥动你的命令之剑,探索这个充满神秘而又奇妙的世界吧!
35 19
|
1月前
|
Linux
Linux文件与目录的日常
目录的切换 一般使用(”pwd“)显示当前所在的目录 比如:当前目录是在home下面的,与用户名相同的文件夹,可以使用(”cd“)命令来切换目录; 进入下载目录(”cd home/a/下载“)这种从给目录开头的一长串路经”叫做绝对路径“; 进入图片目录(”cd .. /图片/“)".."代表当前路径的上级路径,相对于当前的目录而言的”叫做相对路径“,(”.“)代表当前路径; 如果,想快速切换,上一个所在目录可以(”cd - / cd..“); 如果,想快速切换,追原始的目录可以(”cd --“); 查看目录及文件
44 14
|
3月前
|
关系型数据库 MySQL Linux
Linux下mysql数据库的导入与导出以及查看端口
本文详细介绍了在Linux下如何导入和导出MySQL数据库,以及查看MySQL运行端口的方法。通过这些操作,用户可以轻松进行数据库的备份与恢复,以及确认MySQL服务的运行状态和端口。掌握这些技能,对于日常数据库管理和维护非常重要。
177 8
|
3月前
|
Linux
linux查看目录下的文件夹命令,find查找某个目录,但是不包括这个目录本身?
通过本文的介绍,您应该对如何在 Linux 系统中查看目录下的文件夹以及使用 `find` 命令查找特定目录内容并排除该目录本身有了清晰的理解。掌握这些命令和技巧,可以大大提高日常文件管理和查找操作的效率。 在实际应用中,灵活使用这些命令和参数,可以帮助您快速定位和管理文件和目录,满足各种复杂的文件系统操作需求。
250 8
|
3月前
|
NoSQL 关系型数据库 MySQL
Linux安装jdk、mysql、redis
Linux安装jdk、mysql、redis
272 7
|
3月前
|
关系型数据库 MySQL Linux
MySQL数据库下载安装教程(Windows&Linux)
本文档详细介绍了MySQL的安装步骤,包括安装前的准备工作、下载安装包、Windows和Linux系统下的具体安装流程,以及如何配置MySQL服务、设置环境变量、启动服务和连接数据库等关键操作。
|
4月前
|
数据库连接 Linux Shell
Linux下ODBC与 南大通用GBase 8s数据库的无缝连接配置指南
本文详细介绍在Linux系统下配置GBase 8s数据库ODBC的过程,涵盖环境变量设置、ODBC配置文件编辑及连接测试等步骤。首先配置数据库环境变量如GBASEDBTDIR、PATH等,接着修改odbcinst.ini和odbc.ini文件,指定驱动路径、数据库名称等信息,最后通过catalog.c工具或isql命令验证ODBC连接是否成功。