MySQL에서 MariaDB로 변환
mysqldump, mariadb-dump, mysqlpump, phpMyAdmin, Adminer에서 만든 .sql 또는 .sql.gz 덤프를 놓으면, 같은 테이블, 키, 인덱스, 데이터를 담은 MariaDB 스크립트를 다운로드할 수 있어요. MariaDB이(가) 그대로 담을 수 없는 값과 옮기지 않는 객체는 모두 보고서에 나와요.
18개 행 변환, 수정 2개, 거부 없음
shop_2024.sql의 테이블MySQL 8.0.46 덤프 · mysqldump(으)로 작성됨 · utf8mb4
customers8개 행1
7개 열 id int unsigned not null name varchar(100) not null email varchar(150) not null country char(2) not null is_active tinyint(1) not null signed_up date not null created_at timestamp not null orders10개 행1
9개 열 id int unsigned not null customer_id int unsigned not null status enum('pending','paid','shipped','cancelled') not null total decimal(10,2) not null items smallint unsigned not null ordered_at datetime not null shipped_at datetime note varchar(255) updated_at timestamp not null
-- Written by IntoSQL from a MySQL dump. Load it with: mariadb --default-character-set=utf8mb4 <database> < <file>
SET NAMES utf8mb4;
SET TIME_ZONE = '+00:00';
SET FOREIGN_KEY_CHECKS = 0;
SET UNIQUE_CHECKS = 0;
SET SQL_MODE = 'NO_AUTO_VALUE_ON_ZERO,ALLOW_INVALID_DATES';
CREATE TABLE `customers` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`email` varchar(150) NOT NULL,
`country` char(2) NOT NULL DEFAULT 'US',
`is_active` tinyint(1) NOT NULL DEFAULT 1,
`signed_up` date NOT NULL DEFAULT '0000-00-00',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uq_email` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci COMMENT='People who bought at least once';
CREATE TABLE `orders` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`customer_id` int unsigned NOT NULL,
`status` enum('pending','paid','shipped','cancelled') NOT NULL DEFAULT 'pending',
`total` decimal(10,2) NOT NULL,
`items` smallint unsigned NOT NULL DEFAULT 1,
`ordered_at` datetime NOT NULL,
`shipped_at` datetime DEFAULT NULL,
`note` varchar(255) DEFAULT NULL,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_customer` (`customer_id`),
KEY `idx_status_date` (`status`,`ordered_at`),
CONSTRAINT `fk_orders_customer` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (1,'Ana Martínez','ana@example.com','MX',1,'2023-01-15','2023-01-15 10:24:00'),(2,'Zoë Müller','zoe@example.de','DE',1,'2023-02-03','2023-02-03 08:11:42'),(3,'José Peña','jose@example.es','ES',0,'2023-03-21','2023-03-21 19:05:17'),(4,'李雷','lilei@example.cn','CN',1,'2023-05-09','2023-05-09 02:40:00'),(5,'Noah O\'Brien','noah@example.ie','IE',1,'0000-00-00','2023-06-30 14:00:00'),(6,'Amélie Laurent','amelie@example.fr','FR',1,'2024-01-02','2024-01-02 09:30:00'),(7,'Ravi Patel','ravi@example.in','IN',0,'2024-02-29','2024-02-29 23:59:59'),(8,'Sofia Rossi 🌻','sofia@example.it','IT',1,'2024-04-12','2024-04-12 12:12:12');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`updated_at`) VALUES (1,1,'shipped',129.90,3,'2024-03-01 10:00:00','2024-03-02 16:30:00',NULL,'2024-03-02 16:30:00'),(2,2,'paid',54.00,1,'2024-03-02 11:15:00',NULL,'Gift wrap 🎁','2024-03-02 11:20:00'),(3,1,'cancelled',12.50,1,'2024-03-03 09:45:00',NULL,'Customer changed their mind','2024-03-03 10:00:00'),(4,4,'shipped',980.00,12,'2024-03-05 02:10:00','2024-03-07 08:00:00','请小心轻放','2024-03-07 08:00:00'),(5,5,'pending',45.75,2,'2024-03-08 17:20:00',NULL,'Leave at the door; ring twice','2024-03-08 17:20:00'),(6,6,'shipped',310.40,5,'2024-03-10 13:00:00','2024-03-11 09:00:00','Fragile: \"glass\"','2024-03-11 09:00:00'),(7,8,'paid',76.20,2,'2024-03-11 18:45:00',NULL,NULL,'2024-03-11 18:46:00'),(8,2,'',19.99,1,'2024-03-12 08:00:00',NULL,'Status lost in an old import','2024-03-12 08:00:00'),(9,3,'shipped',64.00,2,'2024-03-14 15:30:00','0000-00-00 00:00:00','Shipping date never recorded','2024-03-15 10:00:00'),(10,7,'paid',1499.00,1,'2024-03-15 21:05:00',NULL,'C:\\Users\\ravi\\invoice.pdf','2024-03-15 21:05:00');
SET UNIQUE_CHECKS = 1;
SET FOREIGN_KEY_CHECKS = 1;
수정 사항
- customers은(는) MariaDB에 없는 콜레이션 utf8mb4_0900_ai_ci을(를) 써서 utf8mb4_unicode_520_ci을(를) 써요. 텍스트의 정렬과 비교가 조금 다를 수 있어요.
- orders은(는) MariaDB에 없는 콜레이션 utf8mb4_0900_ai_ci을(를) 써서 utf8mb4_unicode_520_ci을(를) 써요. 텍스트의 정렬과 비교가 조금 다를 수 있어요.
파일은 이 컴퓨터에서 변환되고 업로드되지 않아요.
다른 샘플:
MySQL에서 MariaDB로 바뀌는 점
각 행은 변환기가 적용하는 규칙이며, 규칙이 데이터를 바꿀 때 보고서에 쓰는 줄이 함께 나와요.
utf8mb4_0900_* and utf8mb4_uca1400_* collations
utf8mb4_0900_*는 utf8mb4_unicode_520_ci (바이너리는 utf8mb4_bin)
MariaDB는 새 콜레이션을 몰라요. 대부분의 MySQL 8 덤프가 다른 곳에서 불러와지지 않는 오류가 바로 이것이에요. unicode_520이 같은 Unicode 규칙을 가장 가깝게 따라요.
보고서 줄: collation_replaced
zero, partial or impossible dates (0000-00-00, 2024-02-30)
유지
스크립트는 ALLOW_INVALID_DATES를 켜고 NO_ZERO_DATE 없이 불러오므로, MariaDB는 원본과 같은 값을 유지해요.
TIME
TIME, 기간 포함
같은 타입이고 범위도 같아요.
TINYINT(1), BOOL
TINYINT(1)
같은 타입이고 값도 같아요.
UNSIGNED and ZEROFILL
유지
같은 타입이에요.
ENUM and SET, the '' error value included
유지
같은 타입이에요. 스크립트는 strict 모드 없이 불러오므로 오류 값도 그대로 들어가요.
JSON
JSON(MariaDB가 검사하는 LONGTEXT)
MariaDB는 같은 JSON 텍스트를 읽어요.
NUL bytes in text
유지
값은 원본과 같은 이스케이프로 복사해요.
AUTO_INCREMENT
테이블 카운터가 있는 AUTO_INCREMENT
카운터는 MyISAM의 그룹별 카운터를 포함해 원본이 멈춘 곳부터 이어져요.
MyISAM AUTO_INCREMENT on the second column of a key, in a table that isn't MyISAM in the dump
열에 대한 인덱스와 테이블당 카운터 하나
InnoDB는 인덱스의 첫 열일 때만 열에 번호를 매기고, 카운터는 테이블 전체에 하나예요.
보고서 줄: myisam_group_autoincrement
ON UPDATE CURRENT_TIMESTAMP
유지
같은 절이며, 열의 초 소수부도 같아요.
generated columns
원본과 같은 VIRTUAL 또는 STORED
같은 수식을 항목별로 변환해요.
generated columns with functions IntoSQL doesn't read
일반 열
IntoSQL이 읽을 수 없는 수식은 일반 열로 남고 보고서에 한 줄 기록돼요.
보고서 줄: generated_not_translated
INVISIBLE columns
INVISIBLE 열
보이지 않는 열은 MySQL은 8.0.23부터, MariaDB는 10.3부터 있어요.
CHECK constraints
유지
같은 체크 제약을 항목별로 변환해요.
CHECK constraints with functions IntoSQL doesn't read
만들지 않음
IntoSQL이 읽을 수 없는 체크 제약은 제외하고 보고해요.
보고서 줄: check_skipped
CHECK ... NOT ENFORCED
만들지 않음
MySQL 5.7과 MariaDB는 체크 제약을 적용하지 않고 보관할 수 없고, 행이 제약을 어길 수 있어요.
보고서 줄: check_not_enforced
expression defaults, and defaults on TEXT, BLOB, JSON and GEOMETRY
유지
MySQL은 8.0.13부터 받아요. 스크립트는 5.7에서도 불러오므로 이 값은 제외하고 보고해요. MariaDB는 받아요.
보고서 줄: default_not_translated
functional indexes, KEY ((expr))
만들지 않음
MySQL은 8.0.13부터 식을 인덱싱하고 MariaDB는 전혀 하지 않아요. 인덱스가 있는 생성 열로 같은 효과를 낼 수 있어요.
보고서 줄: index_skipped
keys and indexes on a prefix, c(20)
유지
같은 인덱스예요.
FULLTEXT indexes
유지
같은 인덱스예요. MATCH ... AGAINST는 전처럼 작동해요.
SPATIAL indexes
유지
같은 인덱스예요.
foreign keys
유지, FOREIGN_KEY_CHECKS=0으로 불러옴
같은 키예요. 행은 원본 덤프에서처럼 불러와요.
GEOMETRY, POINT, POLYGON...
유지, 값마다 SRID 포함
서버 고유의 지오메트리 바이트를 SRID까지 포함해 복사해요.
INET4, INET6, UUID (MariaDB)
유지
MySQL에는 이런 타입이 없어요. MariaDB가 이 타입에 쓰는 텍스트를 유지해요.
BINARY, VARBINARY, BLOB
유지
바이트는 바이트 그대로 남아요.
PARTITION BY
하나의 테이블
행은 같아요. 필요하면 테이블을 다시 파티션으로 나누세요.
보고서 줄: partitions_dropped
WITH SYSTEM VERSIONING (MariaDB)
WITH SYSTEM VERSIONING, 현재 행부터 시작
덤프에는 현재 행만 들어 있어요. MySQL에는 시스템 버전 관리가 없어요.
Aria, ColumnStore, CONNECT, Spider, RocksDB (MariaDB)
유지
MySQL에는 이 엔진들이 없어요. 다른 엔진은 모두 유지돼요.
CREATE SEQUENCE (MariaDB)
다음 값을 포함한 CREATE SEQUENCE
MySQL에는 시퀀스가 없어요.
views, triggers, procedures, functions and events
보고서에 나열
직접 다시 만들 수 있도록 나열해요. 이 코드에는 정의자와 서버 기능이 적혀 있는 경우가 많아요.
보고서 줄: not_converted_objects
NOT NULL columns with values that become NULL
NOT NULL 제거
값을 NULL로 바꿔야 했던 열은 NOT NULL을 유지할 수 없어요. 유지하면 불러오기가 멈춰요.
보고서 줄: not_null_relaxed
text that isn't valid in its character set
잘못된 바이트를 대체 문자로
스크립트는 UTF-8이에요. UTF-8이 아닌 바이트가 있으면 불러오기가 멈춰요.
보고서 줄: invalid_utf8_replaced
text decoded twice (ñ)
그대로 복사
덤프에 정확히 이 문자들이 있으므로 그대로 복사하고, 보고서에서 알려 줘요.
보고서 줄: mojibake_suspected
dumps without CREATE TABLE
값으로 판단한 타입
--no-create-info로 만든 덤프에는 행만 있어서 타입을 값으로 판단해요.
보고서 줄: no_schema
geometries in a dump without CREATE TABLE
GEOMETRY
MySQL의 지오메트리 형식을 값에서 알아봐요.
SET NAMES utf8 from utf8mb4 tables
변환하고 경고 표시
MySQL 5.x의 mysqldump는 기본으로 3바이트 utf8을 쓰고, 변환기가 파일을 보기 전에 모든 이모지를 물음표로 바꿔요.
보고서 줄: dump_lost_four_byte_chars
dumps without SET NAMES whose text isn't UTF-8
Latin-1 (Windows-1252)로 읽음
MySQL의 latin1은 Windows-1252이며, 이런 덤프에서 흔히 쓰는 인코딩이에요.
보고서 줄: charset_guessed
sjis, cp932, gbk, big5 dumps
UTF-8로 읽고 경고 표시
이 인코딩은 아직 디코딩하지 않아요.
보고서 줄: unsupported_charset
UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rows
계산함
일부 덤프 도구는 값을 이런 함수 호출로 써요. 호출이 만드는 값으로 읽어요.
other expressions in rows
NULL
데이터베이스를 실행하지 않는 변환기는 이 식을 계산할 수 없어요.
보고서 줄: expression_value
DEFAULT in VALUES
열의 기본값
리터럴 기본값을 행에 복사해요.
보고서 줄: default_keyword_filled
DEFAULT in VALUES without a literal default
NULL
복사할 값이 없어요.
보고서 줄: default_keyword_null
REPLACE and INSERT IGNORE
일반 행
덤프에는 키마다 행이 하나라서 행은 같아요.
보고서 줄: replace_as_insert
types IntoSQL doesn't know
LONGBLOB
BLOB은 어떤 값의 바이트든 담아요. 불러온 뒤 타입을 바꾸세요.
보고서 줄: unknown_type
values that don't fit their column
NULL
손상되었거나 직접 작성한 덤프에는 열이 담을 수 없는 값이 있을 수 있어요. 나머지를 불러올 수 있도록 이 값은 NULL이 돼요.
보고서 줄: invalid_value_null
unreadable geometries
NULL
지오메트리가 아닌 바이트는 지오메트리로 저장할 수 없어요.
보고서 줄: bad_geometry
TIMESTAMP
유지, 덤프에 명시된 시간대로 불러옴
스크립트가 덤프와 같은 시간대를 설정하므로 모든 시점이 같아요.
VECTOR(n) (MariaDB 11.7+)
부동소수점 값을 배열로 담은 json
스크립트는 vector 타입이 없는 MariaDB 10.11 이상에서 불러와져요. JSON 배열은 모든 부동소수점 값을 유지하고, VEC_FromText로 다시 읽을 수 있어요.
보고서 줄: type_replaced
| MySQL에서 | MariaDB에서 | 보고서 줄 |
|---|---|---|
| utf8mb4_0900_* and utf8mb4_uca1400_* collations | utf8mb4_0900_*는 utf8mb4_unicode_520_ci (바이너리는 utf8mb4_bin)MariaDB는 새 콜레이션을 몰라요. 대부분의 MySQL 8 덤프가 다른 곳에서 불러와지지 않는 오류가 바로 이것이에요. unicode_520이 같은 Unicode 규칙을 가장 가깝게 따라요. | collation_replaced |
| zero, partial or impossible dates (0000-00-00, 2024-02-30) | 유지스크립트는 ALLOW_INVALID_DATES를 켜고 NO_ZERO_DATE 없이 불러오므로, MariaDB는 원본과 같은 값을 유지해요. | |
| TIME | TIME, 기간 포함같은 타입이고 범위도 같아요. | |
| TINYINT(1), BOOL | TINYINT(1)같은 타입이고 값도 같아요. | |
| UNSIGNED and ZEROFILL | 유지같은 타입이에요. | |
| ENUM and SET, the '' error value included | 유지같은 타입이에요. 스크립트는 strict 모드 없이 불러오므로 오류 값도 그대로 들어가요. | |
| JSON | JSON(MariaDB가 검사하는 LONGTEXT)MariaDB는 같은 JSON 텍스트를 읽어요. | |
| NUL bytes in text | 유지값은 원본과 같은 이스케이프로 복사해요. | |
| AUTO_INCREMENT | 테이블 카운터가 있는 AUTO_INCREMENT카운터는 MyISAM의 그룹별 카운터를 포함해 원본이 멈춘 곳부터 이어져요. | |
| MyISAM AUTO_INCREMENT on the second column of a key, in a table that isn't MyISAM in the dump | 열에 대한 인덱스와 테이블당 카운터 하나InnoDB는 인덱스의 첫 열일 때만 열에 번호를 매기고, 카운터는 테이블 전체에 하나예요. | myisam_group_autoincrement |
| ON UPDATE CURRENT_TIMESTAMP | 유지같은 절이며, 열의 초 소수부도 같아요. | |
| generated columns | 원본과 같은 VIRTUAL 또는 STORED같은 수식을 항목별로 변환해요. | |
| generated columns with functions IntoSQL doesn't read | 일반 열IntoSQL이 읽을 수 없는 수식은 일반 열로 남고 보고서에 한 줄 기록돼요. | generated_not_translated |
| INVISIBLE columns | INVISIBLE 열보이지 않는 열은 MySQL은 8.0.23부터, MariaDB는 10.3부터 있어요. | |
| CHECK constraints | 유지같은 체크 제약을 항목별로 변환해요. | |
| CHECK constraints with functions IntoSQL doesn't read | 만들지 않음IntoSQL이 읽을 수 없는 체크 제약은 제외하고 보고해요. | check_skipped |
| CHECK ... NOT ENFORCED | 만들지 않음MySQL 5.7과 MariaDB는 체크 제약을 적용하지 않고 보관할 수 없고, 행이 제약을 어길 수 있어요. | check_not_enforced |
| expression defaults, and defaults on TEXT, BLOB, JSON and GEOMETRY | 유지MySQL은 8.0.13부터 받아요. 스크립트는 5.7에서도 불러오므로 이 값은 제외하고 보고해요. MariaDB는 받아요. | default_not_translated |
| functional indexes, KEY ((expr)) | 만들지 않음MySQL은 8.0.13부터 식을 인덱싱하고 MariaDB는 전혀 하지 않아요. 인덱스가 있는 생성 열로 같은 효과를 낼 수 있어요. | index_skipped |
| keys and indexes on a prefix, c(20) | 유지같은 인덱스예요. | |
| FULLTEXT indexes | 유지같은 인덱스예요. MATCH ... AGAINST는 전처럼 작동해요. | |
| SPATIAL indexes | 유지같은 인덱스예요. | |
| foreign keys | 유지, FOREIGN_KEY_CHECKS=0으로 불러옴같은 키예요. 행은 원본 덤프에서처럼 불러와요. | |
| GEOMETRY, POINT, POLYGON... | 유지, 값마다 SRID 포함서버 고유의 지오메트리 바이트를 SRID까지 포함해 복사해요. | |
| INET4, INET6, UUID (MariaDB) | 유지MySQL에는 이런 타입이 없어요. MariaDB가 이 타입에 쓰는 텍스트를 유지해요. | |
| BINARY, VARBINARY, BLOB | 유지바이트는 바이트 그대로 남아요. | |
| PARTITION BY | 하나의 테이블행은 같아요. 필요하면 테이블을 다시 파티션으로 나누세요. | partitions_dropped |
| WITH SYSTEM VERSIONING (MariaDB) | WITH SYSTEM VERSIONING, 현재 행부터 시작덤프에는 현재 행만 들어 있어요. MySQL에는 시스템 버전 관리가 없어요. | |
| Aria, ColumnStore, CONNECT, Spider, RocksDB (MariaDB) | 유지MySQL에는 이 엔진들이 없어요. 다른 엔진은 모두 유지돼요. | |
| CREATE SEQUENCE (MariaDB) | 다음 값을 포함한 CREATE SEQUENCEMySQL에는 시퀀스가 없어요. | |
| views, triggers, procedures, functions and events | 보고서에 나열직접 다시 만들 수 있도록 나열해요. 이 코드에는 정의자와 서버 기능이 적혀 있는 경우가 많아요. | not_converted_objects |
| NOT NULL columns with values that become NULL | NOT NULL 제거값을 NULL로 바꿔야 했던 열은 NOT NULL을 유지할 수 없어요. 유지하면 불러오기가 멈춰요. | not_null_relaxed |
| text that isn't valid in its character set | 잘못된 바이트를 대체 문자로스크립트는 UTF-8이에요. UTF-8이 아닌 바이트가 있으면 불러오기가 멈춰요. | invalid_utf8_replaced |
| text decoded twice (ñ) | 그대로 복사덤프에 정확히 이 문자들이 있으므로 그대로 복사하고, 보고서에서 알려 줘요. | mojibake_suspected |
| dumps without CREATE TABLE | 값으로 판단한 타입--no-create-info로 만든 덤프에는 행만 있어서 타입을 값으로 판단해요. | no_schema |
| geometries in a dump without CREATE TABLE | GEOMETRYMySQL의 지오메트리 형식을 값에서 알아봐요. | |
| SET NAMES utf8 from utf8mb4 tables | 변환하고 경고 표시MySQL 5.x의 mysqldump는 기본으로 3바이트 utf8을 쓰고, 변환기가 파일을 보기 전에 모든 이모지를 물음표로 바꿔요. | dump_lost_four_byte_chars |
| dumps without SET NAMES whose text isn't UTF-8 | Latin-1 (Windows-1252)로 읽음MySQL의 latin1은 Windows-1252이며, 이런 덤프에서 흔히 쓰는 인코딩이에요. | charset_guessed |
| sjis, cp932, gbk, big5 dumps | UTF-8로 읽고 경고 표시이 인코딩은 아직 디코딩하지 않아요. | unsupported_charset |
| UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rows | 계산함일부 덤프 도구는 값을 이런 함수 호출로 써요. 호출이 만드는 값으로 읽어요. | |
| other expressions in rows | NULL데이터베이스를 실행하지 않는 변환기는 이 식을 계산할 수 없어요. | expression_value |
| DEFAULT in VALUES | 열의 기본값리터럴 기본값을 행에 복사해요. | default_keyword_filled |
| DEFAULT in VALUES without a literal default | NULL복사할 값이 없어요. | default_keyword_null |
| REPLACE and INSERT IGNORE | 일반 행덤프에는 키마다 행이 하나라서 행은 같아요. | replace_as_insert |
| types IntoSQL doesn't know | LONGBLOBBLOB은 어떤 값의 바이트든 담아요. 불러온 뒤 타입을 바꾸세요. | unknown_type |
| values that don't fit their column | NULL손상되었거나 직접 작성한 덤프에는 열이 담을 수 없는 값이 있을 수 있어요. 나머지를 불러올 수 있도록 이 값은 NULL이 돼요. | invalid_value_null |
| unreadable geometries | NULL지오메트리가 아닌 바이트는 지오메트리로 저장할 수 없어요. | bad_geometry |
| TIMESTAMP | 유지, 덤프에 명시된 시간대로 불러옴스크립트가 덤프와 같은 시간대를 설정하므로 모든 시점이 같아요. | |
| VECTOR(n) (MariaDB 11.7+) | 부동소수점 값을 배열로 담은 json스크립트는 vector 타입이 없는 MariaDB 10.11 이상에서 불러와져요. JSON 배열은 모든 부동소수점 값을 유지하고, VEC_FromText로 다시 읽을 수 있어요. | type_replaced |
스크립트를 MariaDB에 불러오기
스크립트는 테이블을 만들고 행을 복사한 다음 키, 인덱스, 외래 키를 추가해요. 그래서 빨리 불러오고 첫 오류에서 멈춰요.
mariadb --default-character-set=utf8mb4 mydb < mysql.mariadb.sql외래 키는 덤프에 선언된 대로 만들고, mysqldump처럼 행을 불러오는 동안 FOREIGN_KEY_CHECKS=0을 써요.
큰 덤프는 서버와 같은 컴퓨터에서 클라이언트를 실행하고, 한 행이 아주 크면 max_allowed_packet을 늘리세요.
IntoSQL Pro는 데스크톱 앱이나 명령줄에서 파일을 MariaDB에 바로 불러와요. 스크립트를 따로 만들 필요가 없어요.
좋은 결과를 위한 MySQL 덤프 방법
변환기는 덤프에 담긴 내용을 읽어요. 다음 옵션을 쓰면 더 많은 데이터가 덤프에 남아요:
- --default-character-set=utf8mb4는 이모지와 기타 4바이트 문자를 유지해요. utf8 덤프는 변환기가 보기 전에 이 문자를 잃어요.
- --hex-blob은 바이너리 열을 16진수로 써서, 시스템 간에 복사해도 손상되지 않아요.
- --routines --triggers --events는 이 객체들을 덤프에 추가해서 보고서에 나열할 수 있게 해요.
변환되지 않는 것
뷰, 트리거, 저장 프로시저, 함수, 이벤트는 데이터베이스마다 자체 언어로 작성돼요. 보고서에 이름으로 나열되고 몰래 빠지는 일은 없으므로, MariaDB에 맞게 다시 작성할 수 있어요.
MySQL에서 MariaDB로 변환에 관한 질문
여기에 답이 없나요? 문의 페이지로 연락하시면 담당자가 답장해요. 문의 페이지
덤프가 업로드되나요?
아니요. 변환기는 브라우저에서 실행되고 디스크의 덤프를 조각조각 읽으므로, 덤프가 컴퓨터 밖으로 나가지 않아요. 데스크톱 앱과 명령줄도 컴퓨터에서 변환해요.
덤프는 얼마나 커도 되나요?
변환기는 덤프 전체를 메모리에 올리지 않아요. 파일을 범위별로 두 번 읽고, 읽는 대로 스크립트를 써요. 수 GB 덤프도 브라우저, 데스크톱 앱, 명령줄에서 변환돼요.
MariaDB 덤프도 읽나요?
네. mariadb-dump와 MariaDB 10.3부터 12까지의 덤프도 같은 방식으로 변환되며, MariaDB의 INET6, INET4, UUID 열도 포함돼요.
0000-00-00 날짜는 어떻게 되나요?
MariaDB은(는) 그대로 유지해요. 스크립트가 불러오는 동안 0 날짜와 불가능한 날짜를 받는 SQL 모드를 설정하므로 값이 그대로 들어가요.
AUTO_INCREMENT 값은 유지되나요?
네. AUTO_INCREMENT는 그대로이고, 테이블의 카운터는 덤프가 멈춘 곳부터 이어져요.
TINYINT(1)은 boolean이 되나요?
원본처럼 TINYINT(1)로 남으므로 모든 값이 숫자를 유지해요.
저장 프로시저와 트리거는 어떻게 되나요?
변환하지 않고 보고서에 이름으로 나열하므로, 다시 만들기 전에 하나씩 MariaDB에서 확인할 수 있어요. ON UPDATE CURRENT_TIMESTAMP는 그대로예요.
스크립트는 어떤 MariaDB 버전에서 불러올 수 있나요?
MariaDB 10.11 이상이에요. MySQL 5.7부터 9까지와 MariaDB의 모든 테스트 덤프를 10.11과 11.4에서 불러와요.