Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách sao lưu cơ sở dữ liệu MySQL từ dòng lệnh trong Linux

Sự phát triển công nghệ hiện nay về mọi mặt của cuộc sống đã làm cho dữ liệu quý hơn vàng và bạc. Nếu bạn có thể thu thập, phát triển và bảo vệ dữ liệu, bạn chỉ còn một bước nữa là trở thành thần dữ liệu. Tuy nhiên, các công ty lớn kiểm soát các khía cạnh cuộc sống như thương mại điện tử, nhiên liệu, vận tải và cảnh quan thực phẩm dựa vào bảo vệ dữ liệu để bảo vệ mình khỏi sự sụp đổ không thể tránh khỏi.

Ngay bây giờ, mất dữ liệu giống như mất bảo hiểm nhân thọ của bạn. Vì vậy hệ quản trị cơ sở dữ liệu bạn đang sử dụng nên có định hướng dự phòng. Nếu bạn là quản trị viên MySQL hoặc người dùng xử lý dữ liệu ngày càng tăng, bạn nên xem xét triển khai kế hoạch tự động hóa sao lưu thường xuyên hơn. Lý do? Bạn có thể trở thành nạn nhân của một vụ hack dữ liệu hoặc thậm chí là vô tình thay đổi dữ liệu của mình.

Những trường hợp như vậy có thể dẫn đến vi phạm dữ liệu không thể tha thứ, đặc biệt là khi bạn không có kế hoạch sao lưu cơ sở dữ liệu. Nếu bạn là người dùng hoặc quản trị viên MySQL đã đầu tư, bài viết này ở đây để giải quyết những lo lắng về sao lưu cơ sở dữ liệu của bạn. Chúng tôi sẽ đáp ứng hai mục tiêu. Đầu tiên, bạn sẽ hiểu việc thực hiện xuất cơ sở dữ liệu thông qua “mysqldump”. Sau đó, cuối cùng, chúng ta sẽ đề cập đến cách sử dụng “crontab” có thể giúp toàn bộ quá trình này dễ dàng hơn thông qua tự động hóa.

Chuẩn bị một thư mục sao lưu dữ liệu

Vì Linux không đưa ra đề xuất cho người dùng về điểm đến sao lưu dữ liệu MySQL, nên việc lựa chọn vị trí sao lưu phù hợp là tùy thuộc vào bạn. Ví dụ, trong hướng dẫn hướng dẫn này, chúng ta sẽ làm việc với thư mục sao lưu trong “/ var / www_my_backups /”. Chúng tôi chỉ xem xét cách tiếp cận này để hiểu các cơ chế sao lưu dữ liệu MySQL. Tốt nhất, nên thực hiện sao lưu tất cả dữ liệu quan trọng trên một máy chủ việt vị.

Bạn có thể tạo thư mục sao lưu ưa thích trên máy cục bộ của mình thông qua lệnh terminal tương tự như sau:

 $ sudo mkdir / var / www_my_backups / 

Đảm bảo rằng máy sao lưu do Linux điều hành mà bạn đang sử dụng đã cấp cho bạn quyền truy cập root hoặc đặc quyền sudo. Nếu bạn không có quyền truy cập của chủ sở hữu vào thư mục sao lưu đã tạo, bạn sẽ phải đối mặt với lỗi quyền khi chạy thử nghiệm mysqldump. Lệnh sau sẽ liệt kê người dùng hệ thống hiện đang hoạt động và thông tin chi tiết nếu bạn có đặc quyền sở hữu trên thư mục sao lưu đã tạo.

 $ sudo chown $ (whoami):$ (whoami) / var / www_my_backups / 

Tiện ích máy khách mysqldump

Công cụ MySQL này thực hiện sao lưu hợp lý. Nó dẫn đến một số bộ câu lệnh SQL, tạo lại dữ liệu bảng cơ sở dữ liệu ban đầu và các định nghĩa đối tượng khi được thực thi. Ngoài ra, một hoặc một số kết xuất cơ sở dữ liệu MySQL được sao lưu hoặc chuyển đến máy chủ cơ sở dữ liệu SQL thứ cấp.

