Những phiền phức khi dùng Mac để học IT
Lần này sẽ nói về SSMS và SQL
Helloooooo, lâu lắm rồi mới quay về đây đó, không phải quên mà tại… lười vl, văn dở không biết viết ;-;
Vấn đề 1
Hôm nay tui sẽ nói về một cái vấn đề phiền phức của tui khi học và cài các phần mềm liên quan trên MacOS. Đó chính là cài Microsoft SQL Server cũng như SQL Server Management Studio (SSMS).
Nếu bạn được học MySQL hay PostgreSQL thì sẽ không có vấn đề gì, nhưng mà vấn đề là nếu bạn học SQL Server trên Microsoft SQL Server cũng như SQL Server Management Studio (SSMS) thì nó sẽ khá là phiền phức vì 2 phần mềm này phổ biến và thường được sử dụng để giảng dạy nhất để học SQL đều chỉ cài được trên Window => Mac nhót ;-;
Vì tôi dùng Mac nên phải nghĩ đến chuyện tìm cách xử lí trường hợp này, như cách 1 năm trước tôi phải sử dụng Virtual Machine để cài Visual Studio 2022 để code giao diện console vậy ;-;
Cách giải quyết
Một cách mà tui đang sử dụng đó chính là sử dụng Docker + Azure Data Studio trên Mac
Docker là một công cụ cho phép bạn chạy các ứng dụng trong các container – những “hộp” nhỏ gọn chứa mọi thứ cần thiết để phần mềm hoạt động, từ hệ điều hành đến các thư viện. Trong trường hợp này thì Docker sẽ host Microsoft SQL Server thông qua container
Azure Data Studio là một công cụ quản lý cơ sở dữ liệu đa nền tảng, có thể thay thế cho SQL Server Management Studio (SSMS). Nó hỗ trợ MacOS và có giao diện thân thiện, dễ sử dụng.
Cách cài đặt
- Cài đặt Docker:
- Tải và cài đặt Docker Desktop từ trang chủ Docker.
- Sau khi cài đặt, đảm bảo Docker đã hoạt động bằng cách chạy lệnh
docker --version
trong terminal.
1
docker --version
- Tải Microsoft SQL Server Docker Image:
Chạy lệnh sau trong terminal để tải image:
1
docker pull mcr.microsoft.com/mssql/server:2019-latest
- Chạy SQL Server trong Docker:
Tạo và chạy container với lệnh:
1
docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=YourPassword123' -p 1433:1433 --name sqlserver -d mcr.microsoft.com/mssql/server:2019-latest
- Thay
YourPassword123
bằng mật khẩu bạn muốn đặt cho tài khoảnsa
. Bạn phải ghi nhớ mật khẩu này để sau này còn sử dụng. Một số yêu cầu về mật khẩu như: ít nhất phải có 8 kí tự, phải có chữ cái in hoa, in thường và kí tự đặc biệt,…
- Sau khi cài xong, bạn có thể mở docker lên và check phần container xem có như hình không
Ấn vào nút run bên dưới chữ action (nếu bạn thấy nó chuyển từ tam giác sang hình vuông thì là chạy rồi đó) để nó chạy container, sau đó sẽ chuyển qua bước kế tiếp.
Bạn cũng có thể check bằng lệnh
docker ps
trong terminal, nó sẽ liệt kê ra tất cả các container đang chạy.
1
docker ps
- Cài đặt Azure Data Studio:
- Tải Azure Data Studio từ trang chủ Microsoft và cài đặt trên MacOS.
- Sau đó mở Azure Data Studio, bạn sẽ thấy một cửa sổ như thế này:
- Kết nối đến SQL Server bằng thông tin:
- Server:
localhost
- Authentication:
SQL Login
- Username:
sa
- Password: Mật khẩu bạn đã đặt ở bước setup docker (chỗ set password YourPassword123 ở trên).
- Server:
Sau đó nhấn vào connect, bạn sẽ kết nối được vào server như hình
Vậy là bạn đã kết nối thành công với SQL server rồi, giờ bạn có thể tạo file .sql để bắt đầu viết truy vấn và tạo database.
- Nếu bạn không dùng nữa, hãy tắt sql server đi bằng cách ấn lại dấu hình vuông bên dưới action để tắt sql server đi, khi nào cần hãy mở lại chúng.
Vấn đề 2
Yes sir, mọi chuyện đã có thể yên ắng và bình thường cho đến 2 tuần sau, tui học môn Thực hành CSDL.
Trường tui thì sẽ có 5 tiết lý thuyết môn CSDL mỗi tuần và 2.5 tiết thực hành CSDL, và môn thực hành này sẽ bắt đầu sau môn lí thuyết 2 tuần. Vâng, và môn thực hành này, thầy bắt chúng toi sẽ tạo bảng bằng tool, cũng như xuất 2 file là .mdf và .ldf ra.
Trong Microsoft SQL Server, hai loại file .mdf và .ldf đóng vai trò quan trọng trong việc lưu trữ và quản lý cơ sở dữ liệu. MDF là viết tắt cuả master data file
, đây là nơi lưu trữ toàn bộ nội dung của cơ sở dữ liệu. Bạn chỉ cần có file này, sau đó vào SSMS và detach
chúng, bạn sẽ thấy toàn bộ dữ liệu. Đây chính là cách nộp bài của thầy dạy thực hành của tui để ổng mang 2 file này về xong detach ra để check cả database đã nhập =))). Ngoài file .sql chứa truy vấn ra thì phải nộp kèm cả file .mdf và .ldf nữa. LDF là log data file
, file này chứa nhật ký hoạt động của cơ sở dữ liệu, khá là quan trọng trong việc rollback hoặc recovery dữ liệu.
Đây là cấu trúc nộp bài tập của tụi tui trong tiết thực hành. Thật ra tất cả các quá trình lấy file này, detach, tạo bảng, … thì thầy tui đều hướng dẫn chi tiết và đầy đủ hết. Nhưng mà là… trên SSMS của Windows ;-;
Vậy giờ sao ;-; không lẽ nộp bài phải nhờ lap của thằng bạn hay chạy ra net cài sql server để làm ???
Thật ra 2 cách trên cũng khả thi đấy chứ, nhưng mà cái gì khó thì để máy ảo lo =))) (thật ra đây không phải lần đầu, 1 năm trước tui cũng phải cài Microsoft Visual Studio - VS tím á để code console rồi ;-;) tui quyết định cài lên máy ảo để làm bài (dù dung lượng máy tôi đang khá hẹp hòi và cái SSMS cũng chả nhẹ mấy)
Trước đó tui đã cài docker cũng như host sql server thông qua container rồi, nên chỉ cần cài SSMS bên máy ảo thôi, không cần cài thêm Microsoft SQL Server thêm nữa, xong mình sẽ kết nối SSMS bên máy ảo với container bên máy thật =))))
Vai ca noi, nghe rờm rà chết luôn =))) chuyển máy ảo với máy thật nghe lằng nhằng đấy =))
Nhưng mà nó hoạt động nhé, xem qua nhé.
Cách cài đặt
- Cài SSMS trên máy ảo Win
Bạn mở máy ảo Win lên và cài SSMS về: link tải
Các bạn cài xong sẽ thấy 1 cửa sổ yêu cầu kết nối đến sql server như mình:
Lúc bạn lần đầu kết nối thì nó sẽ không có sẵn mấy cái password hay server name như mình đâu =))) Như vậy là cài xong rồi, giờ chuyển qua bước kế tiếp nhé.
- Kiểm tra IP, Port cũng như Server
- Mở terminal lên và gõ vào terminal:
ifconfig
1
ifconfig en0
Nó sẽ trả về ip đường mạng của bạn (WiFi hoặc Ethernet) nằm ngay dòng inet, copy nó ra nhé.
- Kiểm tra Port: port ánh xạ mặc định của sql server trên docker là 1433, bạn phải đảm bảo rằng port này không bị chặn trên đường mạng. Bạn có thể tạm thời tắt firewall đi để đảm bảo.
- Khởi động Docker Container: chạy container thôi.
- Mở terminal lên và gõ vào terminal:
- Kết nối với SSMS
- Quay lại giao diện SSMS lúc nãy, bắt đầu nhập:
- Server name: cú pháp
{IP đường mạng bạn đang sử dụng, port}
. Ví dụ:192.168.1.1, 1433
. IP đường mạng bạn đang sử dụng là cái lúc nãy đã lấy ra ở trên đó, còn port sẽ là 1433. - Authentication:
SQL Server Authentication
. - Login:
sa
. - Password: Mật khẩu bạn đã đặt khi tạo container (cái ở trên nãy setup luôn đó).
- Server name: cú pháp
- Sau đó, click xuống phần option để mở rộng ra.
Click chọn phần
Trust Server Certificate
Nhấn “Connect”. Nếu mọi thứ đúng, bạn sẽ kết nối thành công với SQL Server trên Docker từ máy ảo.
- Quay lại giao diện SSMS lúc nãy, bắt đầu nhập:
Vậy là thành công để kết nối rồi đó, rườm rà vcl chưa =)))
Nhưng mà chưa xong đâu =))) nó vẫn chưa dừng lại.
Lấy file .mdf và .ldf
Lúc tạo mới 1 database để làm bài tập, các bạn hãy để ý phần path:
Đây là nơi lưu của 2 file .mdf và .ldf ở trên mình có nói. Theo lý thuyết, bạn sẽ change cái path này ra thư mục khác để lấy cho dễ, và vấn đề ở đây =)))
Vâng, đây là folder của Docker container, không phải folder của máy thật =)). Vì vậy, bạn không thể trực tiếp truy cập vào các file .mdf và .ldf từ máy thật hay thay đổi ra ổ C ổ D trên máy ảo được. Vì vậy, bạn phải truy cập thẳng vào trong container để lấy file ra =))
- Xác định vị trí file trong container:
Mở terminal trong docker (góc dưới bên phải) và chạy lệnh sau để truy cập vào container:
1
docker exec -it {your_container_id} bin/bash
- Thay {your_container_id} bằng container id của bạn (trong phần container của azuresqledge ấy, copy mã ấy). Và container đó phải đang chạy thì bạn mới truy cập vào được.
- Nếu thành công, bạn sẽ thấy trong terminal của docker hiện ra như này:
1
mssql@{your_container_id}:/$
Sau khi vào container, bạn có thể truy cập vào thư mục chứa 2 file .mdf và .ldf như sau (kiểm tra bằng ls):
1 2
cd /var/opt/mssql/data ls
- Sao chép file từ container ra máy thật:
Sau khi đã truy cập vào trong folder chứa 2 file .mdf và .ldf trên. Bạn phải xác định tên của 2 file đó (thường là nó sẽ trung với tên của database lúc bạn tạo). Ví dụ 2 file của mình lấy sẽ là
QuanLyBaiHat.mdf
vàQuanLyBaiHat_log.ldf
.- Sau khi xác định xong, thoát ra ngoài bằng lệnh:
exit
. Sử dụng lệnh
docker cp
để sao chép file từ container ra máy thật. Ví dụ:1 2
docker cp {your_container_id}:/var/opt/mssql/data/{Name_of_file}.mdf {/path/to/your/local/folder/{Name_of_file}.mdf} docker cp {your_container_id}:/var/opt/mssql/data/{Name_of_file}_log.ldf {/path/to/your/local/folder/{Name_of_file}_log.mdf}
- Thay
/path/to/your/local/folder
bằng đường dẫn thư mục trên máy thật nơi bạn muốn lưu file. - Thay
{your_container_id}
bằng container id của bạn. Thay
{Name_of_file}
là tên file bạn đã xác định là lấy ở trên.- Ví dụ như của mình:
- Bạn vào thư mục đã setup lưu ở trên để check nhé.
Vậy là xong! Lằng nhằng vãi =))) Nhưng mà nhờ vậy mình cũng quậy được hơn một tí chứ mình thấy có không giúp ích gì nhiều cả ;-; Túm lại là Mac vẫn có thể xử lí các trường hợp khó khăn này nhưng với điều kiện bạn phải đủ ram và dung lượng =)))) Nên đi học mà dùng Mac thì khổ như thế này đấy =)))
Mình nghĩ chắc cũng sẽ có bạn thắc mắc tại sao không cài luôn Microsort SQL Server bên máy ảo luôn cho tiện thì tại vì mình có cài sẳn Docker bên máy thật rồi + tương lai sẽ còn sử dụng Docker dài dài + tiết kiệm dung lượng nên mình quyết định dùng Docker dù méo biết sài (Với lại mình nghe tụi bạn mình kể là cài SSMS với Microsort SQL Server xong kết nối toàn lỗi, nhma mình kết nối qua docker đúng 1 lần là chạy luôn giữa máy ảo và máy thật =))))).
Mình sẽ update thêm nếu có gì lằng nhằng tiếp theo vô cái shjtpost này. Cuối cùng thì cảm ơn bạn vì đã đọc tới đây nhé.
Cừn
24/03/2025