Thay đổi đường dẫn mặc định cho file database

Ở bài trước chúng ta đã biết cách thay đổi đường dẫn thư mục web root (htdocs,www), bài hôm nay mình xin hướng dẫn các bạn cách đổi dường dẫn thư mục chứa mysql database của web server mình lấy xampp làm ví dụ.
Mặc định các file cơ sở dữ liệu chứa ở C:\xampp\mysql\data trong thư mục cài xampp.

Bạn muốn XAMPP làm việc với các file database chứa ở thư mục khác, ví dụ: d:/xampp_database
để tránh trường hơp lỗi win hoặc nâng cấp xampp thì dữ liệu của người dùng sẽ bị mất, như web root và mysql database.

Cũng tương tự như cách đổi thư mục web root của xampp bạn đã học ở bài trước. Mở file “C:\XAMPP\mysql\bin\my.ini” với text editor, Tìm chuỗi “C:/xampp/mysql/data” chuỗi này xuất hiện ở các dòng: 33,139,141,
->sửa lại thư mục của bạn. Thư mục này về sau sẽ là nơi chứa cơ sở dữ liệu.

Backup lại cơ sở dữ liệu cũ sang folder mới.

Copy toàn bộ các file ở C:/xampp/mysql/data sang thư mục mới bạn chỉ định.

hosting miễn phí | hosting giá rẻ | hosting trọn đời | 23webhost

Chú ý: Sau khi sửa đổi lưu file lại và phải tắt dịch vụ mysql.exe đi, rồi chạy lại xampp mới thấy kết quả.
Chúc bạn thành công.

Nếu bạn thấy bài viết này hữu ích, hãy chia sẻ với bạn bè bằng cách nhấn nút chia sẻ ở bên dưới. Theo dõi chúng tôi trên Twitter và Facebook

Khi làm việc với Mysql bản thân tôi gặp một vấn đề là mong muốn thay đổi vị trí lưu data(Data đựoc định nghĩa ở đây là: Database).

Nguyên nhân:

Tại sao bạn muốn thay đổi vị trí lưu trữ dữ liệu mặc định của mysql

  1. Bạn muốn xác định một thư mục cá nhân hoặc một folder khác trong ổ cứng làm nhiệm vụ chưa data thay vì mặc định là folder(/var/lib/mysql)
  2. Khi một database của bạn bị hỏng, dẫn tới không thể khởi động đựoc services mysql.
  3. Bạn sử dụng docker.
  4. Bạn muốn backup một database trước khi xóa tất cả mọi thứ liên quan tới mysql.

Thực hiện

Notes: Hành động của mình dựa trên conifg mysql 5.6 và server linux 14.04 vì vậy với các version khác có thể có sai khác

/etc/init.d/mysql stop
  1. Backup folder /var/lib/mysql sang một vị trí an toàn
mv /var/lib/mysql /backup_folder/ mkdir /new_folder_mysql/
  1. phần quyền cho folder mới giống với folder cũ
chown --reference=/backup_folder /new_folder_mysql chmod --reference=/backup_folder /new_folder_mysql
  1. Copy file mặc định của mysql
cp -rp /backup_folder/auto.cnf /new_folder_mysql cp -rp /backup_folder/debian-5.6.flag /new_folder_mysql cp -rp /backup_folder/master.info /new_folder_mysql cp -rp /backup_folder/mysql /new_folder_mysql cp -rp /backup_folder/ibdata1 /new_folder_mysql cp -rp /backup_folder/mysql_upgrade_info /new_folder_mysql cp -rp /backup_folder/performance_schema /new_folder_mysql
  1. Thay đổi datadir của mysql

Trong file: /etc/mysql/my.cnf thay đổi

datadir = /var/lib/mysql

=>

datadir = /new_folder_mysql /etc/init.d/mysql start

Rủi ro

Khi thực hiện các bước trên, bạn có thể gặp các vấn đề như

  1. Không khởi động đựơc mysql. Tuy nhiên hãy bình tính xem log của service mysql trong folder (/var/log/mysql/error.log hoặc /var/log/syslog).
  2. Lo sợ mất data hoặc không truy cập lại đựoc data cũ. (Bạn đã có một folder /backup_folder vì vậy hãy tự tin thực hiện công việc mà không cần sợ việc này).

Kết Luận

