Displaying articles with tag

将mysql数据导入到sqlite中

Posted by leeseon, Tue Feb 17 18:52:00 UTC 2009

rails 2.0将默认配置的数据库改成sqlite 之后,我才真的开始使用这个”self-contained, serverless, zero-configuration, transactional”小巧,轻便的嵌入式的数据库、、、以下省去 溢美之词n多字

不对sqlite对我来说最大的好处就是不用安装与启动服务,完全就是一个绿色版,只要拷贝过来,放在路径之下就能直接使用了,而且数据库也就是一个文件也是可以随身携带的

如果不喜欢二进制文件也可以将数据转成文本,命令如下:

sqlite3 dbfile.sqlite3 ".dump" > sqlite3db.sql

不过我倒是没有试过在生产环境中使用它,平时在开发与测试时才使用,因此需要将一些mysql中的数据导入到我本地的sqlite3中

自然是先google之,看到一个比较直白的解决方案 它使用mysqldump导出sql语句并从中仅grep(提取)出insert语句,然后在使用
rake db:create
rake db:migrate
之后用
sqlite3 dbfile.sqlite3 < backup.sql
将数据导入到sqlite3中

不过其中有一点小问题:正如文中所说,mysql与sqlite3的转义符并不一致,除了需要将\'转成''(两个单引号)之外,还需要将"\r"(0x5c0x72)与"\n"(0x5c0x6e)转成\r(0x0d)\n(0x0a),此外\"也是需要转成"(双引号)的

并且文中的替换方法是使用编辑器手工替换的,这点与我懒惰的习惯实在是不符,还是用sed来自动化一下吧!最终拼成一个脚本如下:

#!/bin/sh
mysqldump  --opt --no-create-db --no-create-info --default-character-set=utf8 --extended-insert=0 -u user -ppassword database \
| grep 'INSERT' \
| sed -e "s/\\\'/''/g" -e "s/\\\r/\r/g" -e "s/\\\n/\n/g" -e 's/\\\"/"/g' > backup.sql

如果你需要每天将服务器上的数据备份并应用在日常的开发中的话,可以参考上次所写的DreamHost每日mysql数据库备份方案 将上面这段合并到Dreamhost 的cron任务中

0 comments | Filed Under: | Tags:

DreamHost每日mysql数据库备份方案

Posted by leeseon, Sat Jan 24 07:49:00 UTC 2009

因为DreamHost 本身就提供了数据库的备份功能,尤其是象我这样更新不多blog数据也不多:( 一般出了问题restore一下就行了。

不过前几天我犯了一个相当低级的错误,执行了一次
rake db:reset
谁知DreamHost 居然只能在命令行中执行
drop database
却不能执行
create database

再去找panel里的数据库还在,但是restore居然提示没有任何内容,也不知出了什么事,只好发邮件问support.,但是网页总不能总是空的啊,好在幸好前几天为移植一个WordPress下的theme 导了一份数据出来,换了个数据改了database.yml就搞定了

只好亡羊补牢google了一下,自然是有现成的方案的,只是因为我想使用gmail来作为接受邮箱,但是gmail会拒收tar.gz, zip之类的文件,我修改了一下使用rar来打包,脚本如下:

#!/bin/bash
cd /home/yourname/backups/ 
mkdir mysql 
suffix=$(date +%y%m%d)
mysqldump --opt --default-character-set=utf8 -uyourname -ppassword -h yourhost.com database | sed "s/\\\'/''/g" > mysql/database.$suffix.sql
rar a archives/mysql_backup.$suffix.rar -r mysql/*
rm -r mysql/
mutt youname@gmail.com -a /home/yourname/backups/archives/mysql_backup.$suffix.rar -s "MySQL Backup"

其中,mysqldump之后需要加上—default-character-set=utf8 而且再一个sed “s/\\\’/’’/g” 通道比较好,这样导出的文件会将\’替成”看起来比较方便

0 comments | Filed Under: | Tags: