programing

마리아DB 10센트OS 7 데이터 이동 문제

itsource 2023. 1. 27. 21:44
반응형

마리아DB 10센트OS 7 데이터 이동 문제

Cent의 새로운 "최소" 설치OS 7과 MariaDB 10.데이터 디어에 사용할 마운트된 미러 볼륨이 추가로 있습니다.my.cnf [mysqld]가 코멘트 아웃되면, 기동 시퀀스는 정상적으로 완료됩니다.데이터를 복사했습니다.

sudo cp -R -p /var/lib/mysql/* /mnt/mysql/

권한은 원래 권한과 동일합니다.은 //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

이것은 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

시작하려고 하면 이런 결과가 나오는데...

'[root@femur mysql]# sudo systemctl start mysql.service
Job for mysql.service failed. See 'systemctl status mysql.service' and 'journalctl -xn' for details.'

이 두 파일 모두 많은 것을 의미하지는 않지만 /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

http://www.reddit.com/r/linuxadmin/comments/2ebhpf/adventures_in_moving_mariadb_data_folder/은 조금 도움이 되었지만, 저는 그것을 제대로 작동하지 않았습니다.

어떤 도움이라도 주시면 감사하겠습니다.

문제는 SELinux입니다.MariaDB/MySQL을 Cent에서 시작하기 전에 세 가지 작업을 수행해야 합니다.OS 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

디스크를 연결한 후 필요한 모든 작업은 다음과 같습니다.

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

음, 그거 재미있었는데...

알고보니 그 Cent는OS 7은 SELinux를 "최소" 설치하며, 이로 인해 mysql이 마운트된 미러 세트에 쓸 수 없게 되었습니다.생각지도 못한 보안 아이템을 찾다가 바로 그 문서에서 찾았어요이전에는 SELinux가 모듈이 아닌 배포라고 (분명히 잘못) 생각했습니다.한번 테스트를 해보니 거기 있는지...

getenforce

테스트를 위해 일시적으로 비활성화했습니다.

setenforce 0

마지막으로 미러링된 디렉토리를 데이터 세트로 하여 오류 없이 MariaDB를 시작할 수 있었습니다.이 변경을 영속적으로 하려면(이 서버가 방화벽 뒤에 있기 때문에), /etc/selinux/config에서

- SELINUX=enforcing
+ SELINUX=disabled

이게 다른 사람에게 도움이 됐으면 좋겠어요.좋은 하루 되세요!

이 스텝 바이 스텝 가이드가 도움이 되었습니다. https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/SELinux_Users_and_Administrators_Guide/sect-Managing_Confined_Services-MariaDB-Configuration_Examples.html

설치해야 합니다.yum install policycoreutils-python

가이드:

mysql 기본 데이터베이스 위치의 SELinux 컨텍스트를 표시합니다.

~]# ls -lZ /var/lib/mysql
drwx------. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql

데이터베이스 파일 위치의 기본 컨텍스트 요소인 mysqld_db_t가 표시됩니다.이 콘텍스트를 정상적으로 기능시키려면 이 예에서 사용하는 새로운 데이터베이스 위치에 수동으로 적용해야 합니다.

mysqld 데몬을 중지합니다.

~]# systemctl stop mariadb.service

데이터베이스의 새 위치에 대한 새 디렉토리를 작성합니다.이 예에서는 /mysql/ 가 사용됩니다.

~]# mkdir -p /mysql

데이터베이스 파일을 이전 위치에서 새 위치로 복사합니다.

~]# cp -R /var/lib/mysql/* /mysql/

이 위치의 소유권을 변경하여 mysql 사용자 및 그룹에 의한 액세스를 허용합니다.이것에 의해, SELinux 가 계속 감시하는 종래의 Unix 권한이 설정됩니다.

~]# chown -R mysql:mysql /mysql

다음 명령을 실행하여 새 디렉토리의 초기 컨텍스트를 확인합니다.

~]# ls -lZ /mysql
drwxr-xr-x. mysql mysql unconfined_u:object_r:usr_t:s0   mysql

새로 생성된 이 디렉토리의 컨텍스트usr_t는 현재 마리아DB 데이터베이스 파일의 위치로서 SELinux에 적합하지 않습니다.컨텍스트가 변경되면 MariaDB는 이 영역에서 올바르게 기능할 수 있게 됩니다.

텍스트 편집기를 사용하여 메인 MariaDB 구성 파일 /etc/my.cnf를 열고 새 위치를 참조하도록 datadir 옵션을 수정합니다.이 예에서는 /mysql을 입력해야 합니다.

[mysqld]
datadir=/mysql

이 파일을 저장하고 종료합니다.

mysqld 를 기동합니다.서비스가 시작되지 않고 /var/log/messages 파일에 거부 메시지가 기록됩니다.

~]# systemctl start mariadb.service

마리아답의 직업.서비스가 실패했습니다.자세한 내용은 'systemctl status postgresql.service' 및 'journalctl -xn'을 참조하십시오.

단, 감사 데몬이 실행 중이고 setroubleshoot 서비스가 그와 함께 있는 경우 SELinux는 /mysql에 대한 /usr/libexec/mysqld "write" 액세스를 막고 있습니다.완전한 SELinux 메시지.sealert -l b3f01aff-7fa6-4ebe-ad46-abaef6f8ad71을 실행합니다.

이 거부 이유는 /mysql/이 MariaDB 데이터 파일에 대해 올바르게 라벨이 지정되지 않았기 때문입니다.SELinux가 MariaDB가 usr_t라는 라벨이 붙은 콘텐츠에 액세스할 수 없도록 하고 있습니다.이 문제를 해결하려면 , 다음의 순서에 따릅니다.

다음 명령을 실행하여 /mysql/의 컨텍스트 매핑을 추가합니다.디폴트로는 semanage utility는 인스톨 되어 있지 않습니다.시스템에 없는 경우 policycoreutils-python package를 설치합니다.

**~]# semanage fcontext -a -t mysqld_db_t "/mysql(/.*)?"**

이 매핑은 /etc/selinux/targeted/contexts/files/file_contexts.local 파일에 기록됩니다.

~]# grep -i mysql /etc/selinux/targeted/contexts/files/file_contexts.local

/syslog(/.*) system_u:object_r:mysqld_db_t:s0

restorecon 유틸리티를 사용하여 다음 컨텍스트매핑을 실행 중인 시스템에 적용합니다.

**~]# restorecon -R -v /mysql**

이제 /mysql/ 위치에 MariaDB의 올바른 컨텍스트로 라벨이 지정되었으므로 mysqldstarts:

~]# systemctl start mariadb.service

/mysql/의 컨텍스트가 변경되었는지 확인합니다.

~]$ ls -lZ /mysql
drwxr-xr-x. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql

위치가 변경되어 라벨이 부착되어 mysqld가 정상적으로 시작되었습니다.이 시점에서 실행 중인 모든 서비스를 테스트하여 정상 동작을 확인해야 합니다.

언급URL : https://stackoverflow.com/questions/26474222/mariadb-10-centos-7-moving-datadir-woes

반응형