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

Cách sửa chữa cơ sở dữ liệu và bảng MySQL

Bài viết này mô tả cách sửa chữa các bảng và cơ sở dữ liệu MySQL. Khi các bảng của cơ sở dữ liệu phát triển, thỉnh thoảng có thể xảy ra lỗi. Khi chúng xảy ra, MySQL bao gồm một số công cụ mà bạn có thể sử dụng để kiểm tra và sửa chữa các bảng cơ sở dữ liệu. Để thực hiện việc này, hãy làm theo các quy trình bên dưới theo thứ tự xuất hiện.

Bài viết này chỉ áp dụng cho các sản phẩm được liệt kê trong Chi tiết bài viết thanh bên. Bạn phải có quyền truy cập root vào máy chủ để làm theo các quy trình này.

Bước 1:Sao lưu cơ sở dữ liệu

Trước khi bạn cố gắng sửa chữa bất kỳ cơ sở dữ liệu nào, bạn nên sao lưu nó trước. Để sao lưu tất cả các tệp từ tất cả cơ sở dữ liệu của bạn, hãy làm theo các bước sau:

  1. Đăng nhập vào máy chủ của bạn bằng SSH.
  2. Dừng máy chủ MySQL bằng lệnh thích hợp cho bản phân phối Linux của bạn:
    • Đối với CentOS và Fedora, hãy nhập:
      service mysqld stop
    • Đối với Debian và Ubuntu, hãy nhập:

      service mysql stop
  3. Nhập lệnh sau:

    cp -rfv /var/lib/mysql /var/lib/mysql$(date +%s)
    Lệnh này sao chép tất cả các tệp từ tất cả cơ sở dữ liệu của bạn sang tên thư mục dựa trên thời gian hiện tại (chính xác hơn là số giây đã trôi qua kể từ ngày 1 tháng 1 năm 1970). Điều này đảm bảo rằng mỗi bản sao lưu cơ sở dữ liệu được lưu trữ trong một thư mục có một tên duy nhất. Để tăng cường bảo vệ, bạn có thể (và nên) sao lưu các tệp cơ sở dữ liệu vào một vị trí từ xa không có trên máy chủ.
  4. Khởi động lại máy chủ MySQL bằng lệnh thích hợp cho bản phân phối Linux của bạn:

    • Đối với CentOS và Fedora, hãy nhập:
      service mysqld start
    • Đối với Debian và Ubuntu, hãy nhập:

      service mysql start

Bước 2:Chạy mysqlcheck

Sau khi sao lưu cơ sở dữ liệu, bạn đã sẵn sàng bắt đầu khắc phục sự cố. mysqlcheck chương trình cho phép bạn kiểm tra và sửa chữa cơ sở dữ liệu trong khi MySQL đang chạy. Tính năng này rất hữu ích khi bạn muốn làm việc trên cơ sở dữ liệu mà không cần dừng toàn bộ dịch vụ MySQL.

Ngoài ra, mysqlcheck hoạt động trên các bảng sử dụng công cụ cơ sở dữ liệu MyISAM hoặc InnoDB.

Để biết thông tin về cách xác định công cụ lưu trữ mà bảng cơ sở dữ liệu đang sử dụng, vui lòng xem bài viết này.

Để sử dụng mysqlcheck , hãy làm theo các bước sau:

  1. Với tư cách là người dùng root, hãy nhập lệnh sau:
    cd /var/lib/mysql
  2. Nhập lệnh sau, thay thế cơ sở dữ liệu bằng tên của cơ sở dữ liệu mà bạn muốn kiểm tra:

    mysqlcheck database

    Lệnh trước đó sẽ kiểm tra tất cả các bảng trong cơ sở dữ liệu được chỉ định. Ngoài ra, để kiểm tra một bảng cụ thể trong cơ sở dữ liệu, hãy nhập lệnh sau. Thay thế cơ sở dữ liệu bằng tên của cơ sở dữ liệu và thay thế bảng bằng tên của bảng mà bạn muốn kiểm tra:

    mysqlcheck database table
  3. Mysqlcheck kiểm tra cơ sở dữ liệu và bảng được chỉ định. Nếu một bảng vượt qua kiểm tra, mysqlcheck hiển thị OK cho bảng. Tuy nhiên, nếu mysqlcheck báo lỗi cho một bảng, hãy nhập lệnh sau để cố gắng sửa chữa nó. Thay thế cơ sở dữ liệu bằng tên cơ sở dữ liệu và bảng bằng tên bảng:

    mysqlcheck -r database table
  4. Nếu mysqlcheck không thể sửa chữa bảng hoặc các bảng thành công, hãy làm theo quy trình sau.

