IBM Cloud Docs
在 UNIX 或类似环境中更改 MySQL 数据目录

在 UNIX 或类似环境中更改 MySQL 数据目录

要更改 MySQL 数据目录,请执行以下步骤:

  1. 使用 PuTTY 或你喜欢的客户端登录服务器。

    如果数据目录使用专用分区,请确保在复制数据后将新分区挂载到原数据目录上。 挂载新分区可保存非标准配置更改,某些应用程序可能无法使用这些更改。

  2. 关闭 mysqld (MySQL 守护程序)。 启动和停止守护程序的进程在不同的操作系统和分发之间可能有所不同。必须在直接影响原始文件的任何进程期间停止 MySQL。

    /etc/init.d/mysql stop

    OR

    /etc/init.d/mysqld, /etc/init.d/mysql-server, /usr/loca/etc/init.d/mysql, /opt/lamp…

  3. 在进行任何更改之前,请先备份数据库。 确保在直接复制原始数据库文件时,MySQL 守护进程没有运行。

如果在服务器上使用 cPanel,请在守护进程重新启动前停止 cPanel (TailWatch 和 chkservd)。 您可以创建一个临时文件 /etc/chkserv.d/mysqlisevil 来阻止 chkservd 重新启动服务。 如果您不熟悉 rsync,那么可以使用任何其他工具来创建备份。

rsync -vaP /var/lib/mysql/ /var/lib/mysql.'date +%s'

  1. 创建数据目录并向 MySQL 用户(或者在“my.cnf”全局选项文件中指定的任何用户)提供所有权。 在本例中,使用了位置 /var/lib/mysql-data,但您可以使用所需的任何位置。 如果您专门为此目的添加磁盘或逻辑设备,则还需要在 /etc/fstab 中添加条目,并在继续之前加载目录。

    chown mysql:mysql /var/lib/mysql-data

  2. 最后将原始目录复制到新的 MySQL 数据目录(确保保留第一个目录末尾的 / 标记):

    rsync -vaP /var/lib/mysql/ /var/lib/mysql-data

  3. 确保新数据目录拥有正确的所有权,可以是默认的 MySQL 用户和组,也可以是在"my.cnf"全局选项文件中指定的用户。 如果不确定,可以使用以下命令以递归方式使整个层次结构归 MySQL 用户和组所拥有。

    chown -R mysql:mysql /var/lib/mysql-data

用户 MySQL 需要拥有数据库文件夹的完全权限 (rwx),以及日志、bin、数据、索引和表单文件的读/写权限。

通常,在共享托管环境中,数据库文件夹具有许可权 700 (drwx------),并且由 mysql:mysql 所拥有。 在专用环境中,权限可以更自由地配置为 755 (drwxr-xr-x)。

  1. 更新“/etc/my.cnf”配置文件,使其指向新的数据目录。

    确保在编辑配置文件前备份所有内容。

    cp -vp /etc/my.cnf /etc/my.cnf.'date +%s' vi /etc/my.cnf

  2. 将“/var/lib/mysql”的所有实例替换为“var/lib/mysql-data”。 如果没有 datadir 条目,则将其放在 [mysqld] 节中。

    [mysqld] user = mysql datadir = /var/lib/mysql-data socket = /var/lib/mysql-datal/mysql.sock

  3. 某些应用程序具有定制配置,但本文档中未涵盖这些配置。 如果数据目录不是 /var/lib/mysql,某些脚本已知会失败。 因此,使用符号链接指向新位置。

    mv -v /var/lib/mysql /var/lib/mysql.orig

    ln -s /var/lib/mysql-data /var/lib/mysql

如果不想创建链接,请确保更改"mysql.default"_socket 和"mysqli.default"_socket,并完全停止和启动 Apache。

  1. 启动 MySQL 守护程序。

/etc/init.d/mysql start

  1. 验证 MySQL 是否在正常运行。 如果 MySQL 未响应,请查看错误日志。 如果需要,可还原更改。

mysqladmin ping