mysql数据库datadir路径更改记录

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

# 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赶紧关灯睡觉,以迎接新的挑战。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值