Bước 3:Chạy chẩn đoán dành riêng cho động cơ

Nếu đang chạy mysqlcheck không khắc phục được sự cố, bước tiếp theo là chạy chẩn đoán cụ thể cho công cụ được sử dụng bởi bảng cơ sở dữ liệu hoặc các bảng. Thực hiện theo quy trình thích hợp bên dưới cho công cụ lưu trữ cơ sở dữ liệu trong bảng của bạn.

Để biết thông tin về cách xác định công cụ lưu trữ mà bảng cơ sở dữ liệu của bạn đang sử dụng, vui lòng xem bài viết này.
Sửa chữa bảng MyISAM bằng myisamchk

Nếu bạn đang sử dụng công cụ lưu trữ MyISAM cho một bảng, bạn có thể chạy myisamchk chương trình để sửa chữa nó. Để thực hiện việc này, hãy làm theo các bước sau:

myisamchk chương trình chỉ hoạt động cho các bảng sử dụng công cụ lưu trữ MyISAM. Nó không hoạt động đối với công cụ InnoDB.
  1. Dừng máy chủ MySQL bằng lệnh thích hợp cho bản phân phối Linux của bạn:
    • Đối với CentOS và Fedora, hãy nhập:
      service mysqld stop
    • Đối với Debian và Ubuntu, hãy nhập:

      service mysql stop
  2. Nhập lệnh sau:

    cd /var/lib/mysql
  3. Thay đổi thư mục chứa cơ sở dữ liệu. Ví dụ:nếu cơ sở dữ liệu có tên là khách hàng , nhập khách hàng cd.
  4. Nhập lệnh sau, thay thế bảng bằng tên của bảng mà bạn muốn kiểm tra:

    myisamchk table

    Để kiểm tra tất cả các bảng trong cơ sở dữ liệu, hãy nhập lệnh sau:

    myisamchk *.MYI

    Nếu lệnh trước đó không hoạt động, bạn có thể thử xóa các tệp tạm thời có thể ngăn myisamchk khỏi chạy chính xác. Để thực hiện việc này, hãy thay đổi trở lại / var / lib / mysql thư mục, rồi nhập lệnh sau:

    ls */*.TMD
    

    Nếu có bất kỳ tệp .TMD nào được liệt kê, hãy nhập lệnh sau để xóa chúng:

    rm */*.TMD

    Sau đó, hãy thử chạy myisamchk một lần nữa.

  5. Để cố gắng sửa chữa bảng, hãy nhập lệnh sau, thay thế bảng với tên của bảng mà bạn muốn sửa chữa:

    myisamchk --recover table
  6. Khởi động lại máy chủ MySQL bằng lệnh thích hợp cho bản phân phối Linux của bạn:

    • Đối với CentOS và Fedora, hãy nhập:
      service mysqld start
    • Đối với Debian và Ubuntu, hãy nhập:

      service mysql start
  7. Kiểm tra bảng hoặc các bảng đã sửa chữa.
Chạy quy trình khôi phục InnoDB

