mysql数据库datadir路径更改记录

本文介绍了当MySQL服务器因磁盘空间不足导致无法写入数据时的解决方案。通过更改datadir路径到更大的磁盘分区,并调整apparmor配置来解决启动问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天服务器突然出现故障,所有数表不能写入,经查看:

# df -h

显示:/dev/xvda1 磁盘空间占用100%

想着系统盘怎么会有这么大的写入量(其实是公司申请的云服务器系统盘太小,只有20G,嫌麻烦,没有升级!)

# cd /var

# du -sh*

最终确定/var/lib/mysql/ibdata1文件占磁盘高达11G

度娘了一下mysql ibdata1存放数据,索引等,是MYSQL的最主要的数据。如果不把数据分开存放的话,这个文件的大小很容易就上了G,甚至几十G。MySql innodb如果是共享表空间,ibdata1文件越来越大,达到了30多个G

对于系统盘只有20G,公司不给升级的运维D来说,情何以堪。幸亏挂载盘/mnt够大。

两个思路:1、ibdata1瘦身  2、更换datadir路径

第一个方法网上很多,大家度娘、搜狗一下。

此处,我采用的是第二种:

首先:在/mnt/lib目录创建mysql文件夹

# mkdir /mnt/lib/mysql

 编辑mysql配置文件:ubuntu系统一般在/etc/mysql/my.cnf

# vim /etc/mysql/my.cnf

我将datadir改成/mnt/lib/mysql下,则在my.cnf中做如下更改,在[mysqld]段

port            = 3306
basedir         = /usr
datadir         = /mnt/lib/mysql

更改完成保存退出,可以重启mysql服务,结果mysql启动不起来,但是将datadir换回来就能启动,于是各种度娘度狗度Google,终于发现问题的原因是在ubuntu中存在一个apparmor的服务,这个服务主要作用是主要的作用是设置某个可执行程序的访问控制权限,可以限制程序 读/写某个目录/文件,打开/读/写网络端口等等。他的配置文件在/etc/apparmor.d/中,在这里我们可以看到一个usr.sbin.mysqld的配置文件,所以我们要改datadir路径,这里也需要做更改。

