MySQL với CentOS
MySQL là hệ quản trị cơ sở dữ liệu 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. Bạn có thể tìm được rất nhiều công cụ và cộng đồng trợ giúp khi cần, đơn giản bởi MySQL hoàn toàn miễn phí và được sử dụng rộng rãi. Bài viết này sẽ hướng dẫn cơ bản các bạn cách cài ...
MySQL là hệ quản trị cơ sở dữ liệu 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. Bạn có thể tìm được rất nhiều công cụ và cộng đồng trợ giúp khi cần, đơn giản bởi MySQL hoàn toàn miễn phí và được sử dụng rộng rãi. Bài viết này sẽ hướng dẫn cơ bản các bạn cách cài đặt MySQL trên CentOS.
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:
sudo yum install mysql-server sudo /sbin/service mysqld start
Sau đó chạy tiếp lệnh:
sudo /usr/bin/mysql_secure_installation
Nhấn Enter để nhập mật khẩu cho user root khi được hỏi. Liên quan đến vấn đề bảo mật cho nên MySQL sẽ hỏi liên tục. Bạn chỉ cần ấn y và enter cho tất cả các câu hỏi đó. Theo thứ tự các câu hỏi sẽ là:
- Nhập mật khẩu root
- Xóa user ẩn danh
- Khóa yêu cầu truy cập từ xa đối với root
- 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:
iptables -I INPUT -p tcp --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -I OUTPUT -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT iptables-save | sudo tee /etc/sysconfig/iptables service iptables restart
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.
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:
sudo /sbin/service mysqld start
Nếu MySQL đang chạy sẽ có thông báo được đưa ra.
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:
sudo chkconfig mysqld on
Đ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:
/usr/bin/mysql -u root -p
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.
Đặ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:
/usr/bin/mysqladmin -u root password 'new-password' /usr/bin/mysqladmin -u root --password='new-password' -h hostname-of-your-server 'new-password'
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:
SELECT User, Host, Password FROM mysql.user;
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:
mysql> SELECT User, Host, Password -> FROM mysql.user;
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:
SELECT User, Host, Password FROM mysql.user; +------------------+-----------+-------------------------------------------+ | User | Host | Password | +------------------+-----------+-------------------------------------------+ | root | localhost | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 | | root | demohost | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 | | root | 127.0.0.1 | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 | | | % | | +------------------+-----------+-------------------------------------------+
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:
CREATE DATABASE demodb;
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:
SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | demodb | | mysql | +--------------------+ 3 rows in set (0.00 sec)
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:
CREATE USER 'demouser'@'localhost' IDENTIFIED BY 'demopassword';
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:
GRANT ALL PRIVILEGES ON demodb.* to demouser@localhost;
Sau đó nạp lại giá trị phân quyền để cập nhật thay đổi.
FLUSH PRIVILEGES;
Để kiểm tra quyền đã cấp, chạy lệnh sau:
SHOW GRANTS FOR 'demouser'@'localhost';
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é!