angular2是做網(wǎng)站的還是手機的百度風(fēng)云榜小說排行榜歷屆榜單
咨詢+【QQ】
sqlite輕量數(shù)據(jù)還行,隨著數(shù)據(jù)量增大,不得不遷移進mysql
首先 電腦執(zhí)行
?
sqlite3 db.sqlite3 .dump > dump.sql
會把整個sqlite的數(shù)據(jù)導(dǎo)出進 dump.sql中
緊接著我們把sqlite的sql轉(zhuǎn)換成mysql的sql語句,因為mysql語句和 sqlite的sql有區(qū)別,所以我們需要用python實現(xiàn)一個轉(zhuǎn)換腳本
import redef convert_sqlite_to_mysql(sql):# 移除 PRAGMA 語句sql = re.sub(r'PRAGMA .*?;', '', sql)# 修改 BEGIN TRANSACTION 為 START TRANSACTIONsql = sql.replace('BEGIN TRANSACTION;', 'START TRANSACTION;')# 替換 COMMIT TRANSACTION 為 COMMITsql = sql.replace('COMMIT;', 'COMMIT;')# 替換 ROLLBACK TRANSACTION 為 ROLLBACKsql = sql.replace('ROLLBACK;', 'ROLLBACK;')# 修改 AUTOINCREMENT 為 AUTO_INCREMENTsql = sql.replace('AUTOINCREMENT', 'AUTO_INCREMENT')# 替換數(shù)據(jù)類型sql = sql.replace('INTEGER', 'INT')sql = sql.replace('TEXT', 'VARCHAR(255)')# 替換雙引號為反引號sql = sql.replace('"', '`')# 添加 CHARACTER SET utf8mb4 到表定義中sql = re.sub(r'CREATE TABLE `(.*?)` \(', r'CREATE TABLE IF NOT EXISTS `\1` (', sql)# sql = re.sub(r'\);', r') ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;', sql)# 處理 INSERT 語句,確保數(shù)據(jù)字符集正確sql = re.sub(r'INSERT INTO `(.*?)` \((.*?)\) VALUES', r'INSERT INTO `\1` (\2) VALUES', sql)sql = re.sub(r'INSERT INTO `sqlite_sequence`.*?;', '', sql)return sql# 讀取原始的 SQLite dump 文件
with open('dump.sql', 'r', encoding='utf-8') as file:sql_dump = file.read()# 轉(zhuǎn)換為 MySQL 兼容的 SQL
mysql_compatible_sql = convert_sqlite_to_mysql(sql_dump)# 將轉(zhuǎn)換后的 SQL 寫入新的文件
with open('dump_mysql.sql', 'w', encoding='utf-8') as file:file.write(mysql_compatible_sql)print("SQL conversion complete. Please check 'dump_mysql.sql' for MySQL import.")
執(zhí)行py腳本生成dump_mysql.sql
這樣就轉(zhuǎn)換好了,緊接著進入mysql創(chuàng)建數(shù)據(jù)庫 mydatabase
CREATE DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE mydatabase;
去mysql安裝目錄,執(zhí)行。linux直接執(zhí)行此命令就行
mysql -u root -p mydatabase < dump_mysql.sql#如果遇到中文報錯\u等報錯,數(shù)據(jù)導(dǎo)入的時候就需要用一下命令,指定字符集導(dǎo)入進mysqlmysql --default-character-set=utf8mb4 -u root -p mydatabase < dump_mysql.sql
然后輸入mysql對應(yīng)的密碼,就行了
等待數(shù)據(jù)轉(zhuǎn)存完,就行了??赡軙笠粋€??sqlite_sequence 之類的異常,并不影響數(shù)據(jù)。至此就行了