DIGIPOWER Tutorials

Trang chủ | | Danh mục bài viết yêu thích | Liên hệ | Đăng nhập Trang chủ | | Danh mục bài viết yêu thích | Liên hệ | Đăng nhập
Tìm kiếm các bài viết theo từ khoá Liệt kê theo danh mục
Recover MySQL InnoDB database from ibdata1 and frm
Chi tiết bài viết

Lần cập nhật cuối
24th of June, 2013

Ý kiến người dùng (5 Bình chọn)
80% thumbs up 20% thumbs down

Làm thế nào bạn sẽ đánh giá câu trả lời này?
có ích
không hữu ích

Trước hết là làm một bản sao lưu của file ibdata1, bạn sẽ sử dụng để làm việc trên bản sao lưu đó.

cd /var/lib/mysql
dd if=ibdata1 of=ibdata1.recovery conv=noerror

Bây giờ tải về các công cụ phục hồi cơ sở dữ liệu từ Percona, save trong thư mục home của user đang remote để luu trữ riêng:

wget https://launchpad.net/percona-data-recovery-tool-for-innodb/trunk/release-0.5/+download/percona-data-recovery-tool-for-innodb-0.5.tar.gz
tar zxvf percona-data-recovery-tool-for-innodb-0.5.tar.gz

Kế tiếp, start MySQL lên với các file ibdata mới :

cd /var/lib/mysql
mv ibdata1 ibdata1.bak
mv ib_logfile0 ib_logfile0.bak
mv ib_logfile1 ib_logfile1.bak
service mysqld start
Bắt đầu đến giai đoạn quan trọng phải tạo ra cơ sở dữ liệu phục hồi và các cấu trúc bảng bên trong database đó (điều này có thể được thực hiện từ một sao lưu , hoặc có thể bạn có thể sử dụng từ chính các tập tin frm của database đang bị lỗi đó). Hãy chắc chắn các tables được sử dụng là InnoDB.

Scripts sau đây được sửa đổi một chút (source từ đây : http://www.percona.com/docs/wiki/innodb-data-recovery-tool:mysql-data-recovery:advanced_techniques ). Đặt nó trong cùng thư mục mà bạn đã down công cụ phục hồi Percona và đã giải nén ra :
#!/bin/sh

db=$1

tables=`mysql -ss -u root -p -e "SHOW TABLES" $db`
for i in $tables
do
        #Check how many rows has a table
        rows=`mysql -u root -p -e "SELECT COUNT(*) FROM $i" -s $db`
                # Prepare environment
                echo "Restoring table $i"
                table=$i
                perl create_defs.pl --host=localhost --user=root --password=YOUR_PASSWORD --db=$1 --table=$table > include/table_defs.h.$table
                cd include && rm -f table_defs.h && ln -s table_defs.h.$table table_defs.h
                cd ..
                make clean all
                # Restoring rows
                found=0
                while [ $found -lt 1 ]
                do
                        echo ""
                        ./constraints_parser -5 -f /var/lib/mysql/ibdata1.recovery >> out.$i
                        found=1
                done
done

Bây giờ thực thi file script với command như sau:

sh recover-tables.sh tên_database

Nếu bạn may mắn, bạn sẽ nhận được một số file output có tên out.TABLE_NAME. Kiểm tra data của các file này restore nó vào cơ sở dữ liệu.

Các bài liên quan
File đính kèm
Không có File đính kèm nào được tìm thấy.

Tiếp tục

Knowledge Management