Lệnh mysqldump tiêu chuẩn được biểu diễn bằng cú pháp lệnh sau.

 $ mysqldump -u [mysql_username] -p [mysql_password] [mysql_database_name]> /path/to/[mysql_dump_file_name].sql 
  • -u [mysql_username]: đại diện cho một người dùng đặc quyền của cơ sở dữ liệu MySQL. Người dùng này sẽ có thể thực hiện các hoạt động kết xuất cơ sở dữ liệu.
  • -p [mysql_password]: đại diện cho mật khẩu người dùng của cơ sở dữ liệu MySQL. KHÔNG thêm dấu cách giữa “-p” và “[mysql_password]”.
  • [mysql_dump_file_name]: đại diện cho tên cơ sở dữ liệu MySQL của bạn.
  • >: trỏ đến đích của kết xuất đầu ra
  • /path/to/[mysql_dump_file_name].sql: trỏ đến vị trí đường dẫn của tệp kết xuất được liên kết. Bạn có thể đặt tên tùy chỉnh cho tệp kết xuất [mysql_dump_file_name] này nếu bạn muốn.

Trước khi chúng tôi tiếp tục với hướng dẫn hướng dẫn này, có một số điều đáng nói về “-p [mysql_password]”. Mặc dù hướng dẫn bài viết này sẽ tập trung vào việc kết hợp cách sử dụng của nó với một số ví dụ kết xuất MySQL, nhưng bạn nên tránh sử dụng nó trực tiếp khi xử lý kết xuất sao lưu MySQL thực của mình, đặc biệt là trong mạng chia sẻ.

Một kết xuất đang chạy có thể bị tấn công bằng lệnh hai chiều như “ps ax”, tiết lộ tên người dùng và mật khẩu cơ sở dữ liệu được liên kết. Tuy nhiên, việc sử dụng vị trí “~ / .my.cnf” để lưu trữ mật khẩu cơ sở dữ liệu MySQL của bạn khiến việc sử dụng “-p [mysql_password]” trong lệnh kết xuất đã nêu là không cần thiết. Nếu lệnh kết xuất này đang thực thi thông qua một công việc cron, tùy chọn lệnh “–defaults-extra-file =/ path / to / .my.cnf” sẽ trỏ lệnh mysqldump đến vị trí của mật khẩu cơ sở dữ liệu.

Một số ví dụ sao lưu cơ sở dữ liệu MySQL

Chúng ta hãy xem xét một số tình huống người dùng trong đó chúng ta có thể sử dụng lệnh mysqldump để sao lưu dữ liệu cơ sở dữ liệu MySQL.

Sao lưu tất cả cơ sở dữ liệu

Sử dụng tùy chọn lệnh “–all-databases” trong lệnh mysqldump của bạn sẽ xử lý tất cả các kết xuất cơ sở dữ liệu MySQL trên hệ thống Linux của bạn. Ví dụ:lệnh sau trình bày cách kết xuất tất cả cơ sở dữ liệu MySQL của bạn vào tệp “/ var / www_my_backups /” đã tồn tại. Người dùng của hệ thống Linux này phải là người chủ hoặc có đặc quyền sudo.

Trong trường hợp của chúng tôi và để bạn hiểu, chúng tôi đã đặt tên tệp kết xuất của mình là “all-databases.sql”, nhưng bạn có thể sử dụng bất kỳ tên nào khác tùy thích. Vì chúng tôi đang xử lý tất cả các cơ sở dữ liệu, nên việc trở thành người dùng tài khoản MySQL gốc là cần thiết.

 $ mysqldump -u root -p [mysql_password] --all-databases> /var/www_my_backups/all-databases.sql 

Sao lưu một cơ sở dữ liệu

Nếu chỉ có một cơ sở dữ liệu MySQL quan trọng đối với bạn, việc tạo bản sao lưu của nó bằng lệnh mysqldump yêu cầu thay thế tùy chọn lệnh “[mysql_database]” bằng tên thực. Tên tệp kết xuất có thể lấy tên của cơ sở dữ liệu này “[mysql_database] .sql” để dễ dàng theo dõi và khôi phục nó sau này. Bạn cũng có thể sử dụng một tên tệp kết xuất tùy chỉnh khác nếu muốn.

Lệnh ví dụ này được triển khai bằng cách sử dụng người dùng gốc, nhưng bất kỳ người dùng nào khác có quyền truy cập vào cơ sở dữ liệu được nhắm mục tiêu là một tùy chọn khả thi.

 $ mysqldump -u root -p [mysql_password] [mysql_database_name]> /var/www_my_backups/[mysql_database_name].sql 

Sao lưu nhiều cơ sở dữ liệu

