2014-10-20 17 views
6

Cài đặt mới "tối thiểu" của CentOS 7 cùng với MariaDB 10. Tôi có thêm khối lượng được nhân đôi được gắn kết mà tôi muốn sử dụng cho datadir. Trình tự khởi động là tốt và hoàn thành bình thường khi my.cnf [mysqld] được nhận xét. Tôi đã sao chép dữ liệu ..MariaDB 10 CentOS 7 di chuyển datadir tai ương

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

Các quyền giống hệt với quyền của tài liệu gốc. Khối lượng là trong/etc/fstab và gắn kết tốt /dev/sdb1 /mnt/mysql xfs defaults 0 0

[[email protected] 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 

này là trong 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 

Đây là những gì tôi nhận được khi tôi cố gắng để bắt đầu nó ...

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

Cả hai tệp đó đều không nói nhiều, nhưng đây là trong /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/ đã giúp một chút, nhưng tôi không thể làm cho nó hoạt động.

Mọi trợ giúp sẽ được đánh giá cao.

Trả lời

6

Vâng đó là thú vị ...

Hóa ra, đó CentOS 7 "tối thiểu" cài đặt SELinux, mà dường như đã ngăn chặn mysql từ văn bản cho bộ gương gắn kết. Tôi đang tìm kiếm những thứ an ninh mà tôi có thể không nghĩ đến và tìm thấy nó ngay trong tài liệu. Tôi đã từng nghĩ (rõ ràng là sai lầm) rằng SELinux là một phân phối, không phải là một mô-đun. Khi tôi chạy thử nghiệm để xem liệu nó có ở đó không.

getenforce 

Tôi tạm thời vô hiệu hóa nó để kiểm tra.

setenforce 0 

Cuối cùng, tôi có thể bắt đầu MariaDB với thư mục trong bộ nhân đôi là dữ liệu và không có lỗi. Để thực hiện thay đổi này vĩnh viễn (vì máy chủ này là đằng sau một bức tường lửa), trong/etc/selinux/config, tôi đã

- SELINUX=enforcing 
+ SELINUX=disabled 

Tôi hy vọng điều này sẽ giúp người khác. Có một ngày tuyệt vời!

+1

Tôi hiểu bạn có thể đang đứng sau tường lửa ... Nhưng tại sao bạn lại vô hiệu hóa tính năng bảo mật, đặc biệt là một gói thư mục cơ sở dữ liệu của bạn. Nó thực sự đơn giản như thay đổi một số quyền. –

16

Vấn đề thực sự là SELinux; bạn cần phải làm ba việc trước khi MariaDB/MySQL sẽ bắt đầu vào CentOS 7:

  1. Đảm bảo người dùng: nhóm là mysql:mysql
  2. Đặt thẻ SELinux để mysqld_db_t
  3. Đặt người sử dụng SELinux để system_u

này cũng đơn giản như:

chcon -Rt mysqld_db_t /database/db 
chcon -Ru system_u /database/db 
chown -R mysql:mysql /database/db 

Các w lỗ điều tôi cần phải làm sau khi cắm vào một đĩa dưới đây:

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 
+0

Đây là câu trả lời thực sự. Mọi người khác chỉ nói vô hiệu hóa selinux .... Tại sao bạn lại làm như vậy? –

+0

Trên Fedora 23 thư mục cơ sở dữ liệu được gắn nhãn lại khi khởi động mariadb và bạn cần thêm quy tắc gắn nhãn thay thế. 'sudo semanage fcontext --add --type mysqld_db_t"/database/db (/.*)? "' –

+0

giải pháp hoàn hảo. cảm ơn! – ytll21

0

tôi thấy bước này bằng cách hướng dẫn từng bước làm việc cho tôi: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

Bạn phải cài đặt: yum install policycoreutils- python

Hướng dẫn:

Xem SELinux ngữ cảnh của vị trí cơ sở dữ liệu mặc định cho mysql:

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

Điều này cho thấy mysqld_db_t là yếu tố ngữ cảnh mặc định cho vị trí của tệp cơ sở dữ liệu. Ngữ cảnh này sẽ phải được áp dụng thủ công cho vị trí cơ sở dữ liệu mới sẽ được sử dụng trong ví dụ này để nó hoạt động đúng.

Dừng daemon mysqld:

~]# systemctl stop mariadb.service 

