Computer >> Máy Tính >  >> Lập trình >> MySQL

Cách thay đổi thư mục dữ liệu MySQL sang vị trí khác trên Ubuntu 16.04

Trong bài này, chúng ta sẽ tìm hiểu cách thay đổi Thư mục dữ liệu MySQL hoặc di dời dữ liệu Cơ sở dữ liệu MySQL sang vị trí mới, tình huống này có thể được sử dụng khi cơ sở dữ liệu đang phát triển rất nhanh, hoặc vì một số lý do bảo mật mà chúng ta muốn di chuyển thư mục dữ liệu đến vị trí mới.

Điều kiện tiên quyết

  • Máy Ubuntu có người dùng không phải root có quyền Sudo.
  • MySQL đã được cài đặt và hoạt động.
  • Ổ đĩa hoặc vị trí mới mà chúng tôi muốn di chuyển vị trí dữ liệu cơ sở dữ liệu, vị trí mới sẽ là / mnt / data_vol / MySQL vì data_vol là ổ đĩa mới được gắn vào máy hoặc máy chủ.

Thay đổi Vị trí Thư mục Dữ liệu MySQL

Trước khi tiếp tục, trước tiên chúng ta sẽ tìm vị trí hiện tại của thư mục dữ liệu

 $ mysql –u root –pOutput:Nhập mật khẩu:Chào mừng bạn đến với màn hình MySQL. Các lệnh kết thúc bằng; hoặc \ g. id kết nối MySQL của bạn là 472 Phiên bản máy chủ:5.6.30-0ubuntu0.14.04.1 (Ubuntu) Bản quyền (c) 2000, 2016, Oracle và / hoặc các chi nhánh của nó. Mọi quyền được bảo lưu.Oracle là thương hiệu đã đăng ký của Oracle Corporation và / hoặc các chi nhánh của nó. Các tên khác có thể là thương hiệu của các chủ sở hữu tương ứng của chúng. hoặc '\ h' để được trợ giúp. Nhập '\ c' để xóa câu lệnh nhập hiện tại.mysql> 

Khi được nhắc nhập mật khẩu gốc của MySQL, vui lòng nhập mật khẩu. Chạy lệnh dưới đây để biết thư mục dữ liệu hoạt động hiện tại cho MySQL.

 Mysql> select @@ datadir; Đầu ra:+ ----------------- + | @@ datadir | + ----------------- + | / var / lib / mysql / | + ----------------- + 1 hàng trong bộ (0,00 giây) 

Như kết quả đầu ra sẽ cho thấy rằng cơ sở dữ liệu MySQL sử dụng / var / lib / MySQL làm thư mục mặc định làm thư mục dữ liệu. Trước khi chúng tôi sửa đổi bất cứ điều gì đầu tiên, chúng tôi sẽ kiểm tra tính toàn vẹn của dữ liệu, chúng tôi sẽ dừng MySQL và kiểm tra trạng thái

 $ sudo systemctl dừng mysql 

Vì systemctl sẽ không hiển thị bất kỳ thứ gì cho lệnh dịch vụ

 $ sudo systemctl status mysqlOutput:mysql.service - MySQL Community Server đã tải:đã tải (/lib/systemd/system/mysql.service; đã kích hoạt; đặt trước của nhà cung cấp:đã kích hoạt) Hoạt động:không hoạt động (đã chết) kể từ Thứ Hai 2016-09- 12 13:57:43 IST; 1 giây trước Quy trình:17669 ExecStartPost =/ usr / share / mysql / mysql-systemd-start post (code =exited, status =0 / SUCCESS) Process:17668 ExecStart =/ usr / sbin / mysqld (code =exited, status =0 / THÀNH CÔNG) Quy trình:17664 ExecStartPre =/ usr / share / mysql / mysql-systemd-start pre (code =exited, status =0 / SUCCESS) Main PID:17668 (code =exited, status =0 / SUCCESS) Ngày 12 tháng 9 13 :55:14 ubuntu-16 systemd [1]:Khởi động MySQL Community Server ... 12 tháng 9 13:55:15 ubuntu-16 systemd [1]:Khởi động MySQL Community Server. 12 13:57:40 ubuntu-16 systemd [1]:Dừng máy chủ cộng đồng MySQL ... 12 tháng 9 13:57:43 ubuntu-16 systemd [1]:Dừng máy chủ cộng đồng MySQL. 

