---
title: "브라우저에서 SQLite을(를) MariaDB로 마이그레이션"
description: "SQLite 데이터베이스를 MariaDB로 마이그레이션. .db 파일이나 덤프를 같은 테이블, 키, 데이터의 스크립트로 바꾸고 모든 변경을 보고해요."
canonical: https://intosql.com/ko/sqlite-to-mariadb
last_updated: 2026-10-15
---

# 브라우저에서 SQLite을(를) MariaDB로 마이그레이션

SQLite 데이터베이스 파일(.db, .sqlite, .sqlite3)이나 sqlite3의 .dump가 쓴 SQL을 놓으면, 같은 테이블, 키, 인덱스, 데이터를 담은 MariaDB 스크립트를 다운로드할 수 있어요. 각 열은 값이 들어가는 타입이 되고, MariaDB이(가) 그대로 담을 수 없는 값은 모두 보고서에 나와요.

[SQLite에서 MariaDB로 마이그레이션 가이드](https://intosql.com/docs/migrations/sqlite-to-mariadb)

[SQLite에서 MariaDB로의 데이터 타입](https://intosql.com/docs/types/sqlite-to-mariadb)

## SQLite에서 MariaDB로 바뀌는 점

각 행은 변환기가 적용하는 규칙이며, 규칙이 데이터를 바꿀 때 보고서에 쓰는 줄이 함께 나와요.

| SQLite에서 | MariaDB에서 | 보고서 줄 |
| --- | --- | --- |
| declared types (any text: VARCHAR(255), DATETIME, BOOLEAN, JSON or none) | 열의 모든 값이 들어가는 타입 |  |
| BOOLEAN, BOOL | tinyint(1) |  |
| TEXT, VARCHAR(n), CHAR(n), CLOB | 1024자까지는 varchar(n), 그 이상은 text 타입 |  |
| DECIMAL(p,s), NUMERIC | 모든 값이 들어가면 정확한 타입, 아니면 double |  |
| BLOB, and columns holding bytes | blob 타입 |  |
| DATE, DATETIME, TIMESTAMP holding ISO 8601 text | date, datetime(p) |  |
| JSON holding JSON text | json |  |
| Infinity in REAL columns | NULL | `invalid_value_null` |
| INTEGER PRIMARY KEY, AUTOINCREMENT | AUTO_INCREMENT, 가장 큰 id 또는 sqlite_sequence 값 다음부터 이어짐 |  |
| COLLATE NOCASE | 정확한 비교 (utf8mb4_bin) | `case_insensitive_collation` |
| generated columns | 생성 열, 원본과 같이 STORED 또는 VIRTUAL |  |
| generated columns with functions IntoSQL doesn't write, and the || operator | 일반 열 | `generated_not_translated` |
| defaults with functions IntoSQL doesn't write (strftime, randomblob) | 기본값 없음 | `default_not_translated` |
| CHECK constraints | 변환됨 |  |
| CHECK constraints with functions IntoSQL doesn't write | 만들지 않음 | `check_skipped` |
| partial and expression indexes | 만들지 않음 | `index_skipped` |
| foreign keys (unenforced unless PRAGMA foreign_keys=ON) | 외래 키, FOREIGN_KEY_CHECKS=0으로 불러옴 |  |
| foreign keys to tables the dump doesn't create | 만들지 않음 | `foreign_key_skipped` |
| primary keys holding NULL, and NOT NULL columns with values that become NULL | NOT NULL 제거 | `not_null_relaxed` |
| views, triggers and virtual tables (FTS, R*Tree) | 보고서에 나열 | `not_converted_objects` |
| dumps without CREATE TABLE (--data-only) | 값으로 판단한 타입 | `no_schema` |
| expressions in INSERT values other than the text functions dumps write | NULL | `expression_value` |
| NUL characters in text | 유지 |  |
| text that isn't valid UTF-8 | 잘못된 바이트를 대체 문자로 | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | 그대로 복사 | `mojibake_suspected` |

## 스크립트를 MariaDB에 불러오기

스크립트는 테이블을 만들고 행을 복사한 다음 키, 인덱스, 외래 키를 추가해요. 그래서 빨리 불러오고 첫 오류에서 멈춰요.

```shell
mariadb --default-character-set=utf8mb4 mydb < sqlite.mariadb.sql
```

외래 키는 덤프에 선언된 대로 만들고, mysqldump처럼 행을 불러오는 동안 FOREIGN_KEY_CHECKS=0을 써요.

큰 덤프는 서버와 같은 컴퓨터에서 클라이언트를 실행하고, 한 행이 아주 크면 max_allowed_packet을 늘리세요.

IntoSQL Pro는 데스크톱 앱이나 명령줄에서 파일을 MariaDB에 바로 불러와요. 스크립트를 따로 만들 필요가 없어요.

## 좋은 결과를 위한 SQLite 덤프 방법

변환기는 덤프에 담긴 내용을 읽어요. 다음 옵션을 쓰면 더 많은 데이터가 덤프에 남아요:

- 데이터베이스 파일 자체를 그대로 변환하며, 브라우저에서 페이지 단위로 읽어요. 변경 사항이 -wal 파일에 남지 않도록 먼저 파일에 쓰고 있는 앱을 닫으세요.
- sqlite3 app.db .dump > app.sql은 같은 데이터베이스를 SQL로 써요. 이 SQL도 .sql 또는 .sql.gz로 변환돼요.
- DB Browser for SQLite에서는 File, Export, Database to SQL file 순서로 선택하면 그 SQL을 써요. Python의 iterdump()도 마찬가지예요.

## 변환되지 않는 것

뷰와 트리거는 SQLite의 자체 언어로 작성돼요. 보고서에 이름으로 나열되고 몰래 빠지는 일은 없으므로, MariaDB에 맞게 다시 작성할 수 있어요. FTS5와 R*Tree 같은 가상 테이블도 나열되고, 그 섀도 테이블은 제외돼요.

## SQLite에서 MariaDB로 변환에 관한 질문

### 덤프가 업로드되나요?

아니요. 변환기는 브라우저에서 실행되고 디스크의 덤프를 조각조각 읽으므로, 덤프가 컴퓨터 밖으로 나가지 않아요. 데스크톱 앱과 명령줄도 컴퓨터에서 변환해요.

### 덤프는 얼마나 커도 되나요?

변환기는 덤프 전체를 메모리에 올리지 않아요. 파일을 범위별로 두 번 읽고, 읽는 대로 스크립트를 써요. 수 GB 덤프도 브라우저, 데스크톱 앱, 명령줄에서 변환돼요.

### .db 파일 자체를 변환할 수 있나요?

네. .db, .sqlite 또는 .sqlite3 파일을 놓으세요. 브라우저에서 읽고 업로드하지 않아요. NUL 문자가 든 텍스트와 double 값의 모든 자릿수가 저장된 그대로 들어오며, .dump에서는 이 부분이 잘릴 수 있어요.

### 어떤 SQLite 버전의 덤프를 읽나요?

SQLite 3.0 이상의 UTF-8 또는 UTF-16 데이터베이스 파일과, sqlite3 셸의 .dump나 Python의 iterdump()로 만든 덤프예요. 모든 테스트 파일과 덤프는 sqlite3 3.31부터 3.54까지에서 만들고, STRICT와 WITHOUT ROWID 테이블을 포함해 원본과 셀 단위로 비교해요.

### SQLite이(가) 타입을 강제하지 않을 때 열 타입은 어떻게 정해지나요?

선언된 타입은 힌트이고 값이 결정해요. 모든 값이 들어가면 열은 integer, decimal, double, date, datetime, tinyint(1), blob, text 타입 중 하나가 돼요. 값이 섞인 열은 그 텍스트를 유지하고, 보고서에 어떤 열인지 나와요.

### INTEGER PRIMARY KEY와 AUTOINCREMENT는 유지되나요?

네. INTEGER PRIMARY KEY는 AUTO_INCREMENT가 되고, 모든 행은 id를 유지해요. 다음 id는 가장 큰 id 다음부터, AUTOINCREMENT가 있으면 sqlite_sequence 값 다음부터 이어져요.

### 뷰와 트리거는 어떻게 되나요?

데이터베이스마다 자체 언어로 작성하므로 변환하지 않고 보고서에 이름으로 나열해요.

### 스크립트는 어떤 MariaDB 버전에서 불러올 수 있나요?

MariaDB 10.11 이상이에요. 모든 테스트 덤프를 10.11과 11.4에서 불러오며, 문제가 생기면 첫 오류에서 멈춰요.

## SQLite에서

- [SQLite에서 PostgreSQL로](https://intosql.com/ko/sqlite-to-postgresql)
- [SQLite에서 MySQL로](https://intosql.com/ko/sqlite-to-mysql)
- [SQLite에서 SQLite로](https://intosql.com/ko/sqlite-to-sqlite)
- [SQLite에서 SQL Server로](https://intosql.com/ko/sqlite-to-sql-server)
- [SQLite에서 Oracle로](https://intosql.com/ko/sqlite-to-oracle)

## MariaDB로

- [MySQL에서 MariaDB로](https://intosql.com/ko/mysql-to-mariadb)
- [MariaDB에서 MariaDB로](https://intosql.com/ko/mariadb-to-mariadb)
- [PostgreSQL에서 MariaDB로](https://intosql.com/ko/postgresql-to-mariadb)
- [SQL Server에서 MariaDB로](https://intosql.com/ko/sql-server-to-mariadb)
- [Oracle에서 MariaDB로](https://intosql.com/ko/oracle-to-mariadb)

## 가이드와 모든 조합

- [MariaDB에서 SQLite로](https://intosql.com/ko/mariadb-to-sqlite)
- [SQLite에서 MariaDB로 마이그레이션 가이드](https://intosql.com/docs/migrations/sqlite-to-mariadb)
- [SQLite에서 MariaDB로의 데이터 타입](https://intosql.com/docs/types/sqlite-to-mariadb)
- [모든 데이터베이스 조합](https://intosql.com/ko/database-migration)
