最近发现放在机房本地服务器上的项目不正常运行
mysql也连接不上,启动报错。
查了一下报错原因有人说是数据库将服务器硬盘占满了,感觉很扯淡。
我就瞟了一眼就看别的去了
在昏天黑地怼了一下午还没弄好之后
df -h了一下
亮瞎了我的狗眼。。。。使用率100%。。。
既然找到了原因就开始搞吧。
解决方案:
1、删除分区里一个不需要用的数据,如:日志文件等(解决不了根本问题)
2、对某个磁盘扩容
3、修改数据存储位置
在尝试了第一种办法之后发现问题并没有大的改善,第二种又不怎么会,所以选择第三种
1.既然是数据库原因从数据库开始搞。
查一下数据库版本
[root@darg09 ~]# mysql --version
mysql Ver 14.14 Distrib 5.6.29, for Linux (x86_64) using EditLine wrapper
2.查看数据库数据位置
3.数据位置迁移
停止MySQL服务
根据图1中显示,我的home目录下还有足够的空间去使用
在home目录下新建mysqlData目录
[root@darg09 ~]# cp -afir /var/lib/mysql /home/mysqlData
[root@darg09 ~]# service mysql stop
Shutting down MySQL.... [确定]
[root@darg09 ~]# mkdir /home/mysql
原来的数据库数据所在目录为mysql默认安装目录/var/lib/mysql
[root@darg09 ~]# cp -afir /var/lib/mysql /home/mysqlData
执行复制命令
解释一下cp后的参数
cp(选项)(参数)
-a:此参数的效果和同时指定"-dpR"参数相同;
-d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;
-f:强行复制文件或目录,不论目标文件或目录是否已存在;
-i:覆盖既有文件之前先询问用户;
-l:对源文件建立硬连接,而非复制文件;
-p:保留源文件或目录的属性;
-R/r:递归处理,将指定目录下的所有文件与子目录一并处理;
-s:对源文件建立符号连接,而非复制文件;
-u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件;
-S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀;
-b:覆盖已存在的文件目标前将目标文件备份;
-v:详细显示命令执行的操作。
耐心等待数据复制完成,毕竟45个G。。。
复制完成。
4.修改mysql配置文件
[root@darg09 ~]# vi /etc/my.cnf
将以下内容放入其中
#记得注释原有配置项
[client]
port = 3306
#修改后的目录
socket = /home/mysqlData/mysql/mysql.sock
[mysqld]
port = 3306
default-storage-engine = InnoDB
#默认存储引擎
lower_case_table_names = 1
#不区分大小写
max-connections=3000
character_set_server=utf8
#修改后的目录
datadir=/home/mysqlData/mysql
#修改后的目录
sock=/home/mysqlData/mysql/mysql.sock
5.修改MySQL的启动脚本
[root@darg09 ~]# vi /etc/init.d/mysql
将/etc/init.d/mysql文件中的datadir项改成/home/mysqlData/mysql
6.迁移完成,启动mysql服务