Showing posts with label phpMyadmin. Show all posts
Showing posts with label phpMyadmin. Show all posts

June 22, 2015

MySQL Table says IN USE, but table will not repair in phpmyadmin.



From time to time mysql corrupts itself.  This can normally be fixed using the KB Article here: http://billing.handsonwebhosting.com/knowledgebase.php?action=displayarticle&id=194
Under some situations however, no matter how many times you run a REPAIR on the table, the table still returns IN USE and what's worse is that the system says the table is "already up to date".
If you have shell access, here's what to do;

cd /var/lib/mysql/DATABASE  (where DATABASE is the one you're trying to fix)

myisamchk --safe-recover TABLE  (where TABLE is the table you are tring to fix)

This will will repair the table in safemode, and SHOULD result in success.

June 12, 2015

Hướng dẫn cài đặt và bảo mật phpMyAdmin trên Ubuntu 12.04

phpMyAdmin là một phần mềm mã nguồn mở phổ biến trên nền web để quản lý MySQL.
Trước khi tiến hành cài đặt phpMyAdmin bạn cần cài đặt trước LAMP hoặc LEMP server trên Ubuntu.
Chúng ta có 2 cách để cài đặt phpMyAdmin là cài đặt thông qua package và chạy phpMyAdmin như một php script thông thường. Cách thứ 1 thì đơn giản hơn, trong khi cách thứ 2 thì tiết kiệm tài nguyên và bảo mật hơn rất nhiều.

1. Cài đặt phpMyAdmin package

Chạy lệnh sau
sudo apt-get install phpmyadmin
Trong quá trình cài đặt bạn cần lưu ý:
  1. Chọn Apache2 server
  2. Chọn Yes khi được hỏi Configure the database for phpmyadmin with dbconfig-common
  3. Nhập MySQL password khi được hỏi
  4. Nhập password để truy cập phpMyAdmin
Sau khi cài xong, thêm phpmyadmin vào cấu hình cài đặt Apache
sudo nano /etc/apache2/apache2.conf
Thêm dòng sau vào cuối
Include /etc/phpmyadmin/apache.conf
Khởi động lại apache
sudo service apache2 restart
Giờ bạn có thể truy cập vào phpMyAdmin thông qua link http://yourip/phpmyadmin rồi đó.

2. Cài đặt phpMyAdmin script

Cách này mình thường dùng vì 2 lí do:
  1. Chỉ khi nào chạy mới dùng đến bộ nhớ -> tiết kiệm tài nguyên server
  2. Có thể tùy biến đường dẫn phpmyadmin -> bảo mật hơn
Đầu tiên bạn cần chọn phiên bản muốn cài trong trang chủ phpMyAdmin
Copy đường dẫn trực tiếp với file extension là .tar.gz, ví dụ bản 4.1.4 là http://jaist.dl.sourceforge.net/project/phpmyadmin/phpMyAdmin/4.1.4/phpMyAdmin-4.1.4-all-languages.tar.gz
Vào thư mục www chứa nội dung website, chạy lệnh sau
wget http://jaist.dl.sourceforge.net/project/phpmyadmin/phpMyAdmin/4.1.4/phpMyAdmin-4.1.4-all-languages.tar.gz
Giải nén
tar -xzvf phpMyAdmin-4.1.4-all-languages.tar.gz
Xong bạn sẽ có folder phpMyAdmin-4.1.4-all-languages, để sử dụng bạn truy cập vào link http://ip/phpMyAdmin-4.1.4-all-languages. Tất nhiên bạn có thể đổi tên thành bất cứ cái nào bạn muốn để sử dụng và bảo mật hơn.

June 3, 2015

VPS căn bản [Phần 9] – Cài đặt MySQL & phpMyAdmin

Bạn đã có PHP trên VPS rồi nhưng ứng dụng đó chỉ cho phép bạn thực thi các file PHP mà thôi, chứ chưa thể cài được WordPress bởi vì bạn sẽ cần thêm một ứng dụng rất quan trọng nữa là MySQL để hỗ trợ lưu trữ database cho website WordPress mà bạn sẽ cài vào sắp tới.

I. Cách cài MySQL vào VPS

Cài MySQL cũng rất dễ, chúng ta cũng vẫn sẽ sử dụng Yum package để cài đặt. Bạn chạy lệnh dưới đây để cài MySQL:
01
sudo yum install mysql-server -y
Sau đó khởi động MySQL (tên service là mysqld):
01
sudo service mysqld start
Và nó sẽ hiện ra rất nhiều thông tin như thế này:
[thach@vpscanban ~]$ sudo service mysqld start
Initializing MySQL database: WARNING: The host 'vpscanban' could not be looked up with resolveip.
This probably means that your libc libraries are not 100 % compatible
with this binary MySQL version. The MySQL daemon, mysqld, should work
normally with the exception that host name resolving will not work.
This means that you should use IP addresses instead of hostnames
when specifying MySQL privileges !
Installing MySQL system tables...
OK
Filling help tables...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h vpscanban password 'new-password'

Alternatively you can run:
/usr/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default. This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:
cd /usr ; /usr/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd /usr/mysql-test ; perl mysql-test-run.pl

Please report any problems at http://bugs.mysql.com/

[OK ]
Starting mysqld: [OK ]

Điều này có nghĩa là chúng ta chỉ mới cài MySQL vào nhưng chưa thiết lập cho nó, vả lại chúng ta còn thiếu một thông tin cực kỳ quan trọng đó là MySQL Root Password. MySQL Root Password là mật khẩu cho database user tên là root để đăng nhập vào MySQL.
Bạn đừng nhầm lẫn giữa root password cho MySQL và root password của VPS, hai cái này hoàn toàn khác nhau.
Để thiết lập, bạn chạy đoạn sau:
01
sudo /usr/bin/mysql_secure_installation
Đầu tiên là nó sẽ hỏi:
Enter current password for root (enter for none):
Do bạn chưa thiết lập mật khẩu root cho MySQL nên ấn Enter mà không cần nhập gì cả.
Tiếp tục nó sẽ hỏi bạn muốn thiết lập mật khẩu cho user root hay không, gõ y và enter.
Set root password? [Y/n] y
Cuối cùng nó sẽ hỏi bạn thêm 4 câu hỏi nữa, cứ ấn Y rồi Enter hết.
By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
... Success!

Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
... Success!

By default, MySQL comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
... Success!

Cleaning up...

All done! If you've completed all of the above steps, your MySQL
installation should now be secure.

Thanks for using MySQL
Ok, hãy khởi động lại MySQL nhé.
01
sudo service mysqld restart
Bây giờ bạn đã có một MySQL Server trên VPS và đã có mật khẩu root của MySQL rồi. Hãy thử đăng nhập vào MySQL với lệnh sau:
01
sudo mysql -u root -p123456
Trong đó, root là tên user root và 123456 là mật khẩu root của MySQL mà bạn vừa thiết lập.
Nếu nó hiện ra thế này là thành công:
Server version: 5.5.39 MySQL Community Server (GPL) by Remi

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
Gõ exit; để thoát ra.

II. Tạo database và database user trên VPS

Chắc các bạn cũng đã biết là khi cài WordPress trên Shared Host, chúng ta phải tạo cho nó một cái database đúng không? Ở đây cũng vậy, chúng ta cũng phải cần tạo ra một database và một database user để kết nối vào WordPress để lưu trữ dữ liệu.
Mặc dù bạn có thể sử dụng database user là root với mật khẩu root của MySQL nhưng việc này quá nguy hiểm nếu bạn có nhiều database khác nhau, vì hacker chỉ cần biết mật khẩu root của MySQL là có thể chiếm quyền quản trị toàn bộ databases có trên VPS.
Do đó, mình khuyến khích bạn sử dụng một database user riêng cho từng database để an toàn.

Đăng nhập vào MySQL

Để làm việc với MySQL chúng ta đều phải cần đăng nhập vào MySQL Server với lệnh mysql.
01
mysql -u root -p123456
Có thể bạn không cần viết thẳng cái mật khẩu ra đằng sau -p vì bạn có thể nhập nó sau khi thực hiện lệnh đăng nhập.
Lưu ý thêm một điều là trong MySQL bạn sẽ viết bằng lệnh SQL, nên mỗi câu lệnh bạn phải kết thúc bằng dấu hai chấm (;).

2.1) Lệnh tạo database