Chúc bạn may mắn khi config mysql, tuy nhiên với mỗi version có thể khác nhau, vì vậy hãy config trước dưới local và tạo môi trường giống với production để config chúng.

Bạn biết rằng việc lưu trữ Data file .MDF và Log file .LDF trên những đĩa cứng khác nhau sẽ giúp nâng cao hiệu năng truy xuất dữ liệu của SQL Server. Đồng thời giúp tăng cơ hội phục hồi về thời điểm ngay trước khi sự cố xảy ra (xem thêm ở bài viết 2 lý do bạn nên lưu trữ Data file và Log file trên những đĩa cứng khác nhau).

SQL Server của bạn vừa được gắn thêm disk mới (hoặc được cấp LUN mới trên SAN) và bạn muốn tiến hành di dời Log file sang thư mục mới (trên disk mới) để đạt được 2 mục đích trên. Nhưng bạn lo lắng không biết rằng thao tác di dời Log file có phức tạp, có gây lỗi đến database không?

Thực tế thao tác này rất đơn giản, khả năng bị lỗi hầu như không có. Bài viết bên dưới hướng dẫn bạn các bước tiến hành.

Chuẩn bị

Dù đơn giản nhưng bạn cũng cần các bước chuẩn bị sau để đảm bảo quá trình di dời Log file không gặp trở ngại nào:

  • Xem đường dẫn Data file và Log file của database cần di dời (tránh nhầm lẫn với file của database khác)
  • Kiểm tra vùng lưu trữ mới có đủ dung lượng chứa Log file
  • Xem xét thời điểm tiến hành để tránh ảnh hưởng end-user sử dụng các ứng dụng truy cập database (database không thể sử dụng trong quá trình di dời)

Để xem đường dẫn Data file và Log file, trong SQL Server Management Studio (SSMS), bạn chọn database > Properties > Files > Ở mục Database files, bạn xem giá trị PathFile Name để biết được đường dẫn vị trí Data file và Log file của database cần di dời.

Thay đổi đường dẫn mặc định cho file database

Với T-SQL, bạn sử dụng stored procedure sp_helpfile để xem vị trí 2 file này:

USE zBackupDemoDB
GO
sp_helpfile
GO

Các bước tiến hành

1. Detach database

Trong giao diện SSMS, bạn sử dụng chức năng Detach để detach database.

Thay đổi đường dẫn mặc định cho file database

Nếu giá trị mục Status là No Ready, nhiều khả năng do vẫn còn connection đang kết nối đến database. Bạn click vào hyperlink ở mục Message để xem thông báo lỗi chi tiết.

Thay đổi đường dẫn mặc định cho file database

Nếu nguyên nhân do còn kết nối đến database, bạn chọn Drop Connection để SQL Server ngắt các kết nối đến database trước khi detach.

Thay đổi đường dẫn mặc định cho file database

2. Di dời Log file sang thư mục mới

Trong Windows Explorer, bạn di dời Log file sang thư mục mới.

Thay đổi đường dẫn mặc định cho file database

3. Attach lại database

Bạn attach lại database từ Data file (.MDF).  Tuy nhiên, vì lúc này Log file đã được di dời sang đường dẫn khác nên SQL Server không tìm thấy Log file (thông báo “Not Found” ở mục Message).

Bạn cần browse chọn Log file ở đường dẫn mới di dời đến.

Thay đổi đường dẫn mặc định cho file database

Lưu ý:  Nếu mục Message không có thông báo “Not Found”, có thể do Log file ở thư mục cũ vẫn còn tồn tại. Vì thế, bạn cần browse và chọn Log file ở thư mục mới.

Xem thêm bài viết liên quan:

Có thể vì lý do nào đó bạn muốn phục hồi database thành tên khác và lưu trữ dữ liệu (Data file, Log file) ở thư mục khác so với trước đây. Chẳng hạn:

  • Bạn muốn tạo một database mới (từ bản sao lưu đang có) phục vụ cho mục đích testing, reporting
  • Bạn muốn đổi tên database vì tên cũ không phù hợp với chuẩn đặt tên bạn mới thiết lập cho database SQL Server
  • Bạn muốn thay đổi vị trí lưu Data file và Log file phù hợp với cấu trúc file system bạn mới thiết lâp. VD: Trước đây, cả Data file và Log file đều được lưu trong thư mục DATA ở đường dẫn cài đặt mặc định của SQL Server. Nay bạn muốn lưu Data file tại D:\SQLDataFiles, Log file tại E:\SQLLogFiles

