使用帝国备份注意的问题

在服务器上对 mysql 备份是一件比较棘手的事情, 不同站点使用的伺服器环境, 数据库版本, 编码等都不尽相同, 直接 mysqldump 或者复制 data 文件, 都要求有相应权限, 而且在不同机器之间迁移会有很多各种各样的问题, 大数据也担心导致当机或者资源超载. 对我这样不熟悉数据库的人来说, 不同站点备份的时候, 使用帝国备份是个很好的解决方案. 简单快速而且大部分时候很可靠.
记录几点需要注意的地方:

  • 使用代码前先打开 PHP 中的短标记开关, 在 php.ini 中设置 short_open_tag 为 on. short_open_tag 是个规定短标记是否生效的开关, 如果设置为 on 则标记
    <? some php code ?>
    <?php some php code ?>

    都可以生效, 如果设置为 off, 则只有后者才可以生效. 如果没打开这一项服务器会报 500 错误, 日志中会有类似 unexpected $end 的错误, 原因是代码中使用了短标记, 但 php.ini 中未打开此项开关导致.

  • 使用前保证配置文件及数据保存目录可写, 有时候忘记修改权限会发生数据库无法连接的情况. 我一般都是备份的时候临时复制到根目录下, 备份完毕下载文件到本地后, 再将 ebak 目录移至 www 目录以外, 下次使用时在移动回来.

ERROR: Failed to build gem native extension.

Building native extensions. This could take a while...
ERROR: Error installing mysql:
ERROR: Failed to build gem native extension.

/usr/bin/ruby1.9.1 extconf.rb --with-mysql-dir=/usr/bin --with-mysql-lib=/usr/lib/mysql
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lm... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lz... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lsocket... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lnsl... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lmygcc... no
checking for mysql_query() in -lmysqlclient... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.

This error occur by the lack of “libmysql-ruby libmysqlclient-dev” library, executing “sudo apt-get install libmysql-ruby libmysqlclient-dev” will solve the problem.

the bundled mysql.rb driver has been removed from rails 2.2.

Rails 2.2 版本开始取出自带的 Mysql 支持,自带的 SQLite 没找到好用的可视化工具,所以还是选择老牌的 Mysql 比较舒服一些,如果选择 Mysql 需要手动设置一些地方。按照提示 gem install mysql 的结果往往是无法安装,以下提供 Windows 下的解决方案,Linux 用户应该也可以类似操作(未测试)。

  1. 首先下载老版本的 libmysql.dll 文件,libmysql
  2. 将此dll复制到ruby安装目录bin目录下
  3. 重新启动MySQL服务

操作完毕即可,如若使用 Netbeans 则需要指定 ruby 解释器为原版,jruby 按照此方法操作未见效果。