Sau bài viết hướng dẫn tạo mysql database và user  bằng dòng lệnh. Mình xin tiếp tục chuỗi bài về Database bằng bài hướng dẫn cách backup toàn bộ database và restore bằng dòng lệnh trong Linux.

1. Backup

Sử dụng lệnh sau

mysqldump --opt -u [uname] -p [dbname] > [backupfile.sql]

Trong đó:

[uname] : user của database

[dbname] : Tên của database

[backupfile.sql] : Tên file backup muốn lưu

[–opt] : Các tùy chọn mysqldump

Ví dụ:

mysqldump -u root -p hocvps > db_hocvps.sql

Backup database đồng thời nén gzip

mysqldump -u [uname] -p [dbname] | gzip -9 > [backupfile.sql.gz]

2. Restore

Sử dụng lệnh sau

mysql -u [uname] -p [dbname] < [backupfile.sql]

Trong đó:

[uname] : user của database

[dbname] : Tên của database

[backupfile.sql] : Tên file backup đã lưu (file backup muốn phục hồi)

Ví dụ:

mysql -u root -p hocvps < db_hocvps.sql

Phục hồi database được nén

gunzip < [backupfile.sql.gz] | mysql -u [uname] -p [dbname]

Nếu bạn muốn phục hồi một database đã tạo ra trước đó bạn sử dụng lệnh mysqlimport. Cấu trúc lệnh như sau:

mysqlimport -u [uname] -p [dbname] [backupfile.sql]

Comment của bạn

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

