Nếu bạn đang sử dụng HocVPS Script và muốn kích hoạt Remote Access để kết nối với MySQL từ máy tính cá nhân hoặc từ server khác, hãy thực hiện theo các bước dưới đây.

Hướng dẫn kích hoạt Remote Access MySQL

1. Thay đổi cấu hình MySQL

***Lưu ý: bước này không cần làm nếu đang dùng HocVPS Script, mời bạn chuyển qua bước 2.

Mặc định MySQL sẽ disable remote access, bạn cần enable lên bằng cách mở file cấu hình MySQL, ví dụ với đường dẫn /etc/mysql/my.cnf

nano /etc/mysql/my.cnf

Comment những dòng sau:

#bind-address = 127.0.0.1
#skip-networking

Khởi động lại MySQL Server

service mysql restart

2. Gán quyền remote

Mặc định các account MySQL chỉ được gán quyền access locally mà thôi, để kết nối được từ bên ngoài, bạn cần thêm một bước là cập nhật privilege.

Trong ví dụ này, mình sẽ cho phép tài khoản root được phép login remote.

– Login vào phpMyAdmin sử dụng tài khoản admin và password tự động generate khi bạn cài đặt HocVPS Script (hoặc tài khoản MySQL root).

– Nhấn tab Users, bạn sẽ thấy danh sách account MySQL hiện tại tương tự như sau

Tab Users

– Tiếp theo bạn nhấn tab SQL, nhập lệnh sau trong ô text rồi nhấn nút Go

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION

Lưu ý thay PASSWORD bằng mật khẩu tài khoản root, thay % bằng IP cụ thể nếu bạn chỉ cho phép login từ IP này. Ví dụ của mình sử dụng mật khẩu c0ef6f242253b0028

Chay lenh phan quyen

– Nếu không có vấn đề gì xảy ra thì bạn đã update quyền thành công. Tiếp theo quay trở lại tab Users bạn sẽ thấy thêm một hàng mới với Host là %

Tab Users New

Bây giờ, bạn có thể kết nối trực tiếp đến MySQL Server từ máy tính cá nhân hoặc VPS khác rồi đấy.

– Nếu muốn tắt Remote Access, trong tab Users bạn chọn User name có Host là % rồi nhấn nút Remove selected users là xong.

3. Mở port 3306

Đôi khi, bạn cần mở port 3306 thủ công để MySQL có thể lắng nghe kết nối. Sau bước 2 mà vẫn không connect được, bạn hãy sử dụng lệnh sau:

iptables -I INPUT -m state --state NEW -m tcp -p tcp --3306 xxx -j ACCEPT

Nếu muốn chỉ chấp nhận kết nối từ IP 10.5.1.3, hãy sử dụng lệnh sau:

/sbin/iptables -I INPUT -i eth0 -s 10.5.1.3 -p tcp --destination-port 3306 -j ACCEPT

Hướng dẫn này cũng có thể áp dụng với server không dùng HocVPS Script. Chúc các bạn thành công!