Có thể bạn có lựa chọn cơ sở dữ liệu MySQL cụ thể mà bạn muốn sao lưu. Trong trường hợp này, tùy chọn lệnh “[mysql_database_name]” sẽ xuất hiện nhiều lần và mỗi trường hợp được liên kết với tên của cơ sở dữ liệu bạn muốn sao lưu. Hãy nhớ khoảng trống tên của các cơ sở dữ liệu này trên lệnh mysqldump. Tệp kết xuất “[mysql_database_name] .sql” cũng phải được liên kết với một tên duy nhất mà bạn sẽ nhớ.

 $ mysqldump -u root -p [mysql_password] [mysql_database_1_name] [mysql_database_2_name]> /var/www_my_backups/[mysql_databases_1_2_names].sql 

Sao lưu một bảng duy nhất

Khi quy trình sao lưu của bạn chỉ sau một bảng cơ sở dữ liệu cụ thể, việc tạo bản sao lưu của nó phải có cả tên cơ sở dữ liệu và tên bảng cơ sở dữ liệu dưới dạng các tùy chọn lệnh của lệnh mysqldump. Bạn có thể đặt tên cho tệp kết xuất của mình giống với tên của bảng cơ sở dữ liệu được nhắm mục tiêu, ví dụ:[mysql_database_table_name] .sql.

 $ mysqldump -u root -p [mysql_password] [mysql_database_name] [mysql_database_table_name]> /var/www_my_backups/[mysql_databases_table_name].sql 

Sao lưu nhiều bảng

Khi bạn muốn sao lưu nhiều bảng cơ sở dữ liệu MySQL cụ thể, cần đề cập đến tất cả các tên bảng cơ sở dữ liệu đã chọn của bạn sau tên cơ sở dữ liệu lưu trữ các bảng này. Tệp kết xuất được nhắm mục tiêu có thể có tên như [mysql_database_tables_1_2_names] .sql

 $ mysqldump -u root -p [mysql_password] [mysql_database_name] [mysql_database_table_1_name] [mysql_database_table_2_name]> /var/www_my_backups/[mysql_databases_tables_1_2_names].sql  Sao lưu (các) cơ sở dữ liệu từ xa  

Việc triển khai ví dụ này cũng rất đơn giản. Lệnh kết xuất cơ sở dữ liệu MySQL sẽ cần bao gồm tùy chọn lệnh “-h”, theo sau là tên máy từ xa hoặc địa chỉ IP được liên kết. Tất cả các cú pháp lệnh sao lưu cơ sở dữ liệu thông thường khác sau đó sẽ tuân theo.

 $ mysqldump -h [remote_computer_ip_or_hostname] -u root -p [mysql_password] [mysql_database_name]> /var/www_my_backups/[remote_mysql_database_name].sql 

Bạn có thể điều chỉnh lệnh mysqldump này để giải quyết các trường hợp sao lưu cơ sở dữ liệu khác đã được thảo luận, ví dụ:sao lưu MySQL với nhiều cơ sở dữ liệu hoặc bảng.

Sao lưu cơ sở dữ liệu liên quan đến nén

Nếu bạn muốn kết hợp các bản sao lưu dữ liệu của mình với các lần nén, dấu “| gzip -c> ”tùy chọn lệnh mysqldump có thể được sử dụng để chuyển đầu ra gzip.

 $ mysqldump -u root -p [mysql_password] [mysql_database_name] | gzip -c> /var/www_my_backups/[mysql_database_name].sql.gz 

Nếu cơ sở dữ liệu MySQL của bạn rất lớn và bạn muốn theo dõi tiến trình nén, hãy luôn cân nhắc triển khai tùy chọn dài dòng như được mô tả trong ví dụ sau.

 $ mysqldump -u root -p [mysql_password] [mysql_database_name] | gzip -c --verbose> /var/www_my_backups/[mysql_database_name].sql.gz 

Khôi phục cơ sở dữ liệu MySQL

Khi bạn đã hoàn tất việc sao lưu cơ sở dữ liệu MySQL của mình, điều gì tiếp theo? Làm thế nào để bạn truy cập vào dữ liệu mà bạn đã bảo mật rất cẩn thận? Khôi phục dữ liệu của bạn yêu cầu tuân thủ cú pháp khôi phục MySQL sau đây.

 $ mysql -u [mysql_username] -p [mysql_password] [mysql_database_name]  

Như bạn có thể không lưu ý, sự khác biệt duy nhất giữa lệnh khôi phục cơ sở dữ liệu này và lệnh sao lưu cơ sở dữ liệu là chúng tôi sử dụng tùy chọn “mysql” thay vì tùy chọn “mysqldump” và tùy chọn “<” thay vì tùy chọn “>”.

Tự động sao lưu MySQL

