MariaDB 10 CentOS 7移动datadir困境

Ric*_*chR 10 mysql linux centos mariadb

全新的"最小"安装CentOS 7以及MariaDB 10.我有一个额外安装的镜像卷,我想用于datadir.启动序列很好,并且当my.cnf [mysqld]被注释掉时正常完成.我已经复制了数据..

sudo cp -R -p /var/lib/mysql/* /mnt/mysql/
Run Code Online (Sandbox Code Playgroud)

权限与原始权限相同.卷位于/ etc/fstab中并且安装正常 /dev/sdb1 /mnt/mysql xfs defaults 0 0

[root@femur mysql]# ls -la
total 110632
drwxr-xr-x. 5 mysql mysql     4096 Oct 20 15:27 .
drwxr-xr-x. 3 root  root        18 Oct 16 16:46 ..
-rw-rw----. 1 mysql mysql    16384 Oct 20 15:27 aria_log.00000001
-rw-rw----. 1 mysql mysql       52 Oct 20 15:27 aria_log_control
-rw-r-----. 1 mysql root      7005 Oct 20 13:49 femur.err
-rw-rw----. 1 mysql mysql 12582912 Oct 20 15:27 ibdata1
-rw-rw----. 1 mysql mysql 50331648 Oct 20 15:27 ib_logfile0
-rw-rw----. 1 mysql mysql 50331648 Oct 20 12:21 ib_logfile1
-rw-rw----. 1 mysql mysql        0 Oct 20 12:22 multi-master.info
drwx--x--x. 2 mysql mysql     4096 Oct 20 12:21 mysql
drwx------. 2 mysql mysql     4096 Oct 20 13:37 performance_schema
drwxr-xr-x. 2 mysql mysql        6 Oct 20 12:21 test
Run Code Online (Sandbox Code Playgroud)

这是在my.cnf

!includedir /etc/my.cnf.d
[mysqld]
log_error = /var/log/mysql-error.log
user = mysql
datadir = /mnt/mysql
socket = /mnt/mysql/mysql.sock
Run Code Online (Sandbox Code Playgroud)

这是我尝试启动它时得到的...

'[root@femur mysql]# sudo systemctl start mysql.service
Job for mysql.service failed. See 'systemctl status mysql.service' and 'journalctl -xn' for details.'
Run Code Online (Sandbox Code Playgroud)

这两个文件都没有说太多,但这是在/var/log/mysql-error.log中

141020 16:07:09 mysqld_safe Starting mysqld daemon with databases from /mnt/mysql
141020 16:07:09 [Warning] Can't create test file /mnt/mysql/femur.lower-test
141020 16:07:09 [Note] InnoDB: Using mutexes to ref count buffer pool pages
141020 16:07:09 [Note] InnoDB: The InnoDB memory heap is disabled
141020 16:07:09 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
141020 16:07:09 [Note] InnoDB: Memory barrier is not used
141020 16:07:09 [Note] InnoDB: Compressed tables use zlib 1.2.7
141020 16:07:09 [Note] InnoDB: Using Linux native AIO
141020 16:07:09 [Note] InnoDB: Using CPU crc32 instructions
141020 16:07:09 [Note] InnoDB: Initializing buffer pool, size = 128.0M
141020 16:07:09 [Note] InnoDB: Completed initialization of buffer pool
2014-10-20 16:07:09 7f6cb59c9880  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.
141020 16:07:09 [ERROR] InnoDB: os_file_get_status() failed on './ibdata1'. Can't determine file permissions
141020 16:07:09 [ERROR] InnoDB: The system tablespace must be writable!
141020 16:07:09 [ERROR] Plugin 'InnoDB' init function returned error.
141020 16:07:09 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
141020 16:07:09 [ERROR] mysqld: File '/mnt/mysql/aria_log_control' not found (Errcode: 13 "Permission denied")
141020 16:07:09 [ERROR] mysqld: Got error 'Can't open file' when trying to use aria control file '/mnt/mysql/aria_log_control'
141020 16:07:09 [ERROR] Plugin 'Aria' init function returned error.
141020 16:07:09 [ERROR] Plugin 'Aria' registration as a STORAGE ENGINE failed.
141020 16:07:09 [Note] Plugin 'FEEDBACK' is disabled.
141020 16:07:09 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
141020 16:07:09 [ERROR] Unknown/unsupported storage engine: InnoDB
141020 16:07:09 [ERROR] Aborting

141020 16:07:09 [Note] /usr/sbin/mysqld: Shutdown complete

141020 16:07:09 mysqld_safe mysqld from pid file /mnt/mysql/femur.pid ended
Run Code Online (Sandbox Code Playgroud)

http://www.reddit.com/r/linuxadmin/comments/2ebhpf/adventures_in_moving_mariadb_data_folder/帮助了一下,但我无法让它发挥作用.

任何帮助将不胜感激.

J.C*_*.C. 23

问题确实是SELinux; 在MariaDB/MySQL将在CentOS 7上启动之前你需要做三件事:

  1. 确保用户:组是 mysql:mysql
  2. 将SELinux标记设置为 mysqld_db_t
  3. 将SELinux用户设置为 system_u

这很简单:

chcon -Rt mysqld_db_t /database/db
chcon -Ru system_u /database/db
chown -R mysql:mysql /database/db
Run Code Online (Sandbox Code Playgroud)

插入磁盘后我需要做的全部事情如下:

cfdisk /dev/sdb
pvcreate /dev/sdb1
vgcreate database /dev/sdb1
lvcreate -l 100%FREE -n db database
mkfs.ext4 /dev/database/db
mkdir /database
mount /database
mkdir /database/db
chcon -Rt mysqld_db_t /database/db
chcon -Ru system_u /database/db
chown -R mysql:mysql /database/db
systemctl start mariadb
Run Code Online (Sandbox Code Playgroud)

  • 这是真正的答案。其他人都说禁用selinux。...你为什么会这样呢? (2认同)

Ric*_*chR 6

那很有趣......

事实证明,CentOS 7"minimal"安装了SELinux,这显然阻止了mysql写入已安装的镜像集.我正在寻找我可能没有想过的安全项目,并在文档中找到它.我之前曾想过(显然是错误的)SELinux是一个发行版,而不是一个模块.一旦我运行测试,看看它是否在那里....

getenforce
Run Code Online (Sandbox Code Playgroud)

我暂时禁用它进行测试.

setenforce 0
Run Code Online (Sandbox Code Playgroud)

最后,我能够将镜像集中的目录作为datadir启动MariaDB,并且没有错误.为了使这个更改永久化(因为这个服务器在防火墙后面),在/ etc/selinux/config中,我做了

- SELINUX=enforcing
+ SELINUX=disabled
Run Code Online (Sandbox Code Playgroud)

我希望这有助于其他人.祝你有美好的一天!

  • 我知道你可能在防火墙后面...但是为什么你只是禁用安全功能,特别是一个包装数据库目录.它实际上就像更改一些权限一样简单. (3认同)