0

Hướng dẫn cài đặt MySQL trên centOS

MySQL là hệ quản trị cơ sở dữ liệu quan hệ mã nguồn mở. SQL là ngôn ngữ các ứng dụng dùng để truy vấn và lưu trữ dữ liệu, gọi là: Structured Query Language – ngôn ngữ truy vấn có cấu trúc. MySQL miễn phí và được sử dụng rộng rãi, nghĩa là bạn có thể tìm thấy rất nhiều phần mềm hỗ trợ, công cụ và cộng đồng trợ giúp khi cần. MySQL là một sự lựa chọn an toàn nếu bạn cần một cơ sở dữ liệu nhưng thực sự không biết nhiều về tất cả các cấu hình của Cơ Sở Dữ Liệu.

MySQL

Bài viết này mô tả cơ bản cài đặt MySQL trên CentOS Linux, vừa đủ để bạn bắt đầu. Chú ý có thể bạn cần cài đặt thêm một số gói khác để sử dụng MySQL, ví dụ như PHP extension PDO. Kiểm tra document của phần mềm để biết chi tiết.

level_boy Cài đặt MySQL

Cài đặt MySQL thông qua CentOS package manager bằng cách chạy cách dòng lệnh sau:

Sau đó chạy tiếp lệnh bên dưới:

Nhấn enter để nhập mật khẩu cho user root khi được hỏi (vì mặc định root mysql có password rỗng). Vì một số lý do bảo mật, MySQL server sẽ hỏi liên tục, bạn chỉ cần trả lời yes (gõ “y” rồi enter) cho tất cả các câu hỏi đó. Theo thứ tự câu hỏi sẽ là “nhập mật khẩu root”, xóa user ẩn danh, khóa truy cập từ xa đối với root, xóa database test, xóa database test, tải lại danh sách tài khoản.

Cho phép truy cập database từ máy khác

Nếu bạn đã kích hoạt iptable và muốn kết nối đến MySQL từ một máy khác, bạn cần phải mở port trên firewall của server (port mặc định là 3306). Bạn không cần làm việc này nếu ứng dụng dùng MySQL chạy trên cùng một máy với SQL server.

Nếu cần mở port, bạn có thể sử dụng các rule sau cho iptable để mở port 3305:

Chú ý: Các rule iptables có thể thay đổi bằng cách edit trực tiếp trong file /etc/sysconfig/iptables , cú pháp tương tự hai dòng lệnh ở trên (không có iptables ở đầu). Nhưng tôi không khuyến khích vì file này được sinh ra tự động bởi iptable, do đó nó có thể bị ghi đè vào một lúc nào đó khi nghịch ngợm!

Chạy MySQL

Bây giờ MySQL đã cài xong, bạn có thể kiểm tra bằng cách chạy thử dòng lệnh:

Nếu MySQL đang chạy, bạn sẽ nhận được một thông báo nhỏ.

Tự khởi động khi mở máy

Để đảm bảo MySQL server sẽ tự khởi động khi bật máy, chạy lệnh sau:

Điều này đảm bảo centos sẽ khởi động MySQL server khi nó reboot.

MySQL shell

Có nhiều cách để làm việc với MySQL server, nhưng trong bài chỉ tập trung vào phương pháp cơ bản và tương thích nhất: dùng mysql shell. Trên terminal, chạy lệnh bên dưới để truy cập như root user:

Khi được hỏi mật khẩu, nhập vào mật khẩu bạn đã set khi cài đặt, nếu bạn chưa đặt mật khẩu, chỉ cần nhấn enter để nhập mật khẩu rỗng. Dấu nhắc mysql shell nên hiển thị như bên dưới:

Đặt mật khẩu cho root

Nếu bạn chỉ cài đặt MySQL server, còn tài khoản root trong MySQl vẫn chưa có password. Bạn có thể thay đổi bằng lệnh sau:

Tìm các  user trên server

Như đã nhắc đến ở phần trước, MySQL lưu giữ thông tin người dùng trong database của nó. Tên của database là “mysql”. Trong database, thông tin người dùng là một “table”, một tập dữ liệu, đặt tên là “User”. Nếu bạn muốn xem user nào có trên hệ thống, dùng lệnh MySQL:

Kết thúc câu truy vấn SQL với dấu chấm phẩy “;”

Tất cả các câu truy vấn đều kết thúc với dấu chấm phẩy. MySQL sẽ không xử lý truy vấn cho đến khi bạn gõ dấu chấm phẩy.

Điều này giúp cho bạn có thể chia nhỏ câu truy vấn phức tạp thành nhiều dòng để dễ đọc. Ví dụ,  lệnh tìm thông tin user ở trên cũng hoạt động trên mysql shell khi ta tách thành nhiều dòng:

Sau khi nhấn enter để xuống dòng, bạn nhảy qua dòng mới và có thể tiếp tục gõ. Ký hiệu > xách định rằng bạn đang ở giữa câu lệnh. Bạn có thể thể gõ dấu chấm phẩy bất cứ lúc nào để kết thúc việc gõ lệnh, dù bạn gõ ở cuối dòng hay quên gõ “;” mà đã xuống dòng, bạn vẫn có thể gõ “;” ở dòng mới và lúc này câu lệnh mới bắt đầu thực hiện.