SQL Server cho phép bạn tiến hành các thao tác này khá dễ dàng.

Phục hồi database với tên khác

Phục hồi database thành một tên khác cũng đơn giản như thao tác rename database trong SQL Server. Bạn chỉ cần thực hiện lệnh RESTORE DATABASE với tên mới muốn đặt.

RESTORE DATABASE zBackupLabDB_New
FROM DISK = ‘C:\SQLRestoreData\zBackupLabDB_Full.bak’
GO

Tuy nhiên, khi phục hồi với tên khác, bạn cần lưu ý điểm sau: Việc đổi tên database hoàn toàn không liên quan đến Logical Name và Physical Name của database (VD: Data file có Logical Name là zBackupLabDB_Data, Physical Name là C:\OldSQLFiles\zBackupLabDB_Data.MDF). Do đó, nếu database cũ vẫn đang hoạt động thì có thể Data file và Log file của database được phục hồi sẽ bị trùng với database cũ. Nên khi phục hồi SQL Server sẽ báo lỗi như bên dưới:

Msg 1834, Level 16, State 1, Line 1
The file ‘C:\SQLServerData\zBackupLabDB_Data.mdf’ cannot be overwritten. It is being used by database ‘zBackupLabDB’.
Msg 3156, Level 16, State 4, Line 1
File ‘zBackupLabDB_Data’ cannot be restored to ‘C:\SQLServerData\zBackupLabDB_Data.mdf’. Use WITH MOVE to identify a valid location for the file.

Với lỗi trên, bạn cần dùng tùy chọn MOVE để thay đổi tên file của Physical Name, hoặc di chuyển hoàn toàn Physical Name sang thư mục khác. Hoặc xóa database cũ đang hoạt động (nếu có thể ^_^).

Để xem thông tin Logical Name và Physical Name của database cũ (đang hoạt động trong SQL Server), bạn thực thi stored procedure sp_helpfile như bên dưới:

USE zBackupLabDB
GO
sp_helpfile
GO

Để xem thông tin Logical Name và Physical Name của database đang có trong bản backup (là database bạn đang muốn phục hồi với tên mới), bạn dùng lệnh RESTORE FILELISTONLY như bên dưới:

RESTORE FILELISTONLY
FROM DISK = ‘C:\SQLRestoreData\zBackupLabDB_Full.bak’
GO

Phục hồi database và thay đổi thư mục lưu dữ liệu

Để thay đổi thư mục lưu trữ database (so với thư mục trước đó khi database được sao lưu), bạn thêm tùy chọn MOVE vào lệnh RESTORE DATABASE để SQL Server phục ho6if Data file và Log file vào đường dẫn mới bạn chỉ định. Để biết được Logical Name của Data file và Log file, bạn dùng lệnh RESTORE FILELISTONLY vừa trình bày ở trên.

RESTORE DATABASE zBackupLabDB_New
FROM DISK = ‘C:\SQLRestoreData\zBackupLabDB_Full.bak’
WITH MOVE ‘zBackupLabDB_Data’ TO ‘D:\SQLDataFiles\zBackupLabDB_Data.MDF’,
MOVE ‘zBackupLabDB_Log’ TO ‘D:\SQLLogFiles\zBackupLabDB_Log.LDF’
GO

Có 2 lưu ý sau:

  • Với Physical Name, bạn có thể thay đổi cả đường dẫn thư mục lẫn tên file của Data file và Log file. Tuy nhiên, bạn không thể thay đổi Logical Name.
  • Nếu chỉ cần thay đổi thư mục lưu trữ của Data file (hoặc Log file), bạn chỉ cần dùng tùy chọn MOVE với Logical Name và Physical Name tương ứng của Data file (hoặc Log file). Không bắt buộc bạn phải MOVE cả Data file và Log file.

Lưu ý: Nếu cần phục hồi thêm các bản sao lưu Differential/Transaction Log sau khi phục hồi từ bản sao lưu Full, bạn cần thêm tùy chọn NOVECOVERY khi thực thi lệnh RESTORE DATABASE.

Xem thêm bài viết liên quan: