Tôi có thể thay đổi thành công thư mục dữ liệu của MySQL hoặc MariaDB và giải quyết tất cả các vấn đề liên quan trên Fedora 30. Tôi nghĩ các bước sau đây sẽ hoạt động trên các phân phối khác.MySQL or MariaDB, and resolve all related issues on Fedora 30. I think the following steps will work on other distributions.
Lưu ý: Người dùng các bản phân phối
chown --reference=/var/lib/mysql /home/eloy/applications/mysql-datadir/
chmod --reference=/var/lib/mysql /home/eloy/applications/mysql-datadir/
7 như chown --reference=/var/lib/mysql /home/eloy/applications/mysql-datadir/
chmod --reference=/var/lib/mysql /home/eloy/applications/mysql-datadir/
8 sẽ tìm kiếm cách tắt và chỉnh sửa chown --reference=/var/lib/mysql /home/eloy/applications/mysql-datadir/
chmod --reference=/var/lib/mysql /home/eloy/applications/mysql-datadir/
9 và sau đó làm theo các bước sau.Vô hiệu hóa Selinux
Trước hết, hãy để tôi đề cập rằng các bản phân phối Linux [RHEL] dựa trên Redhat như Fedora, Centos, v.v. Sử dụng SELinux để thực thi các chính sách kiểm soát truy cập bắt buộc. Vì vậy, tốt hơn là
cp -rp /var/lib/mysql/* /home/eloy/applications/mysql-datadir/
0 nó trong các bước sau và sau đó kích hoạt nó với một số điều chỉnh.RedHat-based Linux
Distributions [RHELs] like Fedora, CentOS, etc. use SELinux that enforces mandatory access control policies. So it's better to cp -rp /var/lib/mysql/* /home/eloy/applications/mysql-datadir/
0 it during the following steps and later enable it with some tweaks.Mở tệp cấu hình Selinux
nano /etc/selinux/config
Xác định vị trí dòng chứa
cp -rp /var/lib/mysql/* /home/eloy/applications/mysql-datadir/
1 và thay đổi giá trị của nó thành cp -rp /var/lib/mysql/* /home/eloy/applications/mysql-datadir/
2, lưu tệp và khởi động lại hệ thống của bạn.save the file and reboot your system.Thay đổi dữ liệu của MySQL
Dừng các dịch vụ MySQL
systemctl stop mysqld.service
Tạo một thư mục mới cho thư mục dữ liệu của MySQL. Do một số lý do nằm ngoài phạm vi của giải pháp này, rất khuyến khích không tạo thư mục dữ liệu trong thư mục
cp -rp /var/lib/mysql/* /home/eloy/applications/mysql-datadir/
3, nhưng có lẽ một số bạn thích tôi thích nó [nó tốn nhiều bước hơn].mkdir /home/eloy/applications/mysql-datadir/
Đặt quyền sở hữu và quyền của thư mục mới thành thư mục dữ liệu của MySQL mặc định [________ 44]:ownership and permissions of the new directory to the default MySQL's data directory[
cp -rp /var/lib/mysql/* /home/eloy/applications/mysql-datadir/
4]:chown --reference=/var/lib/mysql /home/eloy/applications/mysql-datadir/
chmod --reference=/var/lib/mysql /home/eloy/applications/mysql-datadir/
Sao chép tất cả các tệp từ thư mục mặc định vào tệp mới
cp -rp /var/lib/mysql/* /home/eloy/applications/mysql-datadir/
Chỉnh sửa tệp
cp -rp /var/lib/mysql/* /home/eloy/applications/mysql-datadir/
5, Thêm dòng sau trong phần cp -rp /var/lib/mysql/* /home/eloy/applications/mysql-datadir/
6:[mysqld]
datadir=/home/eloy/applications/mysql-datadir/
Bây giờ bạn có thể bắt đầu dịch vụ MySQL của mình thông qua lệnh sau
systemctl start mysqld.service
Nhưng nếu thư mục dữ liệu được tạo theo
3, MySQL sẽ không bắt đầu và bạn sẽ thấy các lỗi và cảnh báo sau đây sau cp -rp /var/lib/mysql/* /home/eloy/applications/mysql-datadir/
8: if the data directory is created under cp -rp /var/lib/mysql/* /home/eloy/applications/mysql-datadir/
cp -rp /var/lib/mysql/* /home/eloy/applications/mysql-datadir/
3, MySQL won't start and you would see the following errors and warnings after cp -rp /var/lib/mysql/* /home/eloy/applications/mysql-datadir/
8:Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: 2021-10-05 10:22:03 0 [Warning] Could not increase number of max_open_files to more than 16384 [request: 32190]
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: 2021-10-05 10:22:03 0 [Warning] Can't create test file /home/eloy/applications/mysql-datadir/eloy-fedora-laptop.lower->
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: [113B blob data]
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: 2021-10-05 10:22:03 0 [ERROR] Aborting
Giải quyết các vấn đề cp -rp /var/lib/mysql/* /home/eloy/applications/mysql-datadir/
3
cp -rp /var/lib/mysql/* /home/eloy/applications/mysql-datadir/
Đảm bảo rằng tất cả các thư mục mẹ của
[mysqld]
datadir=/home/eloy/applications/mysql-datadir/
0 mới trở lên đều có quyền [mysqld]
datadir=/home/eloy/applications/mysql-datadir/
1 [thực thi] cho tất cả [người dùng, nhóm và khác]. Tôi không thích sử dụng tập lệnh đệ quy vì vậy:execute] permissions for all [user, group, and other]. I prefer to not use a recursive script so:chmod +x /home/eloy/applications/mysql-datadir
chmod +x /home/eloy/applications
chmod +x /home/eloy/
chmod +x /home
Vì nó được đề cập, việc tạo Datadir trong thư mục
cp -rp /var/lib/mysql/* /home/eloy/applications/mysql-datadir/
3 là khó khăn vì theo mặc định, MySQL không cho phép nó. Tạo một tệp dưới /etc/systemd/system/mariadb.service.d và đặt các dòng sau trong:#open an editor to create a file
nano /etc/systemd/system/mariadb.service.d/centreon.conf
Sao chép các dòng sau vào tệp
[mysqld]
datadir=/home/eloy/applications/mysql-datadir/
3 mới và lưu nósystemctl stop mysqld.service
0Áp dụng các thay đổi bằng cách chạy lệnh sau
systemctl stop mysqld.service
1Bây giờ bạn có thể chạy dịch vụ MySQL:
systemctl start mysqld.service
Cho phép Selinux
Một lần nữa chỉnh sửa tệp
[mysqld]
datadir=/home/eloy/applications/mysql-datadir/
4 và thay đổi dòng cp -rp /var/lib/mysql/* /home/eloy/applications/mysql-datadir/
2 thành cp -rp /var/lib/mysql/* /home/eloy/applications/mysql-datadir/
1. Lưu tệp và khởi động lại hệ thống của bạn.Để truy vấn trạng thái hiện tại của SELinux, sử dụng các lệnh sau, nó nên in
[mysqld]
datadir=/home/eloy/applications/mysql-datadir/
7 dưới dạng đầu ra.systemctl stop mysqld.service
3[mysqld]
datadir=/home/eloy/applications/mysql-datadir/
8 sử dụng [mysqld]
datadir=/home/eloy/applications/mysql-datadir/
9 và nếu nó không được đặt chính xác, quy trình systemctl start mysqld.service
0 sẽ bị hủy bỏ, vì vậy bạn cần cập nhật nó:systemctl stop mysqld.service
4Bây giờ bạn có thể chạy MySQL. Chúc mừng ;-]
Giới thiệu
Cơ sở dữ liệu phát triển theo thời gian, đôi khi vượt xa không gian trên hệ thống tệp. Bạn cũng có thể gặp phải sự tranh chấp I/O khi chúng nằm trên cùng một phân vùng với phần còn lại của hệ điều hành. RAID, lưu trữ khối mạng và các thiết bị khác có thể cung cấp dự phòng và các tính năng mong muốn khác. Cho dù bạn có thêm không gian, đánh giá các cách để tối ưu hóa hiệu suất hoặc tìm cách tận dụng các tính năng lưu trữ khác, hướng dẫn này sẽ hướng dẫn bạn thông qua việc di chuyển thư mục dữ liệu MySQL.
Điều kiện tiên quyết
Để hoàn thành hướng dẫn này, bạn sẽ cần:
Máy chủ Ubuntu 16.04 với người dùng không root với các đặc quyền
1. Bạn có thể tìm hiểu thêm về cách thiết lập người dùng với các đặc quyền này trong thiết lập máy chủ ban đầu của chúng tôi với hướng dẫn Ubuntu 16.04.. You can learn more about how to set up a user with these privileges in our Initial Server Setup with Ubuntu 16.04 guide.systemctl start mysqld.service
Một máy chủ MySQL. Nếu bạn đã cài đặt MySQL, cách cài đặt MySQL trên hướng dẫn Ubuntu 16.04 có thể giúp bạn.. If you haven’t already installed MySQL, the How To Install MySQL on Ubuntu 16.04 guide can help you.
Trong ví dụ này, chúng tôi di chuyển dữ liệu sang thiết bị lưu trữ khối được gắn ở
systemctl start mysqld.service
2. Bạn có thể tìm hiểu cách thiết lập một trong cách sử dụng lưu trữ khối trên Hướng dẫn DigitalOcean.Bất kể lưu trữ cơ bản nào bạn sử dụng, hướng dẫn này có thể giúp bạn chuyển thư mục dữ liệu đến một vị trí mới.
Bước 1 - Di chuyển thư mục dữ liệu MySQL
Để chuẩn bị để di chuyển thư mục dữ liệu MySQL, hãy để xác minh vị trí hiện tại bằng cách bắt đầu phiên MySQL tương tác bằng thông tin quản trị.
systemctl stop mysqld.service
5Khi được nhắc, hãy cung cấp mật khẩu gốc MySQL. Sau đó, từ lời nhắc MySQL, chọn thư mục dữ liệu:
systemctl stop mysqld.service
6systemctl stop mysqld.service
7Đầu ra này xác nhận rằng MySQL được cấu hình để sử dụng thư mục dữ liệu mặc định,
systemctl start mysqld.service
3 để thư mục mà chúng ta cần di chuyển. Khi bạn đã xác nhận điều này, hãy nhập systemctl start mysqld.service
4 để rời khỏi màn hình.Để đảm bảo tính toàn vẹn của dữ liệu, chúng tôi sẽ tắt MySQL trước khi chúng tôi thực sự thay đổi thư mục dữ liệu:
systemctl stop mysqld.service
8systemctl start mysqld.service
5 không hiển thị kết quả của tất cả các lệnh quản lý dịch vụ, vì vậy nếu bạn muốn chắc chắn rằng bạn đã thành công, hãy sử dụng lệnh sau:systemctl stop mysqld.service
9Bạn có thể chắc chắn rằng nó đã tắt nếu dòng cuối cùng của đầu ra cho bạn biết máy chủ bị dừng:
mkdir /home/eloy/applications/mysql-datadir/
0Bây giờ máy chủ đã tắt, chúng tôi sẽ sao chép thư mục cơ sở dữ liệu hiện có vào vị trí mới với
systemctl start mysqld.service
6. Sử dụng cờ systemctl start mysqld.service
7 bảo tồn các quyền và các thuộc tính thư mục khác, trong khi ____68 cung cấp đầu ra dài dòng để bạn có thể làm theo tiến trình.Lưu ý: Hãy chắc chắn rằng không có dấu gạch chéo trên thư mục, có thể được thêm vào nếu bạn sử dụng hoàn thành tab. Khi có một dấu gạch chéo kéo dài,
6 sẽ đổ nội dung của thư mục vào điểm gắn kết thay vì chuyển nó vào thư mục systemctl start mysqld.service
0 chứa: Be sure there is no trailing slash on the directory, which
may be added if you use tab completion. When there’s a trailing slash, Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: 2021-10-05 10:22:03 0 [Warning] Could not increase number of max_open_files to more than 16384 [request: 32190]
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: 2021-10-05 10:22:03 0 [Warning] Can't create test file /home/eloy/applications/mysql-datadir/eloy-fedora-laptop.lower->
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: [113B blob data]
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: 2021-10-05 10:22:03 0 [ERROR] Aborting
systemctl start mysqld.service
6 will dump the contents of the directory into the mount point instead of transferring it into a containing Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: 2021-10-05 10:22:03 0 [Warning] Could not increase number of max_open_files to more than 16384 [request: 32190]
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: 2021-10-05 10:22:03 0 [Warning] Can't create test file /home/eloy/applications/mysql-datadir/eloy-fedora-laptop.lower->
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: [113B blob data]
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: 2021-10-05 10:22:03 0 [ERROR] Aborting
0 directory:mkdir /home/eloy/applications/mysql-datadir/
1Khi
systemctl start mysqld.service
6 hoàn tất, đổi tên thư mục hiện tại với tiện ích mở rộng .bak và giữ nó cho đến khi chúng tôi xác nhận việc di chuyển đã thành công. Bằng cách đặt tên lại, chúng tôi sẽ tránh sự nhầm lẫn có thể phát sinh từ các tệp ở cả vị trí mới và địa điểm cũ:mkdir /home/eloy/applications/mysql-datadir/
2Bây giờ chúng tôi đã sẵn sàng để chuyển sự chú ý của chúng tôi sang cấu hình.
Bước 2 - Chỉ vào vị trí dữ liệu mới
MySQL có một số cách để ghi đè giá trị cấu hình. Theo mặc định,
[mysqld]
datadir=/home/eloy/applications/mysql-datadir/
0 được đặt thành cp -rp /var/lib/mysql/* /home/eloy/applications/mysql-datadir/
4 trong tệp Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: 2021-10-05 10:22:03 0 [Warning] Could not increase number of max_open_files to more than 16384 [request: 32190]
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: 2021-10-05 10:22:03 0 [Warning] Can't create test file /home/eloy/applications/mysql-datadir/eloy-fedora-laptop.lower->
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: [113B blob data]
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: 2021-10-05 10:22:03 0 [ERROR] Aborting
4. Chỉnh sửa tệp này để phản ánh thư mục dữ liệu mới:mkdir /home/eloy/applications/mysql-datadir/
3Tìm dòng bắt đầu bằng
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: 2021-10-05 10:22:03 0 [Warning] Could not increase number of max_open_files to more than 16384 [request: 32190]
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: 2021-10-05 10:22:03 0 [Warning] Can't create test file /home/eloy/applications/mysql-datadir/eloy-fedora-laptop.lower->
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: [113B blob data]
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: 2021-10-05 10:22:03 0 [ERROR] Aborting
5 và thay đổi đường dẫn theo sau để phản ánh vị trí mới.Trong trường hợp của chúng tôi, tệp được cập nhật trông giống như đầu ra bên dưới:
/etc/mysql/mysql.conf.d/mysqld.cnf
mkdir /home/eloy/applications/mysql-datadir/
4Đây có vẻ như là thời điểm thích hợp để đưa MySQL lên một lần nữa, nhưng có một điều nữa để cấu hình trước khi chúng ta có thể làm điều đó thành công.
Bước 3 - Định cấu hình các quy tắc kiểm soát truy cập apparmor
Chúng tôi cần phải nói với Apparmor để cho MySQL ghi vào thư mục mới bằng cách tạo bí danh giữa thư mục mặc định và vị trí mới. Để thực hiện việc này, chỉnh sửa tệp
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: 2021-10-05 10:22:03 0 [Warning] Could not increase number of max_open_files to more than 16384 [request: 32190]
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: 2021-10-05 10:22:03 0 [Warning] Can't create test file /home/eloy/applications/mysql-datadir/eloy-fedora-laptop.lower->
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: [113B blob data]
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: 2021-10-05 10:22:03 0 [ERROR] Aborting
6 ab____76:mkdir /home/eloy/applications/mysql-datadir/
5Ở dưới cùng của tệp, thêm quy tắc bí danh sau:
mkdir /home/eloy/applications/mysql-datadir/
6Đối với các thay đổi có hiệu lực, hãy khởi động lại APPARMOR:
mkdir /home/eloy/applications/mysql-datadir/
7Lưu ý: Nếu bạn bỏ qua bước cấu hình apparmor, bạn sẽ chạy vào thông báo lỗi sau: If you skipped the AppArmor configuration step, you would run into the following error message:
mkdir /home/eloy/applications/mysql-datadir/
8Đầu ra từ cả
systemctl start mysqld.service
5 và Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: 2021-10-05 10:22:03 0 [Warning] Could not increase number of max_open_files to more than 16384 [request: 32190]
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: 2021-10-05 10:22:03 0 [Warning] Can't create test file /home/eloy/applications/mysql-datadir/eloy-fedora-laptop.lower->
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: [113B blob data]
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: 2021-10-05 10:22:03 0 [ERROR] Aborting
8 kết luận với:mkdir /home/eloy/applications/mysql-datadir/
9Vì các tin nhắn don lồng tạo ra một kết nối rõ ràng giữa apparmor và thư mục dữ liệu, lỗi này có thể mất một thời gian để tìm ra.
Bước 4 - Khởi động lại MySQL
Bước tiếp theo là bắt đầu MySQL, nhưng nếu bạn làm vậy, bạn sẽ gặp phải một lỗi khác. Lần này, thay vì sự cố ứng dụng, lỗi xảy ra do tập lệnh
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: 2021-10-05 10:22:03 0 [Warning] Could not increase number of max_open_files to more than 16384 [request: 32190]
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: 2021-10-05 10:22:03 0 [Warning] Can't create test file /home/eloy/applications/mysql-datadir/eloy-fedora-laptop.lower->
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: [113B blob data]
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: 2021-10-05 10:22:03 0 [ERROR] Aborting
9 kiểm tra sự tồn tại của thư mục, chmod +x /home/eloy/applications/mysql-datadir
chmod +x /home/eloy/applications
chmod +x /home/eloy/
chmod +x /home
0 hoặc liên kết tượng trưng, chmod +x /home/eloy/applications/mysql-datadir
chmod +x /home/eloy/applications
chmod +x /home/eloy/
chmod +x /home
1, phù hợp với hai đường dẫn mặc định. Nó thất bại nếu họ không tìm thấy:/usr/share/mysql/mysql-systemd-start
chown --reference=/var/lib/mysql /home/eloy/applications/mysql-datadir/
chmod --reference=/var/lib/mysql /home/eloy/applications/mysql-datadir/
0Vì chúng tôi cần những thứ này để khởi động máy chủ, chúng tôi sẽ tạo cấu trúc thư mục tối thiểu để vượt qua kiểm tra môi trường tập lệnh.
chown --reference=/var/lib/mysql /home/eloy/applications/mysql-datadir/
chmod --reference=/var/lib/mysql /home/eloy/applications/mysql-datadir/
1Bây giờ chúng tôi đã sẵn sàng để bắt đầu MySQL.
chown --reference=/var/lib/mysql /home/eloy/applications/mysql-datadir/
chmod --reference=/var/lib/mysql /home/eloy/applications/mysql-datadir/
2Để đảm bảo rằng thư mục dữ liệu mới thực sự được sử dụng, hãy bắt đầu Màn hình MySQL.
systemctl stop mysqld.service
5Nhìn vào giá trị cho thư mục dữ liệu một lần nữa:
chown --reference=/var/lib/mysql /home/eloy/applications/mysql-datadir/
chmod --reference=/var/lib/mysql /home/eloy/applications/mysql-datadir/
4Bây giờ, bạn đã khởi động lại MySQL và xác nhận rằng nó sử dụng vị trí mới, hãy tận dụng cơ hội để đảm bảo rằng cơ sở dữ liệu của bạn có chức năng đầy đủ. Khi bạn đã xác minh tính toàn vẹn của bất kỳ dữ liệu hiện có nào, bạn có thể xóa thư mục dữ liệu sao lưu:
chown --reference=/var/lib/mysql /home/eloy/applications/mysql-datadir/
chmod --reference=/var/lib/mysql /home/eloy/applications/mysql-datadir/
5Khởi động lại MySQL một lần cuối cùng để chắc chắn rằng nó hoạt động như mong đợi:
chown --reference=/var/lib/mysql /home/eloy/applications/mysql-datadir/
chmod --reference=/var/lib/mysql /home/eloy/applications/mysql-datadir/
6Sự kết luận
Trong hướng dẫn này, chúng tôi đã chuyển thư mục dữ liệu MySQL, sang một vị trí mới và cập nhật các ACL của Ubuntu, ACL để điều chỉnh. Mặc dù chúng tôi đã sử dụng một thiết bị lưu trữ khối, các hướng dẫn ở đây phải phù hợp để xác định lại vị trí của thư mục dữ liệu bất kể công nghệ cơ bản.
Để biết thêm về việc quản lý các thư mục dữ liệu MySQL, hãy xem các phần này trong tài liệu chính thức của MySQL:
- Thư mục dữ liệu MySQL
- Thiết lập nhiều thư mục dữ liệu