作者: 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文件,MYSQL的LOG文件一般存放在:/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數據庫恢復成功。