User hosts

Ví dụ sau thể hiện output từ câu truy vấn ở trên:

Mỗi user liên kết với một host, chỉ định rõ host nào họ được phép kết nối. Tài khoản “root” trong ví dụ này được định nghĩa cho localhost. Thường bạn chỉ cần một user cho một host.

Nếu bạn đang chạy ứng dụng trên cùng máy với MySQL server thì có thể sử dụng địa chỉ “localhost”. Bất cứ user mới tạo nào cũng sẽ được gán “localhost” trong cột host của họ.

Nếu ứng dụng kết nối đến MySQL server chạy trên một máy khác, cột host sẽ chỉ định địa chỉ IP hoặc DNS hostname của máy client kết nối đến.

Một giá trị đặc biệt là host %, như bạn thấy ở trên bỏ trống phần user. Ký tự % là một ký tự đại diện cho “bất ký host nào”. Thường bạn không muốn sử dụng cái này vì nó kém an toàn.

Anonymous users

Trong output của ví dụ trên, dòng cuối có username và password rỗng. Đó chính là “anonymous user”. Khi client kết nối mà không có username, nó sẽ cố gắng kết nối bằng anonymous user.

Thường không ai muốn anonymous user cả, nhưng một số bản cài đặt MySQL lại tạo user này theo mặc định. Nếu thấy nó xuất hiện như ở trên, bạn có thể tự mình xóa user đó đi (tìm kiếm user bằng cặp dấu ”) hoặc đặt password cho nó.

Tạo database

Thông thường các ứng dụng sử dụng database sẽ không tự tạo database để sử dụng, mà người cài đặt cần cung cấp thông tin về database name, user và password để ứng dụng sử dụng. Vì nhiều lý do bảo mật, tài khoản sử dụng database sẽ chỉ được cấp quyền thao tác trên một database. Để tạo user, trong MySQL shell, gõ lệnh:

Database sẽ được tạo, bạn có thể kiểm tra bằng cách chạy truy vấn liệt kê danh sách tất cả các database trên server. Ví dụ bên dưới thể hiện câu truy vấn và dữ liệu xuất:

Thêm user trên MySQL server

Khi ứng dụng kết nối vào database với tài khoản root, nó sẽ có nhiều quyền hơn những gì nó cần. Có thể gây ảnh hưởng đến các database khác, của các ứng dụng khác. Do đó, bạn có thể tạo một user chỉ được phép truy cập vào một database. Lệnh tạo user trong mysql shell như sau:

 Bạn có thể kiểm tra user đã tạo hay chưa bằng cách chạy truy vấn user như ở trên:

Cấp quyền truy cập cho user

User vừa được tạo mới sẽ không có quyền gì. User có thể login vào MySQL, nhưng không thể tác động bất kỳ thay đổi nào lên database. Cấp quyền cho user truy cập đầy đủ vào database ‘demodb’ mới tạo bằng dòng lệnh sau:

Sau đó nạp lại giá trị phân quyền để cập nhật thay đổi.

Để kiểm tra quyền đã cấp, chạy lệnh sau:

MySQL trả về các dòng lệnh ở bên dưới để bạn sử dụng khi cần rebuild server. Từ khóa “USAGE on *.*” trong câu lệnh thứ nhất cơ bản có nghĩa là user mặc định sẽ không có quyền gì trên bất cứ thứ gì. Câu lệnh thứ hai ghi đè lệnh thứ nhất, cấp quyền chính xác cho database chỉ định trong từ khóa “TO”.

level normal Truất quyền thi đấu của user

Đôi khi bạn sẽ cần “rút”  quyền của user, trong một số trường hợp ví dụ như: bạn muốn cấp quyền ALL cho ‘demouser’@’localhost’ truy cập vào database ‘demodb’, nhưng bằng một cách huyền bí nào đó, bạn gõ nhầm thành cấp quyền ALL cho tất cả các database:

Ngay khi phát hiện ra lỗi lầm, bạn muốn làm gì đó để sửa sai. Cách dễ nhất là dùng lệnh REVOKE, theo sau là lệnh GRANT để cấp lại quyền chính xác:

Bây giờ, user của bạn đã có quyền đúng, do đó database server của bạn sẽ bảo mật hơn một chút. Thực ra cấp quyền ALL là một cách rất tệ, bạn nên tham khảo tài liệu chính chủ của MySQL để hiểu rõ về cách cấp quyền đúng đắn hơn là chỉ đơn giản dùng ALL.

Lời kết

Nếu bạn vừa tạo database và user, như vậy là đã xong rồi. Những kiến thức ở trên cũng chỉ cho bạn thấy những thiết đặt nền tảng cơ bản nhất mà thôi. Để hiểu sâu hơn về bảo mật cũng như vận hành hệ thống MySQL server ổn định, hãy đọc thêm các tài liệu của chính MySQL phát hành để nâng cao kiến thức nhé!

Hoàng Tựa

Yêu thích lập trình web và tạo ra những thứ đẹp đẽ.

Leave a Reply

Your email address will not be published. Required fields are marked *