Khi chạy các lệnh này, bạn cần login vào MySQL với tài khoản root (MySQL root chứ không phải tài khoản root quản lý VPS) hoặc tài khoản có full quyền. Tất cả các thao tác mình thực hiện trên VPS CentOS

Đăng nhập MySQL bạn dùng lệnh: mysql -u root -p

1. Thư mục chứa database

Trên CentOS, toàn bộ file raw database được lưu trong thư mục /var/lib/mysql

2. Quản lý tài khoản và phân quyền

Hiển thị toàn bộ users:
mysql> SELECT * FROM mysql.user;

Xóa null user:
mysql> DELETE FROM mysql.user WHERE user = ' ';

Xóa tất cả user mà không phải root:
mysql> DELETE FROM mysql.user WHERE NOT (host="localhost" AND user="root");

Đổi tên tài khoản root (giúp bảo mật):
mysql> UPDATE mysql.user SET user="mydbadmin" WHERE user="root";

Gán full quyền cho một user mới:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'mypass' WITH GRANT OPTION;

Phân quyền chi tiết cho một user mới:
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON mydatabase.* TO 'username'@'localhost' IDENTIFIED BY 'mypass';

Gán full quyền cho một user mới trên một database nhất định:
mysql> GRANT ALL PRIVILEGES ON mydatabase.* TO 'username'@'localhost' IDENTIFIED BY 'mypass' WITH GRANT OPTION;

Thay đổi mật khẩu user:
mysql> UPDATE mysql.user SET password=PASSWORD("newpass") WHERE User='username';

Xóa user:
mysql> DELETE FROM mysql.user WHERE user="username";

Cuối cùng reload user
mysql> FLUSH PRIVILEGES;
mysql> exit;

3. Các thao tác database

Hiển thị toàn bộ databases:
mysql> SHOW DATABASES;
Tạo database:
mysql> CREATE DATABASE mydatabase;

Sử dụng một database:
mysql> USE mydatabase;

Xóa một database:
mysql> DROP DATABASE mydatabase;

Tối ưu database:
All Databases:
$ sudo mysqlcheck -o --all-databases -u root -p
Single Database:
$ sudo mysqlcheck -o db_schema_name -u root -p

4. Các thao tác table

Tất cả các thao tác bên dưới bạn phải lựa chọn trước database bằng cách dùng lệnh: mysql> USE mydatabase;

Hiển thị toàn bộ table:
mysql> SHOW TABLES;

Hiển thị dữ liệu của table:
mysql> SELECT * FROM tablename;

Đổi tên table :
mysql> RENAME TABLE first TO second;
hoặc
mysql> ALTER TABLE mytable rename as mynewtable;

Xóa table:
mysql> DROP TABLE mytable;

5. Các thao tác cột và hàng

Tất cả các thao tác bên dưới bạn phải lựa chọn trước database bằng cách dùng lệnh: mysql> USE mydatabase;

Hiển thị các column trong table:
mysql> DESC mytable;
hoặc
mysql> SHOW COLUMNS FROM mytable;

Đổi tên column:
mysql> UPDATE mytable SET mycolumn="newinfo" WHERE mycolumn="oldinfo";

Select dữ liệu:
mysql> SELECT * FROM mytable WHERE mycolumn='mydata' ORDER BY mycolumn2;

Insert dữ liệu vào table:
mysql> INSERT INTO mytable VALUES('column1data','column2data','column3data','column4data','column5data','column6data','column7data','column8data','column9data');

Xóa dữ liệu trong table:
mysql> DELETE FROM mytable WHERE mycolumn="mydata";

Cập nhật dữ liệu trong table:
mysql> UPDATE mytable SET column1="mydata" WHERE column2="mydata";

6. Các thao tác sao lưu và phục hồi

Sao lưu toàn bộ database bằng lệnh (chú ý không có khoảng trắng giữa -p và mật khẩu):
mysqldump -u root -pmypass --all-databases > alldatabases.sql

