Hướng dẫn mysql move data directory - thư mục dữ liệu di chuyển mysql

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 có đặc quyền

    Output

    +-----------------+ | @@datadir | +-----------------+ | /var/lib/mysql/ | +-----------------+ 1 row in set (0.00 sec)
    2. 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.

  • 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 một thiết bị lưu trữ khối được gắn ở

Output

+-----------------+ | @@datadir | +-----------------+ | /var/lib/mysql/ | +-----------------+ 1 row in set (0.00 sec)
3. 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ị.

  1. mysql -u root -p

Khi đượ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:

  1. select @@datadir;

Output

+-----------------+ | @@datadir | +-----------------+ | /var/lib/mysql/ | +-----------------+ 1 row in set (0.00 sec)

Đầ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,

Output

+-----------------+ | @@datadir | +-----------------+ | /var/lib/mysql/ | +-----------------+ 1 row in set (0.00 sec)
4 để 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

Output

+-----------------+ | @@datadir | +-----------------+ | /var/lib/mysql/ | +-----------------+ 1 row in set (0.00 sec)
5 để 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:

  1. sudo systemctl stop mysql

Output

+-----------------+ | @@datadir | +-----------------+ | /var/lib/mysql/ | +-----------------+ 1 row in set (0.00 sec)
6 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:

  1. sudo systemctl status mysql

Bạ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:

Output

. . . Jul 18 11:24:20 ubuntu-512mb-nyc1-01 systemd[1]: Stopped MySQL Community Server.

Bây giờ máy chủ đã ngừng hoạt động, 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

Output

+-----------------+ | @@datadir | +-----------------+ | /var/lib/mysql/ | +-----------------+ 1 row in set (0.00 sec)
7. Sử dụng cờ

Output

+-----------------+ | @@datadir | +-----------------+ | /var/lib/mysql/ | +-----------------+ 1 row in set (0.00 sec)
8 bảo tồn các quyền và các thuộc tính thư mục khác, trong khi ____29 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,

Output

+-----------------+ | @@datadir | +-----------------+ | /var/lib/mysql/ | +-----------------+ 1 row in set (0.00 sec)
7 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
  1. sudo systemctl stop mysql
1 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,

Output

+-----------------+ | @@datadir | +-----------------+ | /var/lib/mysql/ | +-----------------+ 1 row in set (0.00 sec)
7 will dump the contents of the directory into the mount point instead of transferring it into a containing
  1. sudo systemctl stop mysql
1 directory:

  1. sudo rsync -av /var/lib/mysql /mnt/volume-nyc1-01

Khi

Output

+-----------------+ | @@datadir | +-----------------+ | /var/lib/mysql/ | +-----------------+ 1 row in set (0.00 sec)
7 hoàn tất, đổi tên thư mục hiện tại với phần 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ũ:

  1. sudo mv /var/lib/mysql /var/lib/mysql.bak

Bâ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,

  1. sudo systemctl stop mysql
3 được đặt thành
  1. sudo systemctl stop mysql
4 trong tệp
  1. sudo systemctl stop mysql
5. Chỉnh sửa tệp này để phản ánh thư mục dữ liệu mới:

  1. sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Tìm dòng bắt đầu bằng

  1. sudo systemctl stop mysql
6 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

. . .
datadir=/mnt/volume-nyc1-01/mysql
. . .

Đâ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

  1. sudo systemctl stop mysql
7
  1. sudo systemctl stop mysql
7:

  1. select @@datadir;
0

Ở dưới cùng của tệp, thêm quy tắc bí danh sau:

  1. select @@datadir;
1

Đối với các thay đổi có hiệu lực, hãy khởi động lại APPARMOR:

  1. select @@datadir;
2

Lư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:

  1. select @@datadir;
3

Đầu ra từ cả

Output

+-----------------+ | @@datadir | +-----------------+ | /var/lib/mysql/ | +-----------------+ 1 row in set (0.00 sec)
6 và
  1. sudo systemctl stop mysql
9 kết thúc với:

  1. select @@datadir;
4

Vì 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

  1. sudo systemctl status mysql
0 kiểm tra sự tồn tại của thư mục,
  1. sudo systemctl status mysql
1 hoặc liên kết tượng trưng, ​​
  1. sudo systemctl status mysql
2, 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

  1. select @@datadir;
5

Vì 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.

  1. select @@datadir;
6

Bây giờ chúng tôi đã sẵn sàng để bắt đầu MySQL.

  1. select @@datadir;
7

Để đả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.

  1. mysql -u root -p

Nhìn vào giá trị cho thư mục dữ liệu một lần nữa:

  1. select @@datadir;
9

Bâ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:

Output

+-----------------+ | @@datadir | +-----------------+ | /var/lib/mysql/ | +-----------------+ 1 row in set (0.00 sec)
0

Khở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:

Output

+-----------------+ | @@datadir | +-----------------+ | /var/lib/mysql/ | +-----------------+ 1 row in set (0.00 sec)
1

Sự 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