Mysql Innodb的恢復

作者: Rainny<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

日期: <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2009-1-8

原來的MYSQL機器:172.17.16.27

新的MYSQL機器:172.17.16.222

 

目的:將27號機的WIKI備份,然後恢復到222號機

 

先在27號機寫一個備份wiki數據庫的腳本,內容如下:

#!/bin/sh

#datestr=`date +%a`

datestr=`date +%y%m%d`

bugssource=mysql.bugs-$datestr.tar.gz

wikisource=mysql.wiki-$datestr.tar.gz

 

cd /backup

mysqlhotcopy -u root -p ecvision bugs /backup

mv bugs mysql.bugs

mysqlhotcopy -u root -p ecvision wiki /backup

mv wiki mysql.wiki

 

tar zcvf $bugssource mysql.bugs

tar zcvf $wikisource mysql.wiki

 

rm -rf /backup/mysql.bugs

rm -rf /backup/mysql.wiki

 

ftp -niv 172.17.16.8 <<EOF

user ecvision ecv1234

bin

cd 27serverbackup

put $bugssource

put $wikisource

bye

 

EOF

 

 

 

 

222號機,將mysql.wiki-20081230.tar.gz解壓,將解壓後的所有文件(*.frm,*.MYD,*.MYI)拷到wiki數據庫的目錄下(/usr/local/mysql/var/wiki), 創建wiki用戶,

創建用戶名和密碼:

GRANT ALL ON wiki.* TO wiki@"localhost" IDENTIFIED BY 'wiki';

 

只能以localhost的主機方式訪問 的時候, 加:

mysql> Grant all privileges on wiki.* to 'wiki'@'%' identified by 'wiki' with grant option;

mysql> flush privileges;  (運行爲句才生效,或者重啓MySQL)

 

 

這時,由於原來的DB其存儲引擎是Innodb,所以你訪問它的表時會報:

#1146 - Table 'wiki.user' doesn't exist.

 

這時,我們要把原來的數據庫的ibdata1文件拷過來,這是表空間文件,Innodb的數據庫其表的數據實際是放到這個文件中去的。

 

修改my.conf配置文件(windows下是my.ini文件),在[mysqld]部分,將datadir=/usr/local/mysql/var   加上(ibdata1所在的目錄)

/etc/my.cnf的內容:

# The MySQL server

[mysqld]

port            = 3306

socket          = /usr/local/mysql/tmp/mysql.sock

skip-locking

key_buffer = 16M

max_allowed_packet = 1M

table_cache = 64

sort_buffer_size = 512K

net_buffer_length = 8K

read_buffer_size = 256K

read_rnd_buffer_size = 512K

myisam_sort_buffer_size = 8M

default_character_set=utf8

datadir=/usr/local/mysql/var

 

這時再啓動MYSQLD,啓動失敗,我們再來查看LOG文件,MYSQLLOG文件一般存放在:/usr/local/mysql/var/主機名.err,如主機名是testdd,MYSQL的啓動時的LOG文件放在:/usr/local/mysql/var/ testdd.err

我們來查看LOG文件的最後100行:

 

[root@testdd var]# tail -100 testdd.err

我們發現有下面的內容:

081230 15:58:54  mysqld started

081230 15:58:54  InnoDB: Operating system error number 13 in a file operation.

InnoDB: The error means mysqld does not have the access rights to

InnoDB: the directory.

InnoDB: File name ./ibdata1

InnoDB: File operation call: 'open'.

InnoDB: Cannot continue operation.

081230 15:58:54  mysqld ended

很明顯,MYSQL這個用戶對文件ibdata1沒有操作權限,所以要更改OWNER和文件的讀寫權限:

chown –R mysql.mysql   ibdata1

chmod 660 ibdata1

然後再啓動MYSQL,這下成功了:

/etc/init.d/mysqld start

 

我們再來查看wiki表的數據,可以成功查出來了。至此,MYSQL數據庫恢復成功。

發佈了37 篇原創文章 · 獲贊 0 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章