安装centos7的时候,如果选择自动分区,分区/dev/mapper/centos-root mounted on 根目录/ 的容量比较小,
而分区/dev/mapper/centos-home mounted on /home 的容量比较大,基于上述情况,如果用yum 安装mysql8 默认数据目录是放在\var\lib\mysql 下 即在centos-root的分区下,因为该分区空间比较小,建议更换到/home 目录下,下面介绍在不关闭Selinux前提下,更换数据存放目录:

  1. vi /etc/my.cnf
    ``` [mysqld]

    调整单表最大记录数

    max_heap_table_size=256M
    tmp_table_size=256M

    加快数据插入速度

    disable_log_bin

    datadir=/var/lib/mysql

    datadir=/home/data/mysql

    socket=/var/lib/myql/mysql.sock

    socket=/home/data/mysql/mysql.sock

    替换默认配置,去掉NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,不然从文件插入数据不能允许空值

    sql_mode=’ONLY_FULL_GROUP_BY,NO_ENGINE_SUBSTITUTION’ log-error=/var/log/mysqld.log

[client]

加上客户端socket配置与服务端一致,不然连不上服务器

socket=/home/data/mysql/mysql.sock

  1. 2. 给新目录权限,如果用mv命令把目录迁移到/home/data目录下,原有目录linux权限会保留,如果新建目录cp过来需要重新授权 `chown -R mysql:mysql /home/data/mysql` 这个时候启动mysql服务会失败 ,查看日志会发现没有权限,

[ERROR] [MY-012592] [InnoDB] Operating system error number 13 in a file operation. [ERROR] [MY-012595] [InnoDB] The error means mysqld does not have the access rights to the directory. `` 这是因为SeLinux中对该目录的安全上下文(标签)发生了变化<br />ll -Z home/data/查看发现/home/data/mysql的安全上下文为<br />drwxr-xr-x. mysql mysql system_u:object_r:user_home_t:s0 mysql<br />而原目录/var/lib/mysql的安全上下文为<br />drwxr-xr-x. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql<br />这个时候用命令chcon -R -t mysqld_db_t /home/data/mysql更改 然后启动mysql还是失败,同样的错误提示<br />原来启动mysql的时候又恢复了/home/data/mysql 预设的安全上下文即<br />drwxr-xr-x. mysql mysql system_u:object_r:user_home_t:s0 mysql`

  1. 修改/home/data/mysql 默认的安全上下文,

semanage fcontext -a -t mysqld_db_t home/data/mysql centos7最小安装下没有安装这个工具
yum -y install policycoreutils-python
这时候只是修改预设值,当前值没有改变
restorecon home/data/mysql 还原当前值为预设值
启动mysql成功

参考链接 : CentOS下SELinux安全设置