mysql默认安装是放在根目录下的/var/lib/mysql,有时候根目录空间太小,或者分区出问题,需要将mysql的data目录切换到其他的 分区里面。下面记录一下,更换data目录的步骤和坑点。
操作步骤:
操作系统: Ubuntu
原目录:/var/lib/mysql
新目录:/data/mysql
使用账号: root
1.先关闭mysql的服务
service mysqld stop
2.创建新的目录
mkdir /data/mysql
3.赋予权限
chmod 751 /data/mysql
注:这里至少other的群组要是可以执行的,就是有x的权限的,要不然没法进入到这个目录里面
4.更改所属权限 chown -R mysql:mysql /data/mysql
5.复制数据
cp -rfp /var/lib/mysql/* /data/mysql/
注:
1.这里p是将之前的权限也一并复制过来
2.可能会遇到一个问题,就是cp有些系统默认设置alias cp='cp -i',就是说这个是cp命令的交互模式。复制一堆文件会不停的出现要你输入y/n。即使使用了-f也不生效,所以这个时候出现了这个情况可以使用原生的
cp命令
/bin/cp -rfp /var/lib/mysql/* /data/mysql/
就不会出现是否复制的提示了。
6.备份配置文件
cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf.bak
注:一定记得备份,或者把没修改之前的配置项给注释掉,然后在写新的配置项。玩意出问题了,还能还原。
7.修改配置文件
vim /etc/mysql/mysql.conf.d/mysqld.cnf
修改data_dir为新的目录
data_dir=/data/mysql
在[mysqld]新增sock文件
socket=/data/mysql/mysql.socket
注:这里可能会遇到一个问题,所有操作都弄完后,启动的时候报 cannot through 'XXX.sock'类似的错误。 这时候需要在[mysqld_safe],[client]等目录下面也都加上socket=/data/mysql/mysql.socket就可以了。
8.重启服务 service mysqld start 注: 这里可能会出现无法启动的情况,如果是出现Failed to start mysql.service: Unit not found.
解决方式:
1.查询/etc/init.d/下是否存在mysql
ll /etc/init.d/ | grep mysql
发现该目录下并没有mysql的文件,若存在,请备份一下
2.查询mysql.server
find / -name mysql.server
mysql.server一般在你安装的mysql目录下,自己是编译安装,所以知道目录在哪里,不知道的这样看一下
3.执行复制操作,/usr/local/mysql/是我自己的mysql安装目录,大家根据查询出来的结果复制
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
然后 service mysql start 启动成功
还是一种是linux的权限问题
查看SELinux状态,然后修改为宽松模式:
/usr/sbin/sestatus -v
SELinux status: enabled
# 如果SELinux status参数为enabled即为开启状态
查看状态也可以使用另一个命令getenforce
关闭SELinux:
1.临时关闭(不用重启机器):
setenforce 0
(设置SELinux 成为permissive模式(宽松模式),setenforce 1 设置SELinux 成为enforcing模式)
2.修改配置文件需要重启机器:
修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled(这种方式需要重启服务器才能生效)