본문으로 건너뛰기
IntoSQL 홈

MariaDB에서 MySQL로 변환

mariadb-dump, mysqldump, phpMyAdmin, Adminer로 만든 .sql 또는 .sql.gz 덤프를 놓으면, 같은 테이블, 키, 인덱스, 데이터를 담은 MySQL 스크립트를 다운로드할 수 있어요. MySQL이(가) 그대로 담을 수 없는 값과 옮기지 않는 객체는 모두 보고서에 나와요.

내 파일
sqlshop_2024_mariadb.sql샘플 파일, 6.6kB
내 데이터베이스

18개 행 변환, 수정 4개, 거부 없음

보기

shop_2024_mariadb.sql의 테이블MariaDB 11.8.9-MariaDB-ubu2404 덤프 · mariadb-dump(으)로 작성됨 · utf8mb4

  • customers8개 행2
    8개 열
    idint(10) unsigned not null
    namevarchar(100) not null
    emailvarchar(150) not null
    countrychar(2) not null
    is_activetinyint(1) not null
    signed_update not null
    created_attimestamp not null
    last_ipvarchar(39)
  • orders10개 행2
    12개 열
    idint(10) unsigned not null
    customer_idint(10) unsigned not null
    statusenum('pending','paid','shipped','cancelled') not null
    totaldecimal(10,2) not null
    itemssmallint(5) unsigned not null
    ordered_atdatetime not null
    shipped_atdatetime
    notevarchar(255)
    order_refchar(36) not null
    invoiceint(11) not null
    detailsjson
    updated_attimestamp not null