Để tạo database, chúng ta sử dụng lệnh sau trong MySQL Server:
01
CREATE DATABASE dulieu1;
Trong đó, dulieu1 là tên database mà mình cần tạo. Thông báo thực hiện thành công sẽ có dạng này:
01
Query OK, 1 row affected (0.00 sec
Để chắc chắn là bạn đã có database vừa tạo trên server, hãy gõ lệnh:
01
SHOW DATABASES;
Kết quả trả về:
01
02
03
04
05
06
07
08
09
+--------------------+
| Database |
+--------------------+
| information_schema |
| dulieu1 |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)

2.2) Lệnh tạo database user

Để tăng khả năng bảo mật, MySQL không đơn phương cho phép ứng dụng gửi dữ liệu trực tiếp vào ổ cứng mà sẽ thông qua quyền kiểm soát của một database user. Và để tránh việc sử dụng user root làm user thực hiện lệnh kết nối vì lý do bảo mật, chúng ta sẽ cần tạo một database user khác để quản lý database dulieu1 mà chúng ta vừa tạo ở trên.
Lệnh tạo database user như sau:
01
CREATE USER dulieu1_user@localhost;
Trong đó, localhost là hostname của bạn, bạn không nên thay đổi cái này trừ khi bạn biết mình đang làm gì.
Bây giờ chúng ta đã có một user mang tên dulieu1_user, bạn có thể đặt tên bất kỳ nhưng mình đặt như thế này cho dễ nhớ.
Để chắc chắn bạn đã có user vừa tạo trên server, hãy kiểm tra bằng cách chạy lệnh sau:
01
SELECT User FROM mysql.user;
Kết quả trả về:
01
02
03
04
05
06
07
08
09
+--------------+
| User |
+--------------+
| dulieu1_user |
| root |
| root |
| root |
+--------------+
4 rows in set (0.00 sec)
Đã gọi là user thì phải có password, bây giờ chúng ta sẽ thiết lập password cho user dulieu1_user vừa tạo bằng lệnh sau:
01
SET PASSWORD FOR dulieu1_user@localhost= PASSWORD("123456");
Trong đó, 123456 ở cuối dòng lệnh là mật khẩu mà bạn cần thiết lập cho user dulieu1_user.
Bây giờ bạn có thể thoát ra khỏi MySQL Server bằng lệnh exit; và thử đăng nhập vô MySQL Server bằng user mà bạn vừa tạo.
01
mysql -u dulieu1_user -p123456
Sau đó gõ lệnh SHOW DATABASES; xem danh sách database mà nó đang sở hữu.
Bạn có thể thấy là nó chỉ có đúng một database mặc định tên là information_schema chứ không hề có database mang tên dulieu1. Và nếu nó chưa hiển thị database cần kết nối ở đây thì cũng đồng nghĩa với việc bạn sẽ bị báo lỗi kết nối database khi cài đặt WordPress.
Lý do là ở trên chúng ta chỉ vừa tạo database và database user mà thôi chứ chưa hề cấp quyền cho user dulieu1_user sử dụng database dulieu1. Ở phần dưới chúng ta sẽ làm công việc này.

2.3) Cấp quyền cho database user truy cập vào database

Hãy thoát ra và đăng nhập vào lại MySQL Server với tài khoản root nhé. Bây giờ ở đây chúng ta sẽ cần cấp quyền cho user tên là dulieu1_user có thể kết nối vào database tên dulieu1, thì chúng ta sẽ có lệnh như sau:
01
GRANT ALL PRIVILEGES ON dulieu1.* TO dulieu1_user@localhost IDENTIFIED BY '123456';
Hãy nhớ là nếu nó hiển thị Query OK, 0 rows affected (0.00 sec) thì mới là thành công nhé.
Trong đó, 123456 chính là mật khẩu của user dulieu1_user.
Cấp quyền xong, hãy gõ lệnh sau để nó tái tạo lại MySQL Server để cập nhật.
01
FLUSH PRIVILEGES;
Ok, bây giờ database user tên dulieu1_user đã có quyền truy cập database tên là dulieu1 rồi. Bạn có thể thử login vào MySQL Server với database user vừa tạo và ấn lệnh SHOW DATABASES xem nó có hiển thị database vừa được cấp quyền không.

III. Tối ưu MySQL

Mặc định khi cài MySQL vào nó chưa được tối ưu nếu bạn gửi nhiều request cùng lúc, bạn hãy mở file /etc/my.cnf lên và chèn đoạn sau vào dưới cuối của file đó:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
[mysqld]
 
key_buffer = 500M
table_cache = 4000
sort_buffer_size = 3M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
max_connections = 400
query_cache_type = 1
query_cache_limit = 5M
query_cache_size = 500M
tmp_table_size=20M
max_heap_table_size=20M
thread_cache_size = 64
Sau đó khởi động lại MySQL với lệnh service mysqld restart.

IV. Cài đặt phpMyAdmin

Có thể bạn sẽ cảm thấy hơi khó khăn nếu sử dụng các dòng lệnh để thao tác những tác vụ cần thiết như tạo database, sửa dữ liệu,…nên có thể bạn sẽ khá cần đến công cụ phpMyAdmin để quản trị database dễ hơn.
Chạy lệnh sau để cài đặt phpMyAdmin:
01
yum install phpMyAdmin
Mở file /etc/httpd/conf.d/phpMyAdmin.conf lên và tìm:
01
02
03
04
05
06
07
<IfModule !mod_authz_core.c>
  # Apache 2.2
  Order Deny,Allow
  Deny from All
  Allow from 127.0.0.1
  Allow from ::1
</IfModule>
Sửa 127.0.0.1 thành IP máy tính của bạn vì mặc định nó chỉ có thể truy cập bởi mạng nội bộ trên máy chủ.
Sau đó là khởi động lại Apache.
01
service httpd restart
Bây giờ bạn có thể truy cập vào phpMyAdmin với đường dẫn http://example.com/phpmyadmin. Bạn có thể truy cập với bất kỳ domain nào có trên VirtualHost.
Nếu bạn muốn thay đường dẫn từ http://domain/phpMyAdmin thành http://domain/hehe thì sửa 2 đoạn ở đầu file /etc/httpd/conf.d/phpMyAdmin.conf:
Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin
thành
Alias /hehe /usr/share/phpMyAdmin
Alias /huhu /usr/share/phpMyAdmin
Và khởi động lại Apache:
01
service httpd restart

Lời kết

Vậy là bây giờ ta đã có một webserver có đầy đủ các chức năng để chạy được một website WordPress rồi, còn chần chờ gì nữa mà không cài ngay một website WordPress lên nào. Ở phần sau, mình sẽ hướng dẫn bạn cách cài một website WordPress bằng cách nhanh nhất trên VPS.