Sau khi xác nhận rằng MySQL bị dừng, chúng tôi sẽ di chuyển dữ liệu đến vị trí mới. Để di chuyển dữ liệu, chúng tôi sẽ sử dụng tùy chọn Rsync với –a để bảo toàn quyền của tệp dữ liệu và –v hiển thị đầu ra dài dòng.

Dưới đây là toàn bộ lệnh để di chuyển dữ liệu đến vị trí mới -

 $ rsync –av / var / lib / mysql / mnt / data_vol / OutPut:gửi tệp gia tăng listmysql / mysql / auto.cnfmysql / debian-5.7.flagmysql / ib_buffer_poolmysql / ib_logfile0mysql / ibmlysql / mysqlata1 ibmlysql / mysqlata1 mysqlysqlata1mys /columns_priv.MYDmysql/mysql/columns_priv.MYImysql/mysql/columns_priv.frmmysql/mysql/db.MYDmysql/mysql/db.MYImysql/mysql/mysql/columns_priv.frmmysql/mysql/db.MYDmysql/mysql/db.MYImysql/mysql/db.frmopyst@user/user_user@user frmmysql / sys / x @ 0024user_summary_by_file_io.frmmysql / sys / x @ 0024user_summary_by_file_io_type.frmmysql / sys / x @ 0024user_summary_by_stages.frmmysql / sys / x @ 0024user_summary_by_statement_latency.frmmysql / sys / x @ 0024user_summary_by_statement_type.frmmysql / sys / x @ 0024wait_classes_global_by_avg_latency.frmmysql / sys / x @ 0024wait_classes_global_by_latency.frmmysql / sys / x @ 0024waits_by_host_by_latency.frmmysqlsys // x @ 0024waits_by_user_by_latency.frmmysql / sys / x @ 0024waits_by_host_by_latency.frmmysqlsys // x @ 0024waits_by_user_by_latency.frmmysql / sys / x @ 0024waits_,384,083 byte tốc độ nhận được 132,858,54 byte tốc độ nhận được 199,85 byte 

Sau khi rsync, hãy di chuyển thành công thư mục dữ liệu đến vị trí mới. Vì lý do bảo mật, chúng tôi sẽ giữ thư mục dữ liệu cho đến khi xác nhận rằng dữ liệu ở vị trí mới, chúng tôi sẽ đổi tên thư mục dữ liệu hiện tại từ / var / lib / mysql thành / var / lib / mysql_backup. dưới đây là lệnh thay đổi thư mục dữ liệu hiện tại.

Dưới đây là lệnh thay đổi thư mục dữ liệu hiện tại -

 $ sudo mv / var / lib / mysql / var / lib / mysql_backup 

Bây giờ, chúng tôi sẽ thay đổi thư mục dữ liệu mặc định, để thay đổi chúng tôi có nhiều cách, nhưng chúng tôi sẽ chỉnh sửa tệp mysqld.cnf nằm trong /etc/mysql/mysql.conf.d/mysqld.cnf.

Để chỉnh sửa mysqld.cnf, dưới đây là lệnh

 $ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnfOutput:[mysqld_safe]socket =/var/run/mysqld/mysqld.socknice =0 [mysqld] ## * Cài đặt cơ bản # user =mysqlpid -file =/var/run/mysqld/mysqld.pidsocket =/var/run/mysqld/mysqld.sockport =3306basedir =/ usrdatadir =/ mnt / data_vol / mysql / tmpdir =/ tmplc-messages-dir =/ usr / share / mysqlskip-external-lock 

Thay đổi Cài đặt Bí danh Apparmor

Ngoài ra, chúng tôi cần chỉnh sửa /etc/apparmor.d/tunables/alias