Hệ điều hành Linux được trang bị một số dịch vụ hữu ích vô giá đối với quản trị viên cơ sở dữ liệu như dịch vụ trong MySQL RDBMS. Một trong những dịch vụ này là dịch vụ cron. Nó có hiệu quả trong việc lập lịch các lệnh tự động. Các lệnh này, sau khi được tạo, sẽ được cấp phát cho bảng crontab cron. Bạn có thể truy cập crontab thông qua lệnh sau.

 $ sudo crontab -e 

Nếu được nhắc, lệnh này có thể muốn liên kết việc thực thi của nó với một trình soạn thảo văn bản để chọn trình soạn thảo văn bản nano.

Một tệp có tên như “/tmp/crontab.LVY6A9/crontab” sẽ mở. Ở cuối tệp crontab này, hãy nhập một lịch trình cron khả thi cùng với lệnh kết xuất MySQL có thể áp dụng. Ví dụ minh họa bên dưới triển khai việc sử dụng nén gzip để sao lưu cơ sở dữ liệu hàng ngày. Đôi khi bạn có thể có các tệp .sql lớn được lập lịch để sao lưu. Sử dụng gzip giảm các tệp đó xuống kích thước hợp lý trước khi lưu trữ sao lưu. Nó giúp quản lý bộ nhớ dự phòng.

 00 03 * * * mysqldump -u root -p [mysql_password] [mysql_database_name] | gzip -c> /var/www_my_backups/[mysql_database_name].sql.gz 

Tùy chọn lệnh “00 03 ***” có thể được hiểu theo cách sau. Mỗi 24 giờ sau 3 giờ sáng, lệnh mysqldump theo sau nó được thực thi để sao lưu cơ sở dữ liệu. Tệp sao lưu cơ sở dữ liệu hiện đã tồn tại trước khi bắt đầu quá trình sao lưu này sẽ bị ghi đè. Trong trường hợp của bạn, bạn không cần phải đợi sau 24 giờ để chứng kiến ​​quá trình tự động hóa sao lưu cơ sở dữ liệu của mình hoạt động thông qua crontab.

Bạn có thể chỉnh sửa tùy chọn “00 03 ***” trên tệp crontab thành “02 00 ***” và chỉ trong hai phút, quá trình sao lưu sẽ tự khởi tạo. Ngoài ra, nếu thời gian của bạn là 22:30, chỉnh sửa tệp với “34 22 ***” sẽ khởi tạo quá trình sao lưu cơ sở dữ liệu lúc 22:34. Hãy nhớ lưu (Ctrl + X) tệp crontab này trước khi đóng nó để lệnh này có thể thực thi được.

Sau khi số phút bạn đặt trôi qua, công việc cron lẽ ra đã được thực thi. Sau đó, liệt kê thư mục sao lưu đã tạo trên thiết bị đầu cuối của bạn và tệp sao lưu .sql.gz đã tạo sẽ có mặt.

 $ ls -l / var / www_my_backups / 

Kết quả đầu ra phải tương tự như sau:

 -rw-r - r-- 1 root root 36M 29 tháng 7 22:24 [mysql_database_name] .sql.gz 

Nếu bạn gặp sự cố khi phát hiện tệp sao lưu .sql.gz MySQL, hãy đọc lại thời gian crontab của bạn hoặc toàn bộ lệnh. Có thể có một lỗi cú pháp hoặc một cái gì đó có thể bị thiếu. Ngoài ra, nhật ký cron hệ thống có thể chỉ ra nơi có sự cố.

 $ sudo grep CRON / var / log / syslog 

Hãy nhớ đặt lại mục nhập crontab về lịch cơ sở dữ liệu ưa thích của bạn sau khi bạn xác nhận mọi thứ đang hoạt động chính xác.

Sử dụng my.cnf để lưu trữ mật khẩu cơ sở dữ liệu MySQL

Chúng tôi đã đề cập đến những hạn chế của tùy chọn “-p [mysql_password]” trên lệnh mysqldump, đặc biệt là trong mạng chia sẻ. Chúng ta cần thảo luận về cách triển khai lưu trữ mật khẩu trong tệp “~ / .my.cnf”. Người dùng sử dụng cron để tự động sao lưu cơ sở dữ liệu của họ sẽ cần hiểu việc triển khai tùy chọn lệnh “–defaults-extra-file =/ path / to / .my.cnf”.

Chỉnh sửa tệp my.cnf