106 Comments

  1. dũng 118 comment

    mình bị lỗi như này sau khi chạy câu lệnh

    mysqldump: Got error: 1045: “Access denied for user ‘[dongy_web]’@’localhost’ (using password: YES)” when trying to connect

    Còn đây là câu lệnh mình chạy:
    mysqldump -u [dongy_web] -panhdung12345 [dongy_web] > [backupfile.sql]

  2. Mr Cu 2 comment

    Mấy câu lệnh này chỉ backup data dung lượng nhỏ thôi nhé mấy bạn.

    Mình xài HOCVPS – CentsOS7

    Xài thử mấy lệnh này để backup data 6GB mà ko đc, restore cũng ko đc nhé.

    # mysql -u ADMIN -pPASSWD_ADMIN
    # mysqldump -u USER -pPASSWD DATABASE > /home/bakdb.sql

    và restore cũng ko đc, ” thay dấu > = mysql -u user -p database
    ======================================

    vậy đó! buồn thiệt!

    Hiện tại mình đang backup = tool số 5 trong hocvps, và restore = mysqldumper php

  3. Phan Ngọc 1 comment

    Em là Newbie
    E dùng lệnh Backup: mysqldump –opt -u [uname] -p [dbname] > [backupfile.sql]
    Sau đó hiện ra Enter Password:
    thì mình điền không được.
    Nhấn Enter thì bị lỗi: mysqldump: Got error: 1045: “Access denied for user ‘root’@’localhost’ (using password: YES)” when trying to connect
    Ae giúp e với!

    1. Việt Phương Moderator

      Bạn điền sai mật khẩu rồi. Cái lúc hiện Enter Password là để nhập mật khẩu. Bạn nhập như bình thường nhé dù trên màn hình không có gì ghi nhận
      Với bạn có thể dùng lệnh này bao gồm luôn mật khẩu trong lệnh
      mysqldump -u [uname] -pmật_khẩu [dbname] > [backupfile.sql]

  4. Phong 11 comment

    Minh su dung cau lenh:
    Hi. Minh co DB khoang 123Mb, minh dung lenh cd /home
    Upload file backupfile.sql vao day
    mysql -u root -p
    Nhap passs:
    MariaDb (none):
    mysqlimport -u admin -p dbname backupfile.sql
    Roi no chi ra cai mui ten
    >
    Khong thay hien tuong gi xay ra, co ai biet ly do khong a?
    thu lai
    mysqlimport -u admin -p dbname /home/backupfile.sql
    Chi ra cai mui ten thoi >

    1. Việt Phương Moderator

      Bạn dùng câu lệnh này nhé
      mysql -u admin -ppassword dbname < /home/backupfile.sql
      Để import database backupfile.sql vào dbname. Trong đó, dbname thuộc quyền quản lý của user admin có mật khẩu là password

  5. Tung 25 comment

    Bác Việt Phương cho mình hỏi nhờ chút.
    VPS của mình có mấy con web wordpress đang chạy, thỉnh thoảng mình lại phải vào phpMyAdmin rồi vào từng database của từng con web wordpress để thực hiện lệnh sau

    DELETE FROM `wp_options` WHERE `option_name` LIKE ‘%_transient_%’

    XIn bác hay cho mình biết cách thực hiện 1 dòng lệnh gộp duy nhất chạy được nhiều database từ root được không a

    Mong hồi âm của bác

      1. tung 25 comment

        Cảm ơn bác đã hồi âm,
        Tuy nhiên mình xem link trên đúng là không hiểu.
        Bây giờ mình đang đăng nhập tk root
        Mình có user database là root
        Pass: 1223334444
        Mình có 5 database ứng với 5 web là:
        Data1, data2, data3, data4, data5

        Nhờ bác cho mình câu lệnh luôn để mình post vào root là nó chạy

        Mong bác giúp đỡ

        1. Việt Phương Moderator

          Bạn tự tham khảo thôi chứ mình không giúp thêm được rồi

          1. Việt Phương Moderator

            Nó có nhập nhưng không hiện thôi bạn nhé. Bạn không cần dùng [] đâu, nhìn ví dụ trong bài viết đó
            Hoặc bạn không muốn nhập pass thì dùng lệnh sau
            mysql -u root -ppass database_cần_import < database_gốc

          2. Tan Nguyen 20 comment

            Anh ơi em vẫn chưa import đc.
            Em tải file mysql lên thu mục public_html sau đó dùng lệnh import: https://prnt.sc/j11ibr
            Nhưng nhập xong pass nó cứ đứng im ạ. Chờ nửa ngày cũng ko thấy db import vào.
            Em có thử vài cách khác cũng bị như vậy ;(

          3. Việt Phương Moderator

            Bạn dùng lệnh như mình bảo đó thì không phải nhập pass. Và nếu import thành công nó sẽ không thông báo gì
            Thứ 2 là user đó có quyền sở hữu database đc import không?

  6. Dzũng Hoàng 10 comment

    Khi mình chạy backup bằng lệnh thì file .sql sẽ lưu về đâu nhỉ? Mình tìm hoài ko thấy.

    1. Việt Phương Moderator

      Về nơi bạn chạy lệnh nhé. Chạy ở home thì lưu về home, trừ phi trong dòng lệnh bạn chỉ vị trí khác

  7. Thuan Huynh 2 comment

    Vd khi export database name wordpress nhưng lúc restore database name khác thì ko import được
    Error: 1045, Access denied for user ‘Xr1M4Wp3nUcB3P’@’localhost’ (using password: YES), when using table: wordpress

    làm sao sửa lỗi này

    1. Việt Phương Moderator

      Nếu bạn export bằng lệnh này thì import được mọi database chứ nhỉ, vì không hề dùng options nào
      Không bạn mở database lên tìm đoạn như sau (ở đầu) và xóa đi

      --
      -- Current Database: `hocvps`
      --

      CREATE DATABASE /*!32312 IF NOT EXISTS*/ `hocvps` /*!40100 DEFAULT CHARACTER SET utf8 */;

      USE `hocvps`;

      1. Thuan Huynh 2 comment

        file sql mình tới 700mb ko thể mở 🙁

        Mình dùng đoạn ở trên thì đúng là có mấy dòng

        — Current Database: `hocvps`

        CREATE DATABASE /*!32312 IF NOT EXISTS*/ `hocvps` /*!40100 DEFAULT CHARACTER SET utf8 */;

        USE `hocvps`;

        1. Việt Phương Moderator

          1. File Database bạn không thể mở bằng các trình edit text thông thường như NotePad++? Bạn xóa đi rồi save lại là được mà
          2. Bạn export database bằng lệnh nào hay hocvps menu?

  8. TUAN LE VAN 37 comment

    Hiện tại database của mình lớn quá, mà ổ cứng thì đầy mất rồi ko thể backup theo cách này. Cho mình hỏi còn có thể backup theo cách nào khác nữa không ?

    1. Việt Phương Moderator

      1. Bạn nâng cấp plan lên dung lượng lớn hơn và đảm bảo là dung lượng thêm vào mount cùng ổ với ổ hiện tại
      2. Cách khác trước mình áp dụng. VPS A (hiện tại) 20GB và VPS B (mới tinh) 40GB
      VPS B cài cùng hệ thống như VPS A (ví dụ cùng hocvps và cùng mức RAM) để đảm bảo cùng cấu hình MySQL. Stop MySQL cả 2 VPS rồi copy đè thư mục /usr/lib/mysql từ VPS A sang VPS B. Sau đó khởi động MySQL ở VPS B và backup restore bình thường ở VPS B

  9. Thành 22 comment

    Ad cho mình hỏi, mình connect db trong wordpress thì ok
    Nhưng khi tạo 1 db mới, code không phải là wordpress và dùng lệnh @mysqli_connect(“localhost”, “user”, “pass”, “db”); thì bị báo lỗi Error: Unable to connect to MySQL. Debugging errno: 1045 Debugging error: Access denied for user ‘admin’@’localhost’ (using password: YES).
    Mình cài hocvps, php 7.1 ạ. Mình sử dụng tài khoản mới tạo và tài khoản admin khi tạo vps thì cũng bị báo lỗi như vậy.
    Cám ơn ad

    1. Việt Phương Moderator

      1. Bạn đăng nhập thủ công tài khoản đó vào MySQL thì okie chứ? Nếu bạn dùng user khác admin/root thì đảm bảo user đó có quyền quản lý db đó
      2. Bạn thử thay localhost bằng 127.0.0.1

  10. Anh Le 15 comment

    Mình chuyển website từ host lên vps đã dùng hocvps script, đã tạo database giờ muốn upload sql file vào database đó làm như thế nào ?

    1. Việt Phương Moderator

      Bạn đã tạo database thì dùng câu lệnh restore database nhé
      mysql -u [uname] -p[upass] [dbname] < [backupfile.sql]

    1. Việt Phương Moderator

      Chưa thành công bạn nhé. Lỗi này thường gặp khi hệ thống bạn không đủ trống để lưu trữ sql

      1. tuan 37 comment

        Bây giờ mình phải làm thế nào nhỉ để backup được vì dữ kiệu của mình khá lớn

        1. Việt Phương Moderator

          Hiện tại bạn trống bao nhiêu mb? Có 2 cách
          1. Bạn nâng cấp VPS hiện tại, thêm storage
          2. Bạn tạo 1 VPS mới cùng mức RAM nhưng cao hơn về dung lượng. Bạn cài đặt hệ thống trên VPS đó rồi chuyển toàn bộ thư mục mysql sang. Khi đó bạn sẽ backup được. Yêu cầu kĩ thuật đúng và thiết lập MySQL 2 bên là y hệt nhau, nên mình mới bảo cùng mức RAM

  11. Hanh Pham 38 comment

    Cho mình hỏi xíu.
    Mình dùng rclone để backup vps.
    Nó backup file sql .gz
    Sau đó mình copy file .gz đó về vps để tiến hành restore lại bằng lệnh “gunzip < [backupfile.sql.gz] | mysql -u [uname] -p [dbname]"
    Tất cả mọi thao tác mình làm đúng nhưng ko hiểu sao nó cứ báo "ERROR 1044 (42000) at line 22: Access denied for user". Mình thử đi thử lại vẫn lỗi vậy
    Sau đó mình thử restore file sql khác có dạng .sql bằng lệnh "mysql -u [uname] -p [dbname] < [backupfile.sql]" thì lại được. Trong khi thông tin database, user và pass vẫn y nguyên nhau nhé.
    Mình không hiểu sao lại vậy. Trước mình dùng lệnh "gunzip < [backupfile.sql.gz] | mysql -u [uname] -p [dbname]" ok nhưng giờ ko dùng được nữa.
    Bạn check lại xem sao…
    Cảm ơn bạn

    1. Việt Phương Moderator

      Bạn giải nén gzip -d rồi hẵng import database xem sao
      gzip -d abc.sql.gz.
      mysql -u xxx -pxxx xxx < abc.sql

      1. Hanh Pham 38 comment

        file database do rclone back up cuả mình có dạng abc.gz chứ không phải là abc.sql.gz
        Do đó khi mình gải nén gzip -d abc.gz thì ra file abc không có đuôi nào cả.
        Lúc này import thì vẫn dùng lệnh thế nào bạn?

        1. Việt Phương Moderator

          Vẫn dùng lệnh như bình thường. Bản chất vẫn là 1 file database mà thôi
          mysql -u xxx -pxxx xxx < abc

          1. Hanh Pham 38 comment

            cái database .gz này khi backup bằng rclone thì chỉ import được khi mình tạo database với name và user, pass giống y database đã backup đúng k bạn?
            Chứ tạo tên database khác, user và pass khác là ko import được hả?

          2. Việt Phương Moderator

            Ngoài ra, script backup bạn có thể bỏ tham số --databases thì sẽ không fix cứng databases nữa

  12. Thảo Nhi 10 comment

    Theo mình thì chính xác phải là lệnh này
    mysql -u [username database -p -h localhost [database name] < /[địa chỉ đường dấn tới database cần phục hồi]

    1. Việt Phương Moderator

      Câu lệnh kia vẫn đúng và đủ mà bạn. Còn tất nhiên bạn chạy trong Linux thì phải biết vị trí file ở đâu rồi.
      Và chạy trên SSH Terminal như thế là localhost luôn rồi, trừ phi bạn remote access thôi

  13. SvenSeaGal 36 comment

    mình lại làm phiền tý
    mình dùng cái rclone backup về nhưng file database nó ko có .sql có sao ko
    với cả lúc mình dùng lệnh mysql -u [uname] -p [dbname] < [backupfile.sql]
    thì nó đòi pass là pass gì vậy

    1. Việt Phương Moderator

      1. Không sao. Bản chất vẫn là file SQL. Bạn phải giải nén .gz trc nhé
      2. Pass của user đó. Bạn tạo database trắng bằng menu hocvps thì lúc tạo sẽ có tên database-user-pass user

  14. Minh Clear 7 comment

    Hi cho anh Luân,
    Em hay up dữ liệu qua ssh nhưng do thao tác cứ đều đặng mỗi ngày.
    Nên anh biết cái script nào mà khi chạy thì nó tự động kết nối ssh và thực thi dòng lệnh import luôn ko anh.

    Thank anh

  15. Tình 3 comment

    anh ơi nếu muốn tự backup site thường xuyên để đề phòng sự cố có cái mà phục hồi lại nguyên trạng thì cần làm với tất cả các file của thư mục chưa web hay chỉ làm với cơ sở dữ liệu như này là được ạ? 😛

      1. NAM 21 comment

        admin ơi cho mình hỏi mình có tạo gói VPS để test và cài đặt chạy website okie rồi (Nhưng một số cái cài chưa chính xác lắm ^^)

        Bây giờ mình mới tạo một gói VPS mới trên Vultr để cài lại chính xác hoàn chỉnh HocVPS Script. xong mình sẽ destroy cái cũ đi. ( http://i.imgur.com/ruGv9QT.png )

        Vậy có câu lệnh nào chuyển tất cả dữ liệu web từ thằng cũ đó sang thằng mới này ko bác ???

        1. Việt Phương Moderator

          Không bạn à. Bạn chuyển đổi thủ công nhé. Upload thì bạn có thể dùng sFTP (Bitvise, FileZilla).

  16. Dong 3 comment

    Phục hồi database

    mysql -u root -p datcucgach < db_datcucgach.sql

    File "db_datcucgach.sql" đường dẫn đặt nó chỗ nào vậy bạn?

    1. Luân Trần Admin

      Bạn đang để file backup ở đâu thì ghi đường dẫn cụ thể ở đó.

  17. Victor 3 comment

    Chào bạn,

    Có lệnh backup dữ liệu trong bảng của database được không bạn. Ví dụ như mình muốn backup 1 domain tên abc.com nhưng dữ liệu abc.com nằm trong table Domain và table đó nằm trong Database Postfix.

    Cảm ơn bạn.

      1. Victor 3 comment

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

        1 dữ liệu trong table nhất định thì có không bạn 😀

  18. Quang 2 comment

    em import sql nặng 50mb thì bị báo lỗi 502 có cách nào giải quyết không bác ?

  19. Khúc Trường 5 comment

    Mình backup data thì gặp lỗi này “mysqldump: Error 2013: Lost connection to MySQL server during query when dumping table”. Không biết có cách nào khắc phục không bạn. Mình cài server bằng script của học vps luôn

    1. Luân Trần Admin

      Bạn check lại service mysql có chạy không? Thử restart lại VPS cho nó khởi động lại Mysql xem sao?

      1. Khúc Trường 5 comment

        có mà trong đấy mình chạy 2 – 3 cái web các data khác thì vẫn backup đc bình thường. chỉ duy nhất 1 data khi backup gặp tình trạng đó. ko hiểu data đó tại sao, tuy nhiên web sử dụng data đó vẫn chạy bình thường 🙁

  20. ròm 2 comment

    mình đã backup database và mysql trên cpanel, giờ muốn chuyển sang vps linux đã cài script hocvps thì phải làm thế nào hả bạn ?

    1. Luân Trần Admin

      Bạn cài HocVPS Script sẽ được tự động cài phpMyAdmin, dùng cái đó để import là được.

      1. ròm 2 comment

        bạn có thể nói chi tiết hơn 1 chút dc k bạn ?
        mình cài hocvps scrip rồi bây giờ mình sử dụng như thế nào ? mình dùng phần mềm zoc để quản lý

        1. Luân Trần Admin

          Bạn cài HocVPS Script rồi sẽ có link login vào phpMyAdmin, sau đó import database file .SQL ấy.

  21. Bùi Viết Tâm 11 comment

    Có cách nào tìm lại user và pass của database trên VPS ko bạn.
    – Trước đây mình trỏ domain đến VPS nên vào phpmyadmin bằng tên miền ok
    – Sau này mình trỏ domain này qua server khác (dùng việc khác), VPS này ko có domain trỏ đến. Giờ muốn vào backup lại CSDL này
    Mình dùng lệnh: mysqldump -u [tên database username] -p [tên database cần backup] > [tên file cần lưu].sql
    Nhưng quên user và pass rồi (user là root hả bạn)
    Thank

          1. tho 1 comment

            bạn có thể giúp mình chuyển dữ liệu 2 vps ko. mình xin hậu tạ skype tho.nguyen799

  22. The Huy 4 comment

    Mình muốn backup từ host có Cpanel (cụ thể là Hostinger) sang vultr thì up file dữ liệu wordpress và file database của web cũ lên Vultr kiểu j Luân nhỉ? 🙁

    1. Luân Trần Admin

      Nếu dùng WP thì bạn sử dụng plugin Duplicator để tạo bản install đi, chuyển host dễ nhất đó.

      1. Hiển 1 comment

        Em bị lỗi này không biết cách sửa, nhưng vào thử thì web chạy bình thường rồi là sao anh:

        http://prntscr.com/6qfvbo

        WP-CONFIG WARNING: The wp-config.php has one or more of these values “WP_CONTENT_DIR, WP_CONTENT_URL, WPCACHEHOME, COOKIE_DOMAIN, WP_SITEURL, WP_HOME, WP_TEMP_DIR” which may cause issues please validate these values by opening the file.

  23. Phuc Duong 1 comment

    Em chẳng biết em đang bị lỗi gì nữa em làm theo bác làm rồi mà không tải được cơ sở dữ liệu lên mysql. bác giúp em qua teaview với .

  24. hung 4 comment

    Backup database đồng thời nén gzip

    mysqldump -u [uname] -p [dbname] | gzip -9 > [backupfile.sql.gz]

    Ở đoạn này thì file: backupfile.sql.gz mình đặt ở thư mục root luôn hả bác Luân? hay là đặt ở đâu?

      1. Phạm Văn Lành 6 comment

        loi nay la sao ban?helpme
        Error
        SQL query:

        CREATE TABLE `wp_commentmeta` (
        `meta_id` bigint(20) UNSIGNED NOT NULL,
        `comment_id` bigint(20) UNSIGNED NOT NULL DEFAULT ‘0’,
        `meta_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
        `meta_value` longtext COLLATE utf8mb4_unicode_ci
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
        MySQL said: Documentation

        #1050 – Table ‘wp_commentmeta’ already exists

          1. Phạm Văn Lành 6 comment

            là bây giờ mình xóa Table ‘wp_commentmeta’ đi ahf luân hay sao

        1. Phạm Văn Lành 6 comment

          lõi này là sao bạn
          You probably tried to upload a file that is too large. Please refer to documentation for a workaround for this limit.

          1. Phạm Văn Lành 6 comment

            chao ban?cho minh hoi ti
            Mặc dù mình đaz xóa những Table rồi vẫn bị?Xóa table này thì lỗi những Table khác.giúp minh tí
            CREATE TABLE `wp_links` (
            `link_id` bigint(20) UNSIGNED NOT NULL,
            `link_url` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ”,
            `link_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ”,
            `link_image` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ”,
            `link_target` varchar(25) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ”,
            `link_description` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ”,
            `link_visible` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ‘Y’,
            `link_owner` bigint(20) UNSIGNED NOT NULL DEFAULT ‘1’,
            `link_rating` int(11) NOT NULL DEFAULT ‘0’,
            `link_updated` datetime NOT NULL DEFAULT ‘0000-00-00 00:00:00’,
            `link_rel` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ”,
            `link_notes` mediumtext COLLATE utf8mb4_unicode_ci NOT NULL,
            `link_rss` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ”
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
            MySQL said: Documentation

            #1050 – Table ‘wp_links’ already exists

        2. Phạm Văn Lành 6 comment

          mình đã xóa toàn bộ thì được rồi mà sao vẫn báo lỗi file dung lượng lớn.
          cho mình hỏi tí:domain minh đã đăng ký rồi mà vẫn không chay được”Error establishing a database connection” luân

          1. Luân Trần Admin

            Upload max 200MB thôi nhé.
            Lỗi kia là do bạn chưa cấu hình wp-config.php

          2. Pham Van Lanh 6 comment

            chao Ban
            ban co tai lieu WP va SEO khong ?cho to xin?tren mang rat nhieu,ma lang mang nua?thanks

    1. Victim 1 comment

      phải dùng các phần mềm FTP vào server mà down về thôi mà. Nếu chưa có FTP thì dùng cái winscp cũng đc. Ko down được qua SSH đâu