Ở cuối tệp, chúng tôi cần thêm các dòng sau trong quy tắc bí danh.

 $ sudo vi /etc/apparmor.d/tunables/aliasOutput:# -------------------------------- ---------------------------------- ## Bản quyền (C) 2010 Canonical Ltd. ## Chương trình này miễn phí phần mềm; bạn có thể phân phối lại nó và / hoặc # sửa đổi nó theo các điều khoản của phiên bản 2 của Giấy phép GNU General Public # do Tổ chức Phần mềm Tự do xuất bản. ## ------------------ ------------------------------------------------ # Bí danh các quy tắc có thể được sử dụng để viết lại các đường dẫn và được thực hiện sau khi phân giải # biến. Ví dụ:nếu '/ usr' nằm trên phương tiện di động:# alias / usr / -> / mnt / usr /, ## Hoặc nếu cơ sở dữ liệu mysql được lưu trữ trong / home:# alias / var / lib / mysql / -> / home / mysql /, alias / var / lib / mysql / -> / mnt / data_vol / mysql 

Sau khi tệp được chỉnh sửa, chúng tôi cần khởi động lại ứng dụng.

Dưới đây là lệnh khởi động lại ứng dụng.

Vì chúng tôi đã thay đổi thư mục dữ liệu mặc định, chúng tôi cần chạy lệnh dưới đây, lệnh này sẽ tạo cấu trúc thư mục thư mục tối thiểu để vượt qua các môi trường tập lệnh.

$ sudo mkdir / var / lib / mysql / mysql –p

Bây giờ chúng ta sẽ khởi động lại các dịch vụ mysql.

 $ sudo systemctl start mysql 

Bây giờ chúng ta sẽ kiểm tra trạng thái của các dịch vụ MySQL bằng lệnh dưới đây

 $ sudo systemctl status mysqlOutput:mysql.service - MySQL Community Server Loaded:đã tải (/lib/systemd/system/mysql.service; đã kích hoạt; đặt trước của nhà cung cấp:đã kích hoạt) Hoạt động:hoạt động (đang chạy) kể từ Thứ Hai 2016-09- 12 14:17:27 IST; 23 giây trước Quy trình:18481 ExecStartPost =/ usr / share / mysql / mysql-systemd-start post (code =exited, status =0 / SUCC Process:18477 ExecStartPre =/ usr / share / mysql / mysql-systemd-start pre (code =thoát, trạng thái =0 / SUCCES PID chính:18480 (mysqld) Nhiệm vụ:28 (giới hạn:512) Bộ nhớ:137.3M CPU:329ms Nhóm:/system.slice/mysql.service └─18480 / usr / sbin / mysqldSep 12 14 :17:26 ubuntu-16 systemd [1]:Khởi động MySQL Community Server ... 12 tháng 9 14:17:27 ubuntu-16 systemd [1]:Khởi động MySQL Community Server. 

Để đảm bảo rằng thư mục dữ liệu mới được thay đổi, chúng tôi sẽ chạy lệnh dưới đây

 $ mysql -uroot -pOutput:Nhập mật khẩu:Chào mừng bạn đến với màn hình MySQL. Các lệnh kết thúc bằng; hoặc \ g Id kết nối MySQL của bạn là phiên bản 3Server:5.7.13-0ubuntu0.16.04.2 (Ubuntu) Bản quyền (c) 2000, 2016, Oracle và / hoặc các chi nhánh của nó. Mọi quyền được bảo lưu.Oracle là thương hiệu đã đăng ký của Oracle Corporation và / hoặc các chi nhánh của nó. Các tên khác có thể là thương hiệu của các chủ sở hữu tương ứng của chúng. hoặc '\ h' để được trợ giúp. Gõ '\ c' để xóa câu lệnh nhập hiện tại.mysql> chọn @@ datadir + ---------------------- + | @@ datadir | + ---------------------- + | / mnt / data_vol / mysql / | + ----------------- + 1 hàng trong bộ (0,00 giây) mysql> 

Khi chúng tôi xác nhận rằng thư mục dữ liệu đã thay đổi, chúng tôi sẽ xóa thư mục dữ liệu mặc định tại / var / lib / mysql_backup, dưới đây là lệnh xóa thư mục cơ sở dữ liệu cũ.

 $ sudo rm –rf / var / lib / mysql_backup 

Trong cấu hình và các bước ở trên, chúng ta đã học cách di chuyển thư mục dữ liệu MySQL đến vị trí mới, điều này sẽ giúp chúng ta bảo mật hoặc lưu trữ nhiều dữ liệu hơn đến một vị trí khác.