前言
sqlite3只小巧輕便,但是并不支持并發(fā)訪問,當網(wǎng)站并發(fā)量較大時候,數(shù)據(jù)庫請求隊列邊長,有可能導致隊列末尾去數(shù)據(jù)庫操作超時,從而操作失敗。因此需要切換到支持并發(fā)訪問的數(shù)據(jù)庫。切換數(shù)據(jù)庫需要將老的數(shù)據(jù)導出,再導入到新的數(shù)據(jù)庫中,但是sqlite3和mysql的數(shù)據(jù)庫并不完全兼容,需要做部分調整才能正常導入到mysql中。我最近工作中就遇到了這個問題。
最近一個項目中使用magenetico抓取磁力鏈接,由于它使用的是sqlite3, 文件會越來越大,而且不支持分布式;所以需要將其改造成MySQL,在遷移之前需要將已經(jīng)抓取的15G數(shù)據(jù)導入到MySQL,下面來一起看看詳細的介紹吧
方法如下:
從sqlite3文件dump出sql
1
2
3
4
|
sqlite3 database.sqlite3 sqlite3> .output /path/to/dump.sql sqlite3> .dump sqlite3> .exit |
切分文件
文件比較大的時候,很有導入到一半的時候失敗,這個時候需要從失敗的行開始切分出一個新的sql文件來
1
|
awk '{if (NR>=6240863) print $0>"dump_part.sql"}' dump.sql |
mysql參數(shù)修改
1
2
|
[mysqld] max_allowed_packet = 100M |
sql兼容, 符號替換
1
2
3
4
|
# 1. 刪除不包含 INSERT INTO 的行 # 2. 替換表名 wrap # 3. 替換 hex sed '/INSERT INTO/!d;s/"table1"/`table1`/;s/"table2"/`table2`/;s/,X/,/' dump.sql |
導入到MySQL
1
2
|
# 加上 force 參數(shù), 防止部分有問題的sql阻止導入 mysql -uroot -p -f magnet < dump.sql |
引用
How To Use The SQLite Dump Command
總結
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。
原文鏈接:http://type.so/linux/import-sqlite-for-mysql.html