最近维护的服务器数据库磁盘告警,添加了新磁盘之后,需要将老数据移到新磁盘上。
我服务器相关环境
Mysql存储位置:由于采用yum安装的mysql,存储位置如下datadir=/var/lib/mysqlpid-file=/var/run/mysqld/mysqld.pidsocket=/var/lib/mysql/mysql.socklog-error=/var/log/mysqld.log打算移动datadir到如下:datadir=/data/mysql
确认SELinux的相关情况
~]#ls-lZ/var/lib/mysqldrwx------.mysqlmysqlunconfined_u:object_r:mysqld_db_t:s0mysql
停止mysql服务
~]#servicemysqldstopStoppingMySQL:[OK]
建立新数据文件夹在新磁盘上
~]#mkdir-p/data/mysql
拷贝数据到新文件夹中
~]#cp-R/var/lib/mysql/*/data/mysql/
修改新目录的所用用户及权限
~]#chown-Rmysql:mysql/data/mysql
查看新目录的SELinuxlabel
~]#ls-lZ/data/mysqldrwxr-xr-x.mysqlmysqlunconfined_u:object_r:usr_t:s0mysql
修改my.cnf,注意我得my.cnf在/etc/my.cnf下,有时候会安装到/etc/mysql/my.cnf
[mysqld]datadir=/data/mysql
尝试运行servicemysqlstart,通过审计查看是否有错误
~]#servicemysqlstartMySQLDaemonfailedtostartStartingMysql[失败]
确认log问题
/var/log/audit/audit.log/var/log/messages
如果遇到类似SELinux问题,请继续,如果遇到其他问题,请安装错误提示解决
安装semanage
~]#yum-yinstallpolicycoreutils-python
添加规则mapping
~]#semanagefcontext-a-tmysqld_db_t/data/mysql(/.*)?
查看规则mapping添加情况
~]#grep-imysql/etc/selinux/targeted/contexts/files/file_contexts.local/mysql(/.*)?system_u:object_r:mysqld_db_t:s0
使用restorecon应用规则
~]#restorecon-R-vF/mysql
再次启动Mysql
~]#servicemysqldstartStartingMySQL:[OK]
查看新目录SELinuxlabel情况
~]$ls-lZ/data/mysqldrwxr-xr-x.mysqlmysqlsystem_u:object_r:mysqld_db_t:s0mysql
Tips:
确认新目录的权限为以上,实在不行过程中如果启动成功了mysql,千万不要killmysql进程,要正常关闭,不然InnorDB会有风险数据库密码忘记的可以使用skip-grant-tables在[mysqld]中(my.cnf文件)redhat