我做了如下更改:

  /logs/mysql/mysql.log rw,
  /logs/mysql/mysql.err.log rw,
  /mnt/lib/mysql/ r,
  /mnt/lib/mysql/** rwk,

  /logs/mysql/ r,
  /logs/mysql/* rw,

红色区域是更改的地方。更改完成以后,因为这是一个服务,所以我们需要重启一下这个服务:

# /etc/init.d/apparmor restart


给/mnt/lib/mysql赋权限
chown -R mysql:mysql mysql

因为mysql虽然启动失败,但是/mnt/lib/mysql目录仍然生成有:ibdata1 ib_logfile*文件,删除/mnt/lib/mysql目录下的几个文件
# rm -rf ibdata1 ib_logfile*

此时心情那叫一个愉悦,重启myslq准备关灯睡觉,然并卵。发火发火

重启mysql
/etc/init.d/mysql start

mysql仍然无法启动。

查看错误日志vim /var/log/mysql/error.log

161027 23:43:36 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
161027 23:43:36 InnoDB: The InnoDB memory heap is disabled
161027 23:43:36 InnoDB: Mutexes and rw_locks use GCC atomic builtins
161027 23:43:36 InnoDB: Compressed tables use zlib 1.2.3.4
161027 23:43:36 InnoDB: Initializing buffer pool, size = 128.0M
161027 23:43:36 InnoDB: Completed initialization of buffer pool
161027 23:43:36 InnoDB: highest supported file format is Barracuda.
InnoDB: Log scan progressed past the checkpoint lsn 49439
161027 23:43:36  InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite

又奋战半小时,各种更改,各种尝试。最终被一条指令莫名其妙的一锤定音。

神之指令:

# mysql_install_db --user=mysql --ldata=/mnt/lib/mysql/ 其中/mnt/lib/mysql/是自己需要更好的路径。

再启动mysql
/etc/init.d/mysql start

一切搞定,此时已经凌晨1:00,运维D赶紧关灯睡觉,以迎接新的挑战。


<think>好的,用户想查找MySQL数据库的存储路径,涉及配置文件、data目录这些。我需要根据提供的引用内容来整理答案。首先,用户的问题是关于MySQL存储路径的定位和修改方法,可能需要详细步骤。 根据引用[1],在Linux系统中,默认的存储路径是/var/lib/mysql,修改的话需要移动数据、修改配置文件my.cnf,还有可能涉及权限设置。引用[2]提到Windows下MySQL 8.0默认在C:\ProgramData\MySQL\MySQL Server 8.0\Data,而引用[3]和[4]详细描述了Windows下通过修改my.ini文件中的datadir参数来更改存储位置,比如找到my.ini中的datadir行,修改路径,然后重启服务。需要注意路径的斜杠方向,以及可能的隐藏文件夹问题。 用户可能需要区分不同操作系统的情况,所以回答里要分开说明Linux和Windows的情况。步骤方面,可能需要列出查找当前路径的方法,比如通过SQL命令SHOW VARIABLES LIKE 'datadir';,或者直接查看配置文件的位置。修改路径的步骤包括停止服务、修改配置文件、移动数据文件、重启服务等,这些都需要详细说明,避免用户操作出错。 另外,需要注意路径权限问题,尤其是Linux下,修改路径后可能需要更改文件夹的所有权给mysql用户,否则服务可能无法启动。在Windows下,如果用户更改到C:\mysqldata这样的目录,需要确保目录存在,并且MySQL服务有权限访问。 可能还需要提醒用户在修改前备份数据,防止意外丢失。同时,引用中提到的my.ini或my.cnf的位置,比如在Linux可能是/etc/mysql/my.cnf,而Windows则在安装目录下,比如C:\Program Files\MySQL\MySQL Server 8.0\my.ini,或者C:\ProgramData下的my.ini,用户需要根据实际安装情况查找。 最后,生成的相关问题可能需要包括如何验证路径是否修改成功,如何处理修改后的权限问题,或者如何迁移现有数据到新路径等,这些都能帮助用户进一步操作。</think>### MySQL数据库存储路径查找与配置方法 根据你的需求,以下是关于MySQL数据库存储路径的详细说明: #### 一、MySQL默认存储路径 1. **Linux系统** - 默认数据存储路径为:`/var/lib/mysql`[^1] - 配置文件路径:`/etc/mysql/my.cnf` 或 `/etc/my.cnf` 2. **Windows系统** - MySQL 8.0默认路径:`C:\ProgramData\MySQL\MySQL Server 8.0\Data`(注意ProgramData是隐藏文件夹)[^2] - 其他版本可能位于:`C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.1\Data\`[^3] #### 二、通过SQL命令查询当前路径 ```sql SHOW VARIABLES LIKE 'datadir'; ``` 执行该命令会返回类似结果: $$ \text{datadir} = /var/lib/mysql/ \quad \text{或} \quad C:\ProgramData\MySQL\MySQL\ Server\ 8.0\Data\ $$ [^1] #### 三、修改存储路径步骤(以Windows为例) 1. **停止MySQL服务** ```bash net stop mysql ``` 2. **编辑配置文件** - 打开安装目录下的`my.ini`(如:`C:\Program Files\MySQL\MySQL Server 8.0\my.ini`) - 找到`datadir`参数并修改路径: ```ini datadir="C:/new_path/data/" ``` - 注意使用`/`代替`\`(如`C:/mysql/data/`) 3. **迁移数据文件** - 将原`Data`目录内容复制到新路径(如`C:\new_path\data`) 4. **重启MySQL服务** ```bash net start mysql ``` #### 四、Linux系统修改路径 1. 修改`/etc/mysql/my.cnf`中的`datadir`: ```ini datadir = /home/data/mysql ``` 2. 使用`rsync`迁移数据并设置权限: ```bash sudo rsync -av /var/lib/mysql /home/data sudo chown -R mysql:mysql /home/data/mysql ``` 3. 重启服务: ```bash systemctl restart mysql ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值