Sao lưu một database bất kỳ:
mysqldump -u username -pmypass databasename > database.sql

Khôi phục toàn bộ database bằng lệnh:
mysql -u username -pmypass < alldatabases.sql (no space in between -p and mypass)

Khôi phục một database bất kỳ:
mysql -u username -pmypass databasename < database.sql

Chỉ sao lưu cấu trúc database:
mysqldump --no-data --databases databasename > structurebackup.sql

Chỉ sao lưu cấu trúc nhiều database:
mysqldump --no-data --databases databasename1 databasename2 databasename3 > structurebackup.sql

Sao lưu một số table nhất định:
mysqldump --add-drop-table -u username -pmypass databasename table_1 table_2 > databasebackup.sql

Comment của bạn

Lưu ý: tất cả comment đều được kiểm duyệt cẩn thận! Nếu có code bạn hãy up lên pastebin.com rồi để lại link trong comment.

38 Comments

  1. lubu 1 comment

    Bạn ơi cho mình hỏi sao mình insert 1 phần tử nó lại bị duplicate phần tử đó thành 2 phần tử zậy?

  2. LEO 6 comment

    Chào hocpvs,
    Cho mình hỏi chút là tự nhiên mình bị lỗi như thế này là sao ạ.
    Mình muốn tạo thêm DB mà không được.
    https://imgur.com/KaHDYfs
    Mong cả nhà giúp đỡ.
    Xin cảm ơn!

    1. Việt Phương Moderator

      Bạn restart lại MySQL rồi kiểm tra lại lệnh tạo DB
      Cho mình kết quả của ls -al /var/lib/mysql/

    1. Việt Phương Moderator

      MySQL không có giới hạn số Database tối đa. Việc giới hạn có thể từ hệ điều hành của VPS, giới hạn về số lượng file/thư mục/dung lượng thư mục

  3. Dzũng Hoàng 10 comment

    Xin chào,

    Vui lòng cho mình hỏi, mình đang gặp vấn đề như sau khi cài đặt và sử dụng script hocvps.

    Chạy được một thời gian thì bỗng nhiên mình ko vào được PHPmyadmin nữa, vào trình quản lý file thì vẫn được với pass mặc định.

    Login phpmyadmin thông báo lỗi như sau:]

    #2002 – Connection refused — The server is not responding (or the local server’s socket is not correctly configured).

    mysqli_real_connect(): (HY000/2002): Connection refused

    Cho hỏi mình cần khắc phục như thế nào? SSH mình vẫn vào được bình thường

    Xin cảm ơn BQT.

    1. Việt Phương Moderator

      Trạng thái MySQL của bạn như thế nào?
      service mysql status
      systemctl status mysql -l

      1. Dũng Hoàng 10 comment

        Của mình nó báo như thế này
        https://imgur.com/a/VEYulMB

        [root@lifeshop home]# service mysql status
        ERROR! MariaDB is not running, but lock file (/var/lock/subsys/mysql) exists
        [root@lifeshop home]# systemctl status mysql -l
        ● mysql.service – LSB: start and stop MariaDB
        Loaded: loaded (/etc/rc.d/init.d/mysql; bad; vendor preset: disabled)
        Active: active (exited) since Thu 2018-09-06 14:30:56 +07; 4 months 15 days ago
        Docs: man:systemd-sysv-generator(8)
        Process: 822 ExecStart=/etc/rc.d/init.d/mysql start (code=exited, status=0/SUCCESS)

        Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.

        Mấy ngày gần đây bên Vultr có gửi email thông báo, có vẻ như 1 trong những web của mình trên vps bị hack, và bị chèn mã độc thì phải.

        Dear Customer,

        This abuse ticket requires your immediate attention. Please correct the matter and reply to this ticket with resolution within the next 48 hours to ensure uninterrupted service. Overwhelming evidence of violation/compromise may result in VPS suspension prior to the 48 hour deadline to protect system and additional customer resources.

        1. Việt Phương Moderator

          Bạn chạy lệnh service start mysql
          Còn vấn đề dưới thì VPs đang lạm dụng quá nhiều tài nguyên từ Vultr, gây ảnh hưởng hệ thống và yêu cầu fix trong 48h không sẽ khóa VPS

  4. Kien Dinh 8 comment

    Anh cho em hỏi. Em sử dụng script của hocvps xong.
    Giờ đăng nhập mysql như câu lệnh trên nhưng không nhập pass được.
    Sử dụng ZOC kết nối rồi dùng câu lệnh trên đúng không anh?

    1. Việt Phương Moderator

      HocVPS bản mới thì không cần nhập pass đối với user root. Bạn truy cập SSH và dùng lệnh mysql -u root là được

      1. Dinh Hung Kien 8 comment

        chào anh Phương,
        Em nhập lệnh này thì nó báo là tài khoản root không có quyền truy cập mysql. Bạn nhập Yes để đồng ý.
        Em nhập Yes thì nó chạy vô hạn các dòng
        y
        y

        Không có điểm dừng luôn anh ạ.
        Có phải là bản cài bị lỗi không anh?

          1. Dinh Hung Kien 8 comment

            Cảm ơn anh Phương,
            Em cài lại thì vô MYSQL được rồi..

  5. hoàng lâm 13 comment

    cho mình hỏi đây là lỗi gì vậy ad?
    [root@tinh ~]# rclone copy “remote:/HOCVPS_BACKUP/2018-15-03” /root/
    2018/03/16 10:03:22 ERROR : : error reading source directory: directory not found
    2018/03/16 10:03:22 ERROR : Attempt 1/3 failed with 1 errors
    2018/03/16 10:03:22 ERROR : : error reading source directory: directory not found
    2018/03/16 10:03:22 ERROR : Attempt 2/3 failed with 1 errors
    2018/03/16 10:03:22 ERROR : : error reading source directory: directory not found
    2018/03/16 10:03:22 ERROR : Attempt 3/3 failed with 1 errors

    1. Việt Phương Moderator

      Không tồn tại thư mục như vậy. Bạn kiểm tra trên Cloud tên thư mục có đúng như vậy không

  6. Thanh 1 comment

    Nhờ bài hướng dẫn này mình vừa hoàn thành xong một số việc quan trọng. Xin chân thành cảm ơn ad nha.

        1. Việt Phương Moderator

          Thì bạn giải nén file gzip ra bằng lệnh trên của mình rồi xử lý database như bài viết này hướng dẫn thôi.
          Giải nén trên cửa sổ lệnh terminal SSH

  7. thanhnm 1 comment

    Rất hay, nhưng trong thao tac cột, hàng không có phần thêm, sửa, xóa column nhỉ. Cảm ơn tác giả nhiều 🙂

    1. Việt Phương Moderator

      Bạn sử dụng HocVPS Script à? Trong Script sử dụng Database MariaDB bản mới nhất (chính là MySQL được tối ưu)
      Nên bạn làm việc như MySQL thôi

          1. dũng 119 comment

            chính xác là mình dùng lệnh :
            mysql -u username -pmypass databasename < database.sql

            Lệnh này là phải đăng nhập MySQL đúng k bạn
            mình dùng lệnh đó thì bị lỗi như của bạn bên trên

  8. masa 1 comment

    cho mình hỏi những thông tin này có hướng dẫn cho window được không? mình đọc nhưng thấy dành cho linux thôi hay sao ý.
    Cám ơn ạ.

    1. Luân Trần Admin

      Trong phần 6. Các thao tác sao lưu và phục hồi có nói đấy bạn.
      Hoặc dùng phpMyAdmin import vào.

  9. Phúc 1 comment

    Cho mình hỏi muốn để file restore thì để nó vô đâu, tại mình test hocvps script thì dùng lệnh restore ” mysql -u username -pmypass databasename < database.sql " thì nó chạy nhưng không có chuyện gì xảy ra cả