首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改datadir后无法启动mysqld服务

更改datadir后无法启动mysqld服务
EN

Database Administration用户
提问于 2018-07-16 14:40:34
回答 2查看 11K关注 0票数 2

我有一个带有RHEL 7的AWS EC2实例,我在它上安装了mysql-5.5。它的datadir位于/var/lib/mysql (默认情况下)。

我从5.5.29版本的数据库导入转储,当前安装的版本为5.5.60

自从我耗尽空间并将其挂载到/data_drive时,一个更大的卷D5就被附加了。

然后按照以下步骤更改数据目录:

  • 停止mysqld并验证它是否已停止
  • 使用rsync -av /var/lib/mysql /data_drive移动具有权限的文件夹
  • 将旧的mysql数据目录移到xvda上的备份文件(原始卷)
  • 编辑/etc/my.cnf以更改[mysqld]块以反映datadirsocket datadir=/data_drive/mysql socket=/data_drive/mysql/mysql.sock中的新位置
  • 在文件[client] port=3306 socket=/data_drive/mysql/mysql.sock的末尾添加了客户端块
  • 保存文件,然后尝试以根用户和非根用户的身份重新启动mysqld服务,但它不会启动。

下面是相关时间戳的/var/log/mysqld.log输出:

代码语言:javascript
复制
180713 19:27:57 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
180713 20:20:37 mysqld_safe Logging to '/var/log/mysqld.log'.
180713 20:20:37 mysqld_safe Starting mysqld daemon with databases from /data_drive/mysql
180713 20:20:37 [Warning] Can't create test file /data_drive/mysql/ip-10-0-0-180.lower-test
180713 20:20:37 [Note] /usr/sbin/mysqld (mysqld 5.5.60) starting as process 18669 ...
180713 20:20:37 [Warning] Can't create test file /data_drive/mysql/ip-10-0-0-180.lower-test
180713 20:20:37 [Warning] Can't create test file /data_drive/mysql/ip-10-0-0-180.lower-test
180713 20:20:37 [Note] Plugin 'FEDERATED' is disabled.
/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
180713 20:20:37 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
180713 20:20:37 InnoDB: The InnoDB memory heap is disabled
180713 20:20:37 InnoDB: Mutexes and rw_locks use GCC atomic builtins
180713 20:20:37 InnoDB: Compressed tables use zlib 1.2.3
180713 20:20:37 InnoDB: Using Linux native AIO
180713 20:20:37 InnoDB: Initializing buffer pool, size = 128.0M
180713 20:20:37 InnoDB: Completed initialization of buffer pool
180713 20:20:37  InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'open'.
InnoDB: Cannot continue operation.

当我运行sudo mysql_upgrade时,它提供了以下输出:

代码语言:javascript
复制
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
Error: Failed while fetching Server version! Could be due to unauthorized access.
FATAL ERROR: Upgrade failed

现在,/data_drive/mysql目录是这样看的:

代码语言:javascript
复制
[ec2-user@ip-10-0-0-180 mysql]$ ls -al /data_drive/mysql/
total 5921812
drwxr-xr-x. 4 mysql    mysql       4096 Jul 13 18:45 .
drwxr-xr-x. 5 ec2-user root        4096 Jul 13 18:46 ..
-rw-rw----. 1 mysql    mysql 6053429248 Jul 13 18:45 ibdata1
-rw-rw----. 1 mysql    mysql    5242880 Jul 13 18:45 ib_logfile0
-rw-rw----. 1 mysql    mysql    5242880 Jul 13 18:35 ib_logfile1
drwx------. 2 mysql    root        4096 Jul 12 19:42 mysql
drwx------. 2 mysql    mysql       4096 Jul 12 19:42 performance_schema
EN

回答 2

Database Administration用户

回答已采纳

发布于 2018-07-16 15:38:39

这可能是SELinux的一个问题。如果SELinux在强制模式下运行,您需要说服它允许mysqld使用非默认的datadir。或者,将SELinux设置为允许模式,或者完全禁用它。运行sestatus以查看它当前运行的模式。运行grep mysql /var/log/audit/audit.log,查看SELinux是否阻止了任何mysql文件访问尝试或类似的操作。(但是请注意,如果在允许模式下运行,这是很好的,因为这样它实际上不会阻塞任何东西,它只是记录如果您在强制模式下运行,它会阻止什么。)

运行setenforce permissive使SELinux进入允许模式,但请注意,您需要编辑/etc/sysconfig/selinux (或/etc/selinux/config)以使更改永久化。

如果您试图说服SELinux允许新的数据中心,则需要确保为文件保留SELinux上下文。我怀疑这在使用rsync时可能会丢失,但不确定。

下面是一个详细解释如何在移动SELinux数据中心:如何在MySQL和Ubuntu上移动CentOS数据目录时处理MySQL的页面

票数 3
EN

Database Administration用户

发布于 2019-08-09 15:20:17

还要确保/data_drive/mysql具有正确的权限和所有权。例如,在我的RHEL7.6VM中,我需要做以下工作:

代码语言:javascript
复制
chown root:root /data_drive
chown mysql:mysql /data_drive/mysql
票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/212323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档