mysqlhotcopy的使用和安装方法【快速备份mysql数据库】及错误解
mysqlhotcopy是使用LOCK TABLES、FLUSH TABLES和cp或scp来快速备份数据库,mysqlhotcopy是由Tim Bunce用Perl脚本编写的。它是备份数据库或单个表的最快的途径,但它不能远程运行只能运行在数据库目录所在的机器上。注意:mysqlhotcopy只用于备份MyISAM。
mysqlhotcopy与mysql自带的mysqldump异同比较:
mysqlhotcopy只适用于 MyISAM 引擎,而后则则可同时使用于MyISAM引擎和InodDB引擎.
mysqlhotcopy和mysqldump相同的地方都是在线执行 LOCK TABLES 以及 UNLOCK TABLES
mysqlhotcopy是一个快速文件意义上的COPY,mysqldump是一个mysql数据库端的SQL语句集合。
mysqlhotcopy恢复只需要COPY备份文件到源目录覆盖即可,mysqldump需要导入SQL文件到原库中,并且可能产生很多导入出错的情况。
mysqlhotcopy只能运行在数据库目录所在的机器上,mysqldump可以用在远程客户端,不过备份的文件还是保存在数据库服务器上。
mysqlhotcopy在使用前必须安装perl-DBD-mysql包,而mysqldump则不需要。
使用mysqlhotcopy之前需要安装perl-DBI和DBD-mysql:
1:安装perl-DBI
yum -y install perl-DBI
#(如果不行则执行yum -y install perl perl-DBI)
2:安装DBD-mysql (如果编译出错请看最后面)
wget http://www.fcbu.com/upimages/soft/DBD-mysql-4.020.tar.gz
tar xzvf DBD-mysql-4.020.tar.gz
cd DBD-mysql-4.020
perl Makefile.PL --mysql_config=/usr/local/mysql/bin/mysql_config
make
make install
如果你的mysql不是安装在/usr/local/mysql/目录,mysql_config的路径请按照你自己的填写。
DBD-mysql的官网可以找到最新的版 http://www.cpan.org/modules/by-module/DBD/(目前最新的为DBD-mysql-4.020)
转载请注明来源:http://linux.fcbu.com/mysqlhotcopy.htm
一个常用的备份例子:
/usr/local/mysql/bin/mysqlhotcopy -u root -p 密码 --addtodest 数据库名1 数据库名2 备份目录
–addtodest的意思是当备份存在时,不中断备份,只添加新的文件进去。
更多的选项可以执行/usr/local/mysql/bin/mysqlhotcopy –help查看。
恢复用mysqlhotcopy备份的mysql数据库方法:
停止mysql服务。
复制备份的数据库目录到相应的mysql数据目录下。
用chown更改目录所有者为mysql服务器运行的用户。
启动mysql服务就顺利完成了,速度非常快。
执行perl Makefile.PL --mysql_config=/usr/local/mysql/bin/mysql_config编译的时候如果出现如下错误:
Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at Makefile.PL line 20.
BEGIN failed--compilation aborted at Makefile.PL line 20.
解决方法:
yum -y install perl-ExtUtils-MakeMaker
如果还是不行就用下面两条:
yum -y install perl-ExtUtils-MakeMaker*
yum -y install perl-Time-HiRes*
转载请注明来源:http://linux.fcbu.com/mysqlhotcopy.htm
----------- 2012/6/1 更新 -----------------
错误1:运行mysqlhotcopy进行数据库备份的时候遇到如下错误:
Invalid db.table name 'fcbudatabase.fcbudatabase`.`wp_commentmeta' at /usr/local/mysql/bin/mysqlhotcopy line 855.
解决方法:
vi /usr/bin/mysqlhotcopy
#在第 835 下新增一行,即在my @dbh_tables = eval { $dbh->tables() };下面新增如下一行:
map { s/^.*?\.//o } @dbh_tables;
保存即可解决
错误2:install_driver(mysql) failed: Can't load '/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/DBD/mysql/mysql.so' for module DBD::mysql: libmysqlclient.so.15: 无法打开共享对象文件: 没有那个文件或目录 at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/DynaLoader.pm line 230.
at (eval 7) line 3
Compilation failed in require at (eval 7) line 3.
Perhaps a required shared library or dll isn't installed where expected
at /usr/local/mysql/bin/mysqlhotcopy line 178
解决方法:
这个错误出现的原因是因为安装mysql后的路径配置的问题,需要把库文件路径信息加入到/etc/ld.so.conf
echo "/usr/local/mysql/lib/mysql" >> /etc/ld.so.conf
再重新载入:
ldconfig
就一切正常了。