Thư mục chính của hệ thống Linux của bạn chứa tệp ẩn này. Đường dẫn hệ thống trực tiếp đến nó là “/home/your_username/.my.cnf”. Sử dụng trình soạn thảo văn bản nano để mở tệp này. Tùy chọn “~” trỏ đến thư mục chính.

 $ sudo nano ~ / .my.cnf 

Chỉnh sửa tệp đang mở này theo cú pháp sau để lưu trữ thành công mật khẩu cơ sở dữ liệu MySQL của bạn. Phần “YOUR_DB_PASS” là mục nhập duy nhất bạn cần thay đổi bằng mật khẩu cơ sở dữ liệu thực của mình. Nhập các chi tiết thông tin này ở cuối tệp và lưu chúng.

 [mysqldump] 
password =YOUR_DB_PASS

Sử dụng Ctrl + X để lưu tệp này. Tệp “my.cnf” này cũng cần một số cài đặt quyền. Thực hiện lệnh sau:

 $ sudo chmod 600 ~ / .my.cnf 

Bây giờ là lúc để xem bản tạo lại lệnh mysqldump mới của chúng tôi với tùy chọn lệnh “-p [mysql_password]” bị loại bỏ.

 $ mysqldump -u root [mysql_database_name] | gzip -c> /var/www_my_backups/[mysql_database_name].sql.gz 

Như bạn có thể thấy, chúng tôi đã không thêm bất cứ điều gì. Có vẻ như điều duy nhất chúng tôi đã loại bỏ là tùy chọn lệnh “-p [mysql_password]”.

Crontab và –defaults-extrs-file

Đối với những người dùng thích tự động sao lưu cơ sở dữ liệu, bạn sẽ cần tìm nạp mật khẩu cơ sở dữ liệu trong tệp “~ / .my.cnf” thông qua tùy chọn lệnh “–defaults-extra-file”. Cách tiếp cận này làm cho mọi thứ trở nên dễ dàng đối với lệnh mysqldump khi nó cần tham chiếu đến tính xác thực của người dùng cơ sở dữ liệu và mật khẩu. Bạn phải cụ thể về đường dẫn đến tệp my.cnf và không chỉ sử dụng biểu tượng “~”. Hãy xem xét cách triển khai sau bên trong tệp crontab:

 30 22 * ​​* * mysqldump --defaults-extra-file =/ home / system_username / .my.cnf -u root [mysql_database_name] | gzip -c> /var/www_my_backups/[mysql_database_name].sql.gz 

Trong ví dụ này, crontab thực thi hàng ngày vào lúc 22:30 giờ để tạo bản nén gzip được sao lưu của cơ sở dữ liệu MySQL.

Lưu ý cuối cùng

Bài viết này xem xét các cơ chế sao lưu cơ sở dữ liệu cục bộ về thư mục sao lưu “/ var / www_my_backups”. Vì bây giờ bạn đã hiểu quá trình sao lưu diễn ra như thế nào, bạn nên mở rộng quy mô cao hơn và bắt đầu suy nghĩ về sao lưu ngoại vi. Tuy nhiên, một cách tiếp cận thực tế hơn là thông qua cấu hình truy cập SFTP trỏ đến thư mục sao lưu “/ var / www_my_backups” này.

Với cấu hình như vậy tại chỗ, có thể tạo công việc SFTP cron thông qua máy chủ từ xa để tìm nạp bản sao của các tệp cơ sở dữ liệu được lưu trữ cục bộ này để lưu trữ bảo hiểm vào ban đêm và hàng ngày.

Khi chúng tôi kết thúc hướng dẫn bài viết tuyệt vời này, giờ đây bạn đã là một bậc thầy tự hào về các kịch bản sao lưu cơ sở dữ liệu MySQL, khôi phục sao lưu cơ sở dữ liệu và tự động hóa sao lưu cơ sở dữ liệu. Bây giờ bạn nên có niềm tin và tự tin trong việc sử dụng cron job để lên lịch và xử lý tự động hóa sao lưu cơ sở dữ liệu MySQL của bạn. Lịch trình tự động hóa không nhất thiết phải hàng ngày vì chúng cũng có thể hàng tuần và hàng tháng.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. tải lên tệp php, cách hạn chế loại tải tệp lên

  2. Hệ thống quản lý cơ sở dữ liệu quan hệ (RDBMS):MSSQL vs MySQL

  3. Các công thức để tính toán tiệm cận địa lý

  4. Mysql_real_escape_string () và mysql_escape_string () có đủ để bảo mật ứng dụng không?

  5. Hợp nhất hai bảng với số cột khác nhau