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

Tại sao tập lệnh sao lưu cơ sở dữ liệu của tôi không hoạt động trong php?

Thao tác này sẽ không hoạt động để sao lưu cơ sở dữ liệu của bạn dưới dạng tập lệnh SQL, trừ khi cơ sở dữ liệu của bạn chỉ là cơ sở dữ liệu đồ chơi, tương đương với tập lệnh "hello world".

Kịch bản đó thật kinh khủng. Bạn không nên sử dụng nó để sao lưu cơ sở dữ liệu. Tập lệnh đó đã được đăng trước đây: Cơ sở dữ liệu PHP Dump Script - có vấn đề gì không?

  • Không có lỗi kiểm tra sau mysql_connect () hoặc mysql_queries (). Có thể bạn đã nhập sai mật khẩu hoặc điều gì đó, nhưng bạn sẽ không bao giờ biết vì tập lệnh không xác minh kết nối thành công.

  • Nó sẽ không tạo ra câu lệnh INSERT phù hợp nếu cơ sở dữ liệu của bạn chứa bất kỳ NULL nào.

  • Bộ ký tự không được xử lý.

  • Addlashes () là không phù hợp để thoát dữ liệu.

  • Tên bảng không được phân tách.

  • Không sao lưu các dạng xem, thủ tục, chức năng hoặc trình kích hoạt.

  • mysql_query () đệm kết quả, vì vậy nếu bạn có một bảng có hàng nghìn hàng trở lên, bạn sẽ vượt quá giới hạn bộ nhớ PHP của mình. Trên thực tế, tập lệnh nối chuỗi các câu lệnh INSERT vào một biến PHP duy nhất. Vì vậy, trước khi kết thúc, bạn sẽ có toàn bộ cơ sở dữ liệu được thể hiện trong bộ nhớ.

Không ai được sử dụng tập lệnh đó. Nó hoàn toàn là rác, và tôi không nói nhẹ điều đó.

Chỉ cần sử dụng shellexec () để chạy mysqldump.

@ Álvaro G. Vicario có một điểm tốt, bạn thậm chí không cần sử dụng PHP cho nhiệm vụ này. Tôi đã giả định rằng bạn cần tạo một bản sao lưu từ một tập lệnh PHP. Đây là cách tôi tạo bản sao lưu từ tập lệnh cron:

Tạo một tập lệnh shell, nó có thể được gọi là bất cứ thứ gì bạn muốn, ví dụ:mymysqldump.sh. Đây là cách tôi viết nó:

:
: ${BACKUP_HOST:="localhost"}
: ${BACKUP_DATABASE:="mydatabase"}
: ${BACKUP_DIR:="/opt/local/var/db/mysql5/backups"}
: ${BACKUP_FILE:="${DATABASE}-`date +%Y%m%d%H%M%S`"}

mysqldump -h ${BACKUP_HOST} ${BACKUP_DATABASE} > ${BACKUP_DIR}/${BACKUP_FILE}

Tất nhiên, hãy tùy chỉnh các giá trị của các biến nếu cần cho môi trường của bạn.

Bạn có thể nhận thấy rằng tên người dùng và mật khẩu không trong tệp này. Vui lòng không đặt mật khẩu thành tập lệnh ở dạng văn bản thuần túy để mọi người có thể đọc chúng. Thay vào đó, chúng tôi sẽ đưa chúng vào một tệp tùy chọn để làm cho nó an toàn hơn.

Tạo một người dùng hệ điều hành đặc biệt sẽ chạy bản sao lưu từ cron. Hệ thống của bạn có thể có một người dùng đặc biệt "mysql" hoặc "_mysql" để chạy MySQL Server, nhưng người dùng này có thể được định cấu hình để không có thư mục chính hợp lệ. Bạn cần một người dùng có thư mục chính. Hãy gọi nó là "mybackup".

Trong thư mục chính của người dùng đó, hãy tạo một tệp .my.cnf với nội dung sau:

[mysqldump]
user = alupto_backup
password = xyzzy

Trong đó "alupto_backup" và "xyzzy" là tên người dùng MySQL và mật khẩu của nó (thay đổi chúng cho môi trường của bạn). Đặt quyền sở hữu và chế độ của tệp này để chỉ chủ sở hữu của nó mới có thể đọc được:

chown mybackup .my.cnf
chmod 600 .my.cnf

Tạo một thư mục bin trong nhà của người dùng này và đặt tập lệnh shell của chúng tôi vào đó.

mkdir ~mybackup/bin
mv mymysqldump ~mybackup/bin

Bây giờ bạn có thể chạy tập lệnh shell để kiểm tra nó:

sh ~mybackup/bin/mymysqldump

Bây giờ, hãy tạo một tệp cron cho người dùng này:

crontab -u mybackup

@daily ~mybackup/bin/mymysqldump

Chắc là vậy.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySql cấp quyền người dùng

  2. MySQL IF NOT NULL thì hiển thị 1, còn lại hiển thị 0

  3. Các tiêu chuẩn / quy ước về tên cột MySQL

  4. Truy vấn MySQL trở nên hoang dã?

  5. Làm cách nào để lưu hình dạng lớp phủ bản đồ Google trong cơ sở dữ liệu?