首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL on RAMDisk未启动

MySQL on RAMDisk未启动
EN

Unix & Linux用户
提问于 2020-02-15 01:44:40
回答 1查看 121关注 0票数 0

我试图将mysql程序的所有执行(所有表数据、索引等)移到RAM磁盘上,以便进行性能实验,从常规SSD中排除文件IO。

我从安装mysql开始,就像通常所做的那样:sudo apt install mysql-servermysqld程序开始了,我可以正常地创建DB。

我还按照这个站点上列出的说明创建了一个RAMDisk :位置/mnt/ramdisk中的在Ubuntu上创建RAMDisk,并使用25G大小(我有可用的64G )。我可以写信到这个位置,并观察到我的RAM开始填补它应该。

现在,我使用以下命令将mysql库目录复制到这个RAMDisk中:

代码语言:javascript
复制
cp -rp /var/lib/mysql /mnt/ramdisk

并与其进行符号链接,这样我就不必更改/etc/mysql/mysql.conf.d/mysqld.cnf文件中的D8参数。

代码语言:javascript
复制
mv mysql _mysql    
ln -s /mnt/ramdisk/mysql mysql

我还更改了权限,使MySQL“应该”能够访问RAMDisk:

代码语言:javascript
复制
root@HOSTNAME:/var/lib# ls -l | grep mysql
lrwxrwxrwx  1 mysql         mysql           19 Feb 14 16:45 mysql -> /mnt/ramdisk/mysql/
drwx------  6 mysql         mysql         4096 Feb 14 17:06 _mysql
drwx------  2 mysql         mysql         4096 Feb 14 12:14 mysql-files
drwx------  2 mysql         mysql         4096 Feb 12 17:14 mysql-keyring
drwxr-xr-x  2 root          root          4096 Jan 21 06:10 mysql-upgrade

代码语言:javascript
复制
root@HOSTNAME:/mnt# ls -l
total 0
drwxrwxrwt 3 mysql mysql 60 Feb 14 17:24 ramdisk

root@HOSTNAME:/mnt/ramdisk# ls -l
total 0
drwx------ 5 mysql mysql 380 Feb 14 16:41 mysql

但是,当我现在尝试重新启动mysqld程序时,会遇到以下错误:

代码语言:javascript
复制
USER@HOSTNAME:/$ sudo /etc/init.d/mysql restart
[sudo] password for USER: 
[....] Restarting mysql (via systemctl): mysql.serviceJob for mysql.service failed because the control process exited with error code.
See "systemctl status mysql.service" and "journalctl -xe" for details.
 failed!

研究systemctl status mysql.servicejournalctl -xe并没有给出更多关于这个问题的洞察力:

代码语言:javascript
复制
USER@HOSTNAME:/$ systemctl status mysql.service
● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Fri 2020-02-14 17:30:55 PST; 1min 0s ago
  Process: 19794 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid (code=exited, status=1/FAILURE)
  Process: 19785 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
 Main PID: 17945 (code=exited, status=0/SUCCESS)

Feb 14 17:30:55 HOSTNAME systemd[1]: mysql.service: Service hold-off time over, scheduling restart.
Feb 14 17:30:55 HOSTNAME systemd[1]: mysql.service: Scheduled restart job, restart counter is at 5.
Feb 14 17:30:55 HOSTNAME systemd[1]: Stopped MySQL Community Server.
Feb 14 17:30:55 HOSTNAME systemd[1]: mysql.service: Start request repeated too quickly.
Feb 14 17:30:55 HOSTNAME systemd[1]: mysql.service: Failed with result 'exit-code'.
Feb 14 17:30:55 HOSTNAME systemd[1]: Failed to start MySQL Community Server.

对于journalctl -xe

代码语言:javascript
复制
-- Unit mysql.service has begun starting up.
Feb 14 17:30:54 HOSTNAME audit[19792]: AVC apparmor="DENIED" operation="mknod" profile="/usr/sbin/mysqld" name="/mnt/ramdisk/mysql/HOSTNAME.lower-test" pid=19792 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=0 ouid=0
Feb 14 17:30:54 HOSTNAME audit[19792]: AVC apparmor="DENIED" operation="mknod" profile="/usr/sbin/mysqld" name="/mnt/ramdisk/mysql/HOSTNAME.lower-test" pid=19792 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=0 ouid=0
Feb 14 17:30:54 HOSTNAME audit[19792]: AVC apparmor="DENIED" operation="mknod" profile="/usr/sbin/mysqld" name="/mnt/ramdisk/mysql/HOSTNAME.lower-test" pid=19792 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=0 ouid=0
Feb 14 17:30:54 HOSTNAME audit[19796]: AVC apparmor="DENIED" operation="mknod" profile="/usr/sbin/mysqld" name="/mnt/ramdisk/mysql/HOSTNAME.lower-test" pid=19796 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=125 ouid=125
Feb 14 17:30:54 HOSTNAME audit[19796]: AVC apparmor="DENIED" operation="mknod" profile="/usr/sbin/mysqld" name="/mnt/ramdisk/mysql/HOSTNAME.lower-test" pid=19796 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=125 ouid=125
Feb 14 17:30:54 HOSTNAME audit[19796]: AVC apparmor="DENIED" operation="mknod" profile="/usr/sbin/mysqld" name="/mnt/ramdisk/mysql/HOSTNAME.lower-test" pid=19796 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=125 ouid=125
Feb 14 17:30:54 HOSTNAME audit[19796]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/mnt/ramdisk/mysql/ibdata1" pid=19796 comm="mysqld" requested_mask="wr" denied_mask="wr" fsuid=125 ouid=125
Feb 14 17:30:55 HOSTNAME mysqld[19794]: Initialization of mysqld failed: 0
Feb 14 17:30:55 HOSTNAME systemd[1]: mysql.service: Control process exited, code=exited status=1
Feb 14 17:30:55 HOSTNAME systemd[1]: mysql.service: Failed with result 'exit-code'.
Feb 14 17:30:55 HOSTNAME systemd[1]: Failed to start MySQL Community Server.
-- Subject: Unit mysql.service has failed
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
-- 
-- Unit mysql.service has failed.
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2020-02-15 01:58:03

结果,journalctl -xe输出的问题就摆在我面前。

代码语言:javascript
复制
Feb 14 17:30:54 HOSTNAME audit[19792]: AVC apparmor="DENIED" operation="mknod" profile="/usr/sbin/mysqld" name="/mnt/ramdisk/mysql/HOSTNAME.lower-test" pid=19792 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=0 ouid=0

更具体地说,apparmor=“拒绝”部分。从AskUbuntu上的答案:mysql文件夹重新定位后的Apparmor错误,我能够解决我的问题。我会在以下补充有关详情:

编辑/etc/apparmor.d/usr.sbin.mysqld文件。删除/var/lib/mysql并添加新的datadir位置。在我的例子中

代码语言:javascript
复制
 # Allow data dir access
 /mnt/ramdisk/mysql/ r,
 /mnt/ramdisk/mysql/** rwk,

重启装置:service systemctl restart apparmor

重新启动mysql服务:service mysql start

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/567707

复制
相关文章

相似问题

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