39 Comments

  1. Khoa 5 comment

    Khi chạy lệnh:
    GRANT ALL PRIVILEGES ON *.* TO ‘root’@’%’ IDENTIFIED BY ‘12345678” WITH GRANT OPTION

    thì có lỗi:
    MySQL said: Documentation
    #1045 – Access denied for user ‘root’@’localhost’ (using password: YES)

    Mình có login qua ssh thì đúng pass của tk root rồi.

    1. Luân Trần Admin

      Bạn kiểm tra lại, tài khoản root MySQL khác với tài khoản root login SSH.

      1. Khoa 5 comment

        Tất nhiên là mình dùng mật khẩu của tk root mysql rồi.
        Trong tab User mình có thử gắn quyền qua giao diện nhưng vẫn cũng 1 lỗi.

  2. Vo Minh Man 2 comment

    Hi Luân Trần!
    Hiện VPS của mình đang dùng script hocvps của bạn để quản lý vps.
    Mình có xem hướng dẫn và thử remote db cho vps của mình nhưng không thành công.
    Mình đã có xem qua một số hướng dẫn từ các website khác và áp dụng. Tất cả đều báo lỗi Connection Fail.
    Mình không rõ nguyên nhân là gì?
    1/ Mình đã thay dổi thông tin trong /etc/my.cnf (Localtion trong hướng dẫn không chính xác với centos 7) bằng cách comment bind-address và skip-networking. Nhưng ko thành công, mình xem thêm các hướng dẫn # là bind-address = ip-sever và comment skip-networking. Nhưng tất cả đều fail
    2/ Mình đã thực hiện cấp quyền cho mysql user root với host là % và ip-vps
    Hiện tại port phpmyadmin mình truy cập bằng domain:2020; không biết có ảnh hưởng gì không? Vì mình nghĩ port phpadmin và mysql sever là khác nhau. Mình thử mở port 3306 nhưng ko connect được.

    1. Luân Trần Admin

      Đúng là bài này mình viết trên CentOS 6, chưa thử trên CentOS 7 tuy nhiên qui trình cũng hao hao như nhau cả thôi.
      1/ Bắt buộc phải comment 2 dòng đó lại nhé
      2/ Port phpMyAdmin (dùng cho webserver, mình dùng để tạo link quản lý VPS) khác với port MySQL (cố định 3306), tuyệt đối ko dùng lẫn lộn nhé.

  3. Trung Huynh 4 comment

    Mình làm theo các bước trong bài hướng dẫn, ở DO thì ok, còn ở Vultr thì stop iptable mới được, không biết còn phải làm gì nữa ko bác nhỉ?

      1. Trung Huynh 4 comment

        Mình thêm “iptables -A INPUT -p tcp –dport 3306 -j ACCEPT” thì được rồi. 🙁

  4. Ngô Văn Cương 36 comment

    Mình dùng CentOS 6 x64 cài hocvps script mà không thấy đường dẫn etc/mysql/…

    1. Việt Phương Moderator

      ***Lưu ý: bước này không cần làm nếu đang dùng HocVPS Script, mời bạn chuyển qua bước 2.

      1. Ngô Văn Cương 36 comment

        Mình thay localhost bằng ip của vps và test thử dính ngay lỗi này. 🙁
        SQLSTATE[HY000] [2002] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
        Config:
        mysql:dbname=cuong;host=iphost’,’admin’,’pass’

          1. Ngô Văn Cương 36 comment

            Mình sửa thành mysql:dbname=cuong;port=3306;host=iphost’,’admin’,’pass’,
            Nhưng vẫn không được bạn

          2. Việt Phương Moderator

            Ý mình bạn đã thử sửa /etc/my.cnf/etc/hosts.allow chưa

  5. Thực 6 comment

    a ơi e làm theo hướng dẫn kích hoạt Remote Access MySQL theo đúng hướng dẫn. tất cả. nhưng e không kết nối đk mysql từ server này sang server khác. e cài hocvps

  6. Thực 6 comment

    GRANT ALL PRIVILEGES ON *.* TO ‘root’@’%’ IDENTIFIED BY ‘3a6f0c3dc1623d3ed’ WITH GRANT OPTION
    e dùng password mà hocvps tạo sẵn cho. e Mở port 3306 rồi nhưng tất cả đều ko kết nối đk

    1. Việt Phương Moderator

      User tạo ra khi cài đặt HocVPs là admin bạn à. Bạn thử connect PHPMyAdmin xem.

  7. Nguyễn 4 comment

    Failed to connect to MySQL: (2002) No route to host em làm và bị lỗi này a nơi

      1. Nguyễn 4 comment

        Mình dùng centos 7 PHP Version 5.6.30 và cài script mới nhất của hocvps
        mình đã restart mysql những vẩn chưa được

        1. Việt Phương Moderator

          service mysql start thông báo gì. Bạn đọc cả mysql log trong thư mục log của domain chính nữa để biết mysql không start được vì lỗi gì

          1. Nguyễn 4 comment

            service mysql start
            thi báo lỗi
            Redirecting to /bin/systemctl restart mysql.service
            Failed to restart mysql.service: Unit not found.
            nên mình dùng lệnh
            systemctl restart mariadb.service => không thấy báo kết quả gì mình nghĩ là restart mysql thành công
            Hiện tại file mysql.log k có log nào
            chỉ có file mysql-slow.log là có 15mb log k biết có phải nó k

          2. Việt Phương Moderator

            Bạn gõ lệnh như thông báo đó /bin/systemctl restart mysql.service (do đặc thù bên CentOS 7 khác CentOS 6). Cả service mysql status. No route for host của bạn liên quan đến vấn đề network. Bạn có đang connect remote MySQL không?
            MySQL log luôn được tạo mặc định trong thư mục /home/domain_chính/logs, bạn xem cả MySQL của ngày ngay trước đó, ví dụ mysql.log-20170323

          3. Nguyễn 4 comment

            systemctl status mariadb.service
            â— mariadb.service – MariaDB database server
            Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
            Active: active (running) since Thu 2017-03-23 14:17:49 ICT; 2 days ago
            Process: 6278 ExecStartPost=/usr/libexec/mariadb-wait-ready $MAINPID (code=exited, status=0/SUCCESS)
            Process: 6249 ExecStartPre=/usr/libexec/mariadb-prepare-db-dir %n (code=exited, status=0/SUCCESS)
            Main PID: 6277 (mysqld_safe)
            CGroup: /system.slice/mariadb.service
            ├─6277 /bin/sh /usr/bin/mysqld_safe –basedir=/usr
            └─6889 /usr/libexec/mysqld –basedir=/usr –datadir=/var/lib/mysql/ –plugin-dir=/usr/lib64/mysql/plugin –log-e…

            Mar 23 14:17:44 xxxxxxxxx.members.linode.com systemd[1]: Starting MariaDB database server…
            Mar 23 14:17:45 xxxxxxxxx.members.linode.com mysqld_safe[6277]: 170323 14:17:45 mysqld_safe Logging to ‘/var/log/mariad…og’.
            Mar 23 14:17:45 xxxxxxxxx.members.linode.com mysqld_safe[6277]: 170323 14:17:45 mysqld_safe Starting mysqld daemon with…sql/
            Mar 23 14:17:49 xxxxxxxxx.members.linode.com systemd[1]: Started MariaDB database server.
            Hint: Some lines were ellipsized, use -l to show in full.

            đây là status sau khi mình check nè bạn

          4. Việt Phương Moderator

            Có một số đoạn kí tự đặc biệt ├─? Ngoài ra, MySQL của bạn start được rồi mà? Started MariaDB database server

  8. hùng 6 comment

    sao cài sypex dumper với mysql dumper không dc nhỉ. Lúc trc cài vestacp thì cài bình thường chuyển qua hocvps 2 cái đều cài không dc. mysqldumper bấm connect to database thì im ru còn sypex nhập user pass vào cũng im ru. Giúp mình với .thank. database nặng quá không nhập bằng phpmyadmin dc

        1. Việt Phương Moderator

          Bạn tải về từ đâu và chmod thư mục mysqldumper à? Đoạn điền user bạn nhập ntn.
          Bạn chỉ cần đăng nhập tool rồi check thư mục log file nào đc ghi vào mới nhất là biết mà (trừ access log). Tool PHP nên mình đoán là bên php log, hoặc mysql log

          1. hùng 6 comment

            tải tại trang chủ. chmod theo hướng dẫn. nhập user thì user admin cũng không dc mà user lúc tạo database cũng không dc lun. sypex cũng bị y chang. không báo lỗi j hết. 🙁

          2. Việt Phương Moderator

            UHm. Restore bằng lệnh là an toàn nhất mà tránh timeout hay corrupt do dữ liệu lớn

          3. Việt Phương Moderator

            Bạn kiểm tra file log /home/domain_chính/logs/php-fpm-error.log. Xem log thời điểm gần nhất với lúc đăng nhập MySQLDumper.
            Ngoài ra, bạn dùng PHP 7.1? Vì bản ở sourceforge.net từ lâu rồi và không hỗ trợ PHP 7. thì phải

Comment của bạn

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