1.问题描述
收到值班室电话,某服务器空间占用超过80%,通过du -sh命令查看定位mysql库里ibdata1文件持续增长所致
2.问题分析
3.问题原因及解决方案
由于MySQL配置方式为数据不独立存储(共享表空间),导致空白空间无法重复使用,占用空间逐渐增加。这个是Mysql的innodb引擎一直以来的问题,即这个ibdata1文件从不会缩小,即使数据删除后的碎片空间也不会被利用,会导致文件的大小大会远大于实际数据的大小。具体参见mysql这个bug描述
解决方案:
重装mysql数据库,整个过程需要暂停服务,主要步骤:
3.1 备份mysql数据库sdnxs
[root@jk-3 mysql]# mysqldump -uroot -p sdnxs > sdnxs.sql
Enter password:
备份/etc/my.cnf
3.2 停止mysql数据库
service mysqld stop
3.3 配置yum源
[root@jk-3 media]# cd /etc/yum.repos.d/
[root@jk-3 yum.repos.d]# vi my.repo
[base]
name=base
baseurl=file:///media/john
enabled=1
gpgcheck=0
挂载iso文件
[root@jk-3 media]# mount -o loop -t iso9660 /media/linux6.8x64.iso /media/john/
3.4 卸载mysql安装包
操作之前需要对my.cnf文件做备份
yum remove mysql*
rm –rf /var/lib/mysql/
rm –rf /etc/my.cnf
3.5 重新安装mysql
[root@jk-3 john]# yum -y install mysql*
设置密码
[root@jk-3 john]# /usr/bin/mysqladmin -u root password 'root'
3.6 将配置文件修改为单表数据分开存储
vim /etc/my.cnf
加入配置
innodb_file_per_table=1
#自动启动
chkconfig mysqld on
3.7登录mysql创建数据库
启动数据库
service mysqld start
登录
[root@jk-3 john]# mysql -uroot -p
Enter password:
show variables like '%innodb_file%';
导入备份sql
create database sdnxs character set utf8;
use sdnxs;
source /tmp/sdnxs.sql;