最近项目中有个数据库迁移的需求,将现有的SQLite迁移到MySQL。由于是前人遗留的项目,没有建库的SQL,也没有相关文档。同时,还有大量的线上数据也需要迁移。刚接到这个需求时,自己想了几种方案,但是感觉太过繁琐,不够可靠。后来在网上找到YamlDB这个工具,并在模拟环境中进行了测试,发现非常方便、可靠和强大。具体操作如下:
Step 0
1. 安装MySQL
2. 创建数据库
2. sudo gem install mysql
注: 数据库编码一定要和现有项目保持一直,不然就容易出现乱码现象;
Step 1
安装YamlDB,此工具支持Rails 2.x 和 Rails 3.x;
Rails 2.x 安装:
script/plugin install git://github.com/adamwiggins/yaml_db.git
Rails 3.x 安装,在Gemfile中添加:
gem 'yaml_db'
Step 2
使用YamlDb,备份数据库:
rake db:dump
Step 3
更新数据库配置文件:
将现在有的SQLite配置进行备份:
cp database.yml config.database.yml.sqlite3
修改数据库配置:
development: adapter: mysql encoding: utf8 reconnect: false database: ** database ** pool: 5 username: ** username ** password: ** password ** socket: ** /tmp/mysql.sock ** test: adapter: mysql encoding: utf8 reconnect: false database: ** database ** pool: 5 username: ** username ** password: ** password ** socket: ** /tmp/mysql.sock ** production: adapter: mysql encoding: utf8 reconnect: false database: ** database ** pool: 5 username: ** username ** password: ** password ** socket: ** /tmp/mysql.sock **
Step 4
使用YamlDb,创建数据库表
rake db:schema:load
Step 5
使用YamlDb,导入数据
rake db:load
小结:YamlDB不能对数据库的用户、权限、触发器等高级特性进行迁移,只能做数据库的表、数据进行迁移操。