-- Written by IntoSQL from a MySQL dump. Load it with: mysql --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(10) 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,
  `last_ip` varchar(39) DEFAULT NULL,
  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(10) unsigned NOT NULL AUTO_INCREMENT,
  `customer_id` int(10) unsigned NOT NULL,
  `status` enum('pending','paid','shipped','cancelled') NOT NULL DEFAULT 'pending',
  `total` decimal(10,2) NOT NULL,
  `items` smallint(5) unsigned NOT NULL DEFAULT 1,
  `ordered_at` datetime NOT NULL,
  `shipped_at` datetime DEFAULT NULL,
  `note` varchar(255) DEFAULT NULL,
  `order_ref` char(36) NOT NULL,
  `invoice` int(11) NOT NULL,
  `details` json 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`,`last_ip`) VALUES (1,'Ana Martínez','ana@example.com','MX',1,'2023-01-15','2023-01-15 10:24:00','::ffff:203.0.113.7'),(2,'Zoë Müller','zoe@example.de','DE',1,'2023-02-03','2023-02-03 08:11:42','2001:db8::1'),(3,'José Peña','jose@example.es','ES',0,'2023-03-21','2023-03-21 19:05:17',NULL),(4,'李雷','lilei@example.cn','CN',1,'2023-05-09','2023-05-09 02:40:00','::ffff:198.51.100.23'),(5,'Noah O\'Brien','noah@example.ie','IE',1,'0000-00-00','2023-06-30 14:00:00',NULL),(6,'Amélie Laurent','amelie@example.fr','FR',1,'2024-01-02','2024-01-02 09:30:00','2001:db8:85a3::8a2e:370:7334'),(7,'Ravi Patel','ravi@example.in','IN',0,'2024-02-29','2024-02-29 23:59:59','::ffff:192.0.2.200'),(8,'Sofia Rossi 🌻','sofia@example.it','IT',1,'2024-04-12','2024-04-12 12:12:12',NULL);
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`order_ref`,`invoice`,`details`,`updated_at`) VALUES (1,1,'shipped',129.90,3,'2024-03-01 10:00:00','2024-03-02 16:30:00',NULL,'0b7a4c2e-3f1d-4e8a-9c55-1a2b3c4d5e6f',1000,'{\"gift\": false}','2024-03-02 16:30:00'),(2,2,'paid',54.00,1,'2024-03-02 11:15:00',NULL,'Gift wrap 🎁','1c8b5d3f-4a2e-4f9b-8d66-2b3c4d5e6f70',1001,'{\"gift\": true, \"wrap\": \"red\"}','2024-03-02 11:20:00'),(3,1,'cancelled',12.50,1,'2024-03-03 09:45:00',NULL,'Customer changed their mind','2d9c6e4a-5b3f-4a0c-9e77-3c4d5e6f7081',1002,NULL,'2024-03-03 10:00:00'),(4,4,'shipped',980.00,12,'2024-03-05 02:10:00','2024-03-07 08:00:00','请小心轻放','3e0d7f5b-6c4a-4b1d-8f88-4d5e6f708192',1003,'{\"fragile\": true}','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','4f1e806c-7d5b-4c2e-9a99-5e6f708192a3',1004,NULL,'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\"','50f2917d-8e6c-4d3f-8baa-6f708192a3b4',1005,'{\"fragile\": true}','2024-03-11 09:00:00'),(7,8,'paid',76.20,2,'2024-03-11 18:45:00',NULL,NULL,'6103a28e-9f7d-4e40-9cbb-708192a3b4c5',1006,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','7214b39f-a08e-4f51-8dcc-8192a3b4c5d6',1007,NULL,'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','8325c4a0-b19f-4062-9edd-92a3b4c5d6e7',1008,'{\"parcels\": [1, 2]}','2024-03-15 10:00:00'),(10,7,'paid',1499.00,1,'2024-03-15 21:05:00',NULL,'C:\\Users\\ravi\\invoice.pdf','9436d5b1-c2a0-4173-8fee-a3b4c5d6e7f8',1009,NULL,'2024-03-15 21:05:00');

SET UNIQUE_CHECKS = 1;
SET FOREIGN_KEY_CHECKS = 1;

수정 사항

  1. customers은(는) MySQL에 없는 콜레이션 utf8mb4_uca1400_ai_ci을(를) 써서 utf8mb4_unicode_520_ci을(를) 써요. 텍스트의 정렬과 비교가 조금 다를 수 있어요.
  2. customers의 "last_ip" 열은 MySQL에 없는 inet6(이)라서 같은 값을 담은 varchar(39)(으)로 만들었어요.
  3. orders은(는) MySQL에 없는 콜레이션 utf8mb4_uca1400_ai_ci을(를) 써서 utf8mb4_unicode_520_ci을(를) 써요. 텍스트의 정렬과 비교가 조금 다를 수 있어요.
  4. orders의 "order_ref" 열은 MySQL에 없는 uuid(이)라서 같은 값을 담은 char(36)(으)로 만들었어요.

확인 필요

  • 1개 시퀀스를 만들지 않아요. MySQL에는 시퀀스가 없어요. 애플리케이션에 필요하면 다음 값을 테이블에 보관하세요.
  • orders의 "invoice" 열 기본값을 MySQL용으로 쓸 수 없어(a sequence) 기본값 없이 만들었어요. 새 행에 필요하면 기본값을 직접 추가하세요.

파일은 이 컴퓨터에서 변환되고 업로드되지 않아요.

다른 샘플:

MariaDB에서 MySQL로 바뀌는 점

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

  • utf8mb4_0900_* and utf8mb4_uca1400_* collations

    utf8mb4_unicode_520_ci (바이너리는 utf8mb4_bin)

    MySQL은 새 콜레이션을 몰라요. 대부분의 MySQL 8 덤프가 다른 곳에서 불러와지지 않는 오류가 바로 이것이에요. unicode_520이 같은 Unicode 규칙을 가장 가깝게 따라요.

    보고서 줄: collation_replaced

  • zero, partial or impossible dates (0000-00-00, 2024-02-30)

    유지

    스크립트는 ALLOW_INVALID_DATES를 켜고 NO_ZERO_DATE 없이 불러오므로, MySQL은 원본과 같은 값을 유지해요.

  • TIME

    TIME, 기간 포함

    같은 타입이고 범위도 같아요.

  • TINYINT(1), BOOL

    TINYINT(1)

    같은 타입이고 값도 같아요.

  • UNSIGNED and ZEROFILL

    유지

    같은 타입이에요.

  • ENUM and SET, the '' error value included

    유지

    같은 타입이에요. 스크립트는 strict 모드 없이 불러오므로 오류 값도 그대로 들어가요.

  • JSON

    JSON

    MySQL은 같은 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

    일반 열

    보이지 않는 열은 MySQL은 8.0.23부터, MariaDB는 10.3부터 있어요.

    보고서 줄: invisible_column

  • CHECK constraints

    유지(MySQL 5.7은 구문만 읽고 무시해요)

    같은 체크 제약을 항목별로 변환해요.

  • 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)

    varchar(15), varchar(39), char(36)

    MySQL에는 이런 타입이 없어요. MariaDB가 이 타입에 쓰는 텍스트를 유지해요.

    보고서 줄: type_replaced

  • BINARY, VARBINARY, BLOB

    유지

    바이트는 바이트 그대로 남아요.

  • PARTITION BY

    하나의 테이블

    행은 같아요. 필요하면 테이블을 다시 파티션으로 나누세요.

    보고서 줄: partitions_dropped

  • WITH SYSTEM VERSIONING (MariaDB)

    현재 행만 담은 테이블

    덤프에는 현재 행만 들어 있어요. MySQL에는 시스템 버전 관리가 없어요.

    보고서 줄: system_versioning_dropped

  • Aria, ColumnStore, CONNECT, Spider, RocksDB (MariaDB)

    InnoDB

    MySQL에는 이 엔진들이 없어요. 다른 엔진은 모두 유지돼요.

    보고서 줄: engine_dropped

  • CREATE SEQUENCE (MariaDB)

    만들지 않음

    MySQL에는 시퀀스가 없어요.

    보고서 줄: sequence_not_converted

  • 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

    MySQL 5.7과 8.0에는 vector 타입이 없어요. JSON 배열은 모든 버전에서 모든 부동소수점 값을 유지해요.

    보고서 줄: type_replaced

MariaDB에서MySQL에서보고서 줄
utf8mb4_0900_* and utf8mb4_uca1400_* collationsutf8mb4_unicode_520_ci (바이너리는 utf8mb4_bin)MySQL은 새 콜레이션을 몰라요. 대부분의 MySQL 8 덤프가 다른 곳에서 불러와지지 않는 오류가 바로 이것이에요. unicode_520이 같은 Unicode 규칙을 가장 가깝게 따라요.collation_replaced
zero, partial or impossible dates (0000-00-00, 2024-02-30)유지스크립트는 ALLOW_INVALID_DATES를 켜고 NO_ZERO_DATE 없이 불러오므로, MySQL은 원본과 같은 값을 유지해요.
TIMETIME, 기간 포함같은 타입이고 범위도 같아요.
TINYINT(1), BOOLTINYINT(1)같은 타입이고 값도 같아요.
UNSIGNED and ZEROFILL유지같은 타입이에요.
ENUM and SET, the '' error value included유지같은 타입이에요. 스크립트는 strict 모드 없이 불러오므로 오류 값도 그대로 들어가요.
JSONJSONMySQL은 같은 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일반 열보이지 않는 열은 MySQL은 8.0.23부터, MariaDB는 10.3부터 있어요.invisible_column
CHECK constraints유지(MySQL 5.7은 구문만 읽고 무시해요)같은 체크 제약을 항목별로 변환해요.
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)varchar(15), varchar(39), char(36)MySQL에는 이런 타입이 없어요. MariaDB가 이 타입에 쓰는 텍스트를 유지해요.type_replaced
BINARY, VARBINARY, BLOB유지바이트는 바이트 그대로 남아요.
PARTITION BY하나의 테이블행은 같아요. 필요하면 테이블을 다시 파티션으로 나누세요.partitions_dropped
WITH SYSTEM VERSIONING (MariaDB)현재 행만 담은 테이블덤프에는 현재 행만 들어 있어요. MySQL에는 시스템 버전 관리가 없어요.system_versioning_dropped
Aria, ColumnStore, CONNECT, Spider, RocksDB (MariaDB)InnoDBMySQL에는 이 엔진들이 없어요. 다른 엔진은 모두 유지돼요.engine_dropped
CREATE SEQUENCE (MariaDB)만들지 않음MySQL에는 시퀀스가 없어요.sequence_not_converted
views, triggers, procedures, functions and events보고서에 나열직접 다시 만들 수 있도록 나열해요. 이 코드에는 정의자와 서버 기능이 적혀 있는 경우가 많아요.not_converted_objects
NOT NULL columns with values that become NULLNOT 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 TABLEGEOMETRYMySQL의 지오메트리 형식을 값에서 알아봐요.
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-8Latin-1 (Windows-1252)로 읽음MySQL의 latin1은 Windows-1252이며, 이런 덤프에서 흔히 쓰는 인코딩이에요.charset_guessed
sjis, cp932, gbk, big5 dumpsUTF-8로 읽고 경고 표시이 인코딩은 아직 디코딩하지 않아요.unsupported_charset
UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rows계산함일부 덤프 도구는 값을 이런 함수 호출로 써요. 호출이 만드는 값으로 읽어요.
other expressions in rowsNULL데이터베이스를 실행하지 않는 변환기는 이 식을 계산할 수 없어요.expression_value
DEFAULT in VALUES열의 기본값리터럴 기본값을 행에 복사해요.default_keyword_filled
DEFAULT in VALUES without a literal defaultNULL복사할 값이 없어요.default_keyword_null
REPLACE and INSERT IGNORE일반 행덤프에는 키마다 행이 하나라서 행은 같아요.replace_as_insert
types IntoSQL doesn't knowLONGBLOBBLOB은 어떤 값의 바이트든 담아요. 불러온 뒤 타입을 바꾸세요.unknown_type
values that don't fit their columnNULL손상되었거나 직접 작성한 덤프에는 열이 담을 수 없는 값이 있을 수 있어요. 나머지를 불러올 수 있도록 이 값은 NULL이 돼요.invalid_value_null
unreadable geometriesNULL지오메트리가 아닌 바이트는 지오메트리로 저장할 수 없어요.bad_geometry
TIMESTAMP유지, 덤프에 명시된 시간대로 불러옴스크립트가 덤프와 같은 시간대를 설정하므로 모든 시점이 같아요.
VECTOR(n) (MariaDB 11.7+)부동소수점 값을 배열로 담은 jsonMySQL 5.7과 8.0에는 vector 타입이 없어요. JSON 배열은 모든 버전에서 모든 부동소수점 값을 유지해요.type_replaced

스크립트를 MySQL에 불러오기

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

mysql --default-character-set=utf8mb4 mydb < mariadb.mysql.sql

외래 키는 덤프에 선언된 대로 만들고, 행을 불러오는 동안 FOREIGN_KEY_CHECKS=0을 써요. 그래서 존재하지 않는 행을 가리키는 행이 있어도 불러오기가 멈추지 않아요.

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

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

좋은 결과를 위한 MariaDB 덤프 방법

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

  • --default-character-set=utf8mb4는 이모지와 다른 4바이트 문자를 유지해요. utf8mb3 덤프는 변환기가 보기 전에 이 문자를 잃어요.
  • --hex-blob은 바이너리 열과 VECTOR 값을 16진수로 써서, 시스템 사이에 복사해도 손상되지 않아요.
  • --routines --triggers --events는 이 객체들을 덤프에 넣어 보고서가 나열할 수 있게 해요.

변환되지 않는 것

뷰, 트리거, 저장 프로시저, 함수, 이벤트는 MariaDB의 자체 언어로 작성돼요. 보고서에 이름으로 나열되고 몰래 빠지는 일은 없으므로, MySQL에 맞게 다시 작성할 수 있어요.

MariaDB에서 MySQL로 변환에 관한 질문

여기에 답이 없나요? 문의 페이지로 연락하시면 담당자가 답장해요. 문의 페이지

덤프가 업로드되나요?

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

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

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

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

MariaDB 10.3부터 12까지의 mariadb-dump와 mysqldump로 만든 덤프예요. INSERT는 테이블마다 하나여도 행마다 하나여도 돼요. 모든 테스트 덤프는 MariaDB 10.11, 11.4, 11.8에서 만들고 원본과 셀 단위로 비교해요.

UUID, INET6, JSON, VECTOR 열은 유지되나요?

MySQL 5.7과 8.0에는 이런 타입이 없으므로 UUID는 char(36), INET4와 INET6은 varchar, JSON은 json, VECTOR는 부동소수점 값의 json 배열이 돼요.

AUTO_INCREMENT 값과 시퀀스는 유지되나요?

AUTO_INCREMENT는 그대로 유지되고 덤프가 끝난 지점부터 이어져요. MySQL에는 시퀀스가 없으므로 시퀀스와 거기서 값을 가져오는 기본값은 보고서에 나와요.

저장 프로시저와 트리거는 어떻게 되나요?

변환하지 않고 보고서에 이름으로 나열하므로, 다시 만들기 전에 각각을 MySQL에서 확인할 수 있어요.

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

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