Create a new directory cho vị trí mới của cơ sở dữ liệu (s). Trong ví dụ này,/mysql/được sử dụng:

~]# mkdir -p /mysql 

Sao chép các tập tin cơ sở dữ liệu từ vị trí cũ sang vị trí mới:

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

Thay đổi quyền sở hữu của vị trí này cho phép truy cập bởi người sử dụng mysql và nhóm. Điều này đặt ra các điều khoản Unix truyền thống mà SELinux vẫn sẽ quan sát:

~]# chown -R mysql:mysql /mysql 

Chạy lệnh sau để xem bối cảnh ban đầu của thư mục mới:

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

Các usr_t bối cảnh của thư mục mới được tạo ra đây không phải là hiện đang phù hợp với SELinux như một vị trí cho các tệp cơ sở dữ liệu MariaDB. Khi bối cảnh đã được thay đổi, MariaDB sẽ có thể hoạt động đúng trong khu vực này.

Mở tệp cấu hình MariaDB chính /etc/my.cnf bằng trình chỉnh sửa văn bản và sửa đổi tùy chọn datadir để nó đề cập đến vị trí mới.Trong ví dụ này, giá trị cần nhập là/mysql:

[mysqld] 
datadir=/mysql 

Lưu tệp này và thoát.

Bắt đầu mysqld. Dịch vụ sẽ không khởi động được và thông báo từ chối sẽ được ghi vào tệp/var/log/messages:

~]# systemctl start mariadb.service 

Lệnh thất bại mariadb.service. Xem 'systemctl status postgresql.service' và 'journalctl -xn' để biết chi tiết.

Tuy nhiên, nếu trình nền kiểm tra đang chạy và với dịch vụ setroubleshoot, từ chối sẽ được ghi vào tệp /var/log/audit/audit.log thay vào đó: SELinux đang ngăn/usr/libexec/mysqld " viết "truy cập trên/mysql. Đối với tin nhắn SELinux hoàn chỉnh. chạy sealert -l b3f01aff-7fa6-4ebe-ad46-abaef6f8ad71

Lý do từ chối này là/mysql/không được gắn nhãn chính xác cho tệp dữ liệu MariaDB. SELinux đang ngăn chặn MariaDB truy cập vào nội dung có nhãn là usr_t. Thực hiện các bước sau để giải quyết vấn đề này:

Chạy lệnh sau để thêm ánh xạ ngữ cảnh cho/mysql /. Lưu ý rằng semanageutility không được cài đặt theo mặc định. Nếu nó thiếu trên hệ thống của bạn, cài đặt các policycoreutils-pythonpackage.

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

lập bản đồ này được ghi vào tệp /etc/selinux/targeted/contexts/files/file_contexts.local:

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

/mysql(/.*)? system_u: object_r: mysqld_db_t: s0

Bây giờ sử dụng tiện ích restorecon để áp dụng lập bản đồ bối cảnh này để hệ thống chạy:

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

Bây giờ/mysql/vị trí đã được dán nhãn với bối cảnh chính xác cho MariaDB, mysqldstarts:

~]# systemctl start mariadb.service 

Confirm bối cảnh đã thay đổi cho/mysql /:

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

Vị trí đã được thay đổi và dán nhãn, và mysqld đã bắt đầu thành công. Tại thời điểm này tất cả các dịch vụ đang chạy cần được kiểm tra để xác nhận hoạt động bình thường.

+0

Đề cập đến tài nguyên bên ngoài là tốt, nhưng hãy tóm tắt nội dung thay vì sao chép và dán toàn bộ trang mà không có bất kỳ loại định dạng nào! – miken32

+0

Điều gì xảy ra nếu liên kết không hoạt động sau một thời gian? Làm thế nào để tóm tắt khi bạn cần áp dụng từng bước? –

+0

Đã định dạng câu trả lời. –

Các vấn đề liên quan