Nếu bạn đang sử dụng công cụ lưu trữ InnoDB cho bảng cơ sở dữ liệu, bạn có thể chạy quy trình khôi phục InnoDB. Để thực hiện việc này, hãy làm theo các bước sau:

  1. Sử dụng trình soạn thảo văn bản ưa thích của bạn để mở my.cnf tệp trên máy chủ của bạn. Vị trí của my.cnf tệp phụ thuộc vào bản phân phối Linux của bạn:
    • Trên CentOS và Fedora, my.cnf tệp nằm trong / etc thư mục.
    • Trên Debian và Ubuntu, my.cnf tệp nằm trong / etc / mysql thư mục.
  2. Trong my.cnf , định vị [mysqld] phần.
  3. Thêm dòng sau vào [mysqld] tiết diện:

    innodb_force_recovery=4
  4. Lưu các thay đổi vào my.cnf và sau đó khởi động lại máy chủ MySQL bằng lệnh thích hợp cho bản phân phối Linux của bạn:

    • Đối với CentOS và Fedora, hãy nhập:
      service mysqld restart
    • Đối với Debian và Ubuntu, hãy nhập:

      service mysql restart
  5. Nhập lệnh sau để xuất tất cả cơ sở dữ liệu sang databases.sql tập tin:

    mysqldump --all-databases --add-drop-database --add-drop-table --routines > databases.sql
  6. Khởi động mysql chương trình và sau đó cố gắng loại bỏ cơ sở dữ liệu bị ảnh hưởng hoặc các cơ sở dữ liệu bằng cách sử dụng CƠ SỞ DỮ LIỆU DROP yêu cầu.

    Nếu MySQL không thể xóa cơ sở dữ liệu, bạn có thể xóa cơ sở dữ liệu đó theo cách thủ công trong bước 8 bên dưới sau khi dừng máy chủ MySQL.
  7. Dừng máy chủ MySQL bằng lệnh thích hợp cho bản phân phối Linux của bạn:

    • Đối với CentOS và Fedora, hãy nhập:
      service mysqld stop
    • Đối với Debian và Ubuntu, hãy nhập:

      service mysql stop
  8. Nếu bạn không thể xóa cơ sở dữ liệu ở bước 6, hãy nhập các lệnh sau để xóa cơ sở dữ liệu đó theo cách thủ công. Thay thế cơ sở dữ liệu bằng tên của cơ sở dữ liệu mà bạn muốn xóa:

    Cơ sở dữ liệu
    cd /var/lib/mysql
    rm -rf database
    Đảm bảo rằng bạn không xóa mysql hoặc performance_schema thư mục!
  9. Sử dụng trình soạn thảo văn bản ưa thích của bạn để mở my.cnf tệp trên máy chủ của bạn, rồi nhận xét dòng sau trong [mysqld] phần như hình:

    #innodb_force_recovery=4
    Thao tác này sẽ tắt chế độ khôi phục InnoDB.
  10. Lưu các thay đổi vào my.cnf và sau đó khởi động máy chủ MySQL bằng lệnh thích hợp cho bản phân phối Linux của bạn:

    • Đối với CentOS và Fedora, hãy nhập:
      service mysqld start
    • Đối với Debian và Ubuntu, hãy nhập:

      service mysql start
  11. Nhập lệnh sau để khôi phục cơ sở dữ liệu từ tệp sao lưu bạn đã tạo ở bước 5:

    mysql < databases.sql
  12. Kiểm tra cơ sở dữ liệu đã được khôi phục.

Thông tin khác

  • Để biết thêm thông tin về mysqlcheck , vui lòng truy cập https://dev.mysql.com/doc/refman/5.5/en/mysqlcheck.html.
  • Để biết thêm thông tin về myisamchk , vui lòng truy cập https://dev.mysql.com/doc/refman/5.5/en/myisamchk.html.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Viết các tham số tùy chọn trong các thủ tục được lưu trữ trong MySQL?

  2. Cách thay đổi mật khẩu gốc của MySQL hoặc MariaDB trong Linux

  3. Sao chép / nhân bản cơ sở dữ liệu mà không cần sử dụng mysqldump

  4. Nhập tệp SQL vào mysql

  5. JSON mã hóa kết quả MySQL