您的位置:首页 > 数据库 > MySQL

如何恢复MYSQL数据库

2008-12-31 09:59 92 查看
原来的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数据库恢复成功。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: