MariaDB versus MySQL - Compatibility
Drop in replacement for MySQL
모든
실제적인 목적을 위해 MariaDB는 동일한 MySQL 버전 (예 : MySQL 5.1 -> MariaDB 5.1,
MariaDB 5.2 및 MariaDB 5.3)과 호환되는 바이너리 드롭입니다 .MySQL 5.5는 MariaDB 5.5와
호환되며 MariaDB 10.0에서도 호환됩니다. . 이것이 의미하는 바는 다음과 같습니다.
데이터 W 테이블 정의 파일 (.frm) 파일은 2 진 호환 가능합니다.
보기와의 비 호환성에 대해서는 아래 주를 참조하십시오!
모든 클라이언트 API, 프로토콜 및 구조체는 동일합니다.
모든 파일 이름, 바이너리, 경로, 포트, 소켓 등은 동일해야합니다.
모든 MySQL 커넥터 (PHP, Perl, Python, Java, .NET, MyODBC, Ruby, MySQL C 커넥터 등)는 MariaDB와 동일하게 작동합니다.
PHP5에 대해 알고 있어야 할 설치 문제가 있습니다 (예전 PHP5 클라이언트가 라이브러리 호환성을 확인하는 방법의 버그).
mysql-client 패키지는 MariaDB 서버에서도 작동한다.
공유 클라이언트 라이브러리는 MySQL 클라이언트 라이브러리와 바이너리 호환됩니다.
즉, 대부분의 경우 MySQL을 제거하고 MariaDB를 설치하면됩니다. (5.1과 같은 주 버전을 사용하는 경우 데이터 파일을 변환 할 필요가 없습니다.) 그러나 업그레이드를 마치려면 여전히 mysql_upgrade를 실행해야합니다. 이것은 당신의 mysql 권한과 이벤트 테이블이 MariaDB가 사용하는 새로운 필드로 업데이트되도록하기 위해 필요하다.
MySQL 코드베이스와 매월 병합하여 호환성을 유지하고 오라클이 추가 한 모든 기능과 버그 수정을 얻습니다.
또한 업그레이드 스크립트에 대한 많은 작업을 수행하여 MySQL 5.0에서 MySQL 5.1로 업그레이드하는 것보다 MySQL 5.0에서 MariaDB 5.1로 업그레이드하는 것이 더 쉬워졌습니다.
즉, MariaDB에는 MySQL에없는 새로운 옵션, 확장, 저장 엔진 및 버그 수정이 많이 있습니다. 다른 MariaDB 버전의 기능은 다른 MariaDB Releases에 있습니다.
Replication Compatibilit
MariaDB 5.1과 MySQL 5.1의 비 호환성
MariaDB가 MySQL보다 더 많은 정보를 제공하기 위해서는 MariaDB가 호환되지 않아야합니다.
다음은 MySQL 5.1 대신 MariaDB 5.1을 사용할 때 나타날 수있는 알려진 모든 사용자 수준 비 호환성 목록입니다.
설치 패키지 이름은 MySQL 대신 MariaDB로 시작합니다.
MariaDB가 많은 경우 MySQL보다 빠르기 때문에 타이밍이 다를 수 있습니다.
MariaDB의 mysqld는 my.cnf 파일의 [mariadb] 섹션을 읽습니다.
MariaDB와 정확히 같은 MariaDB 용으로 컴파일되지 않은 경우 이진 전용 저장소 엔진 라이브러리를 MariaDB와 함께 사용할 수 없습니다. (이는 서버 내부 구조 THD가 MySQL과 MariaDB 사이에서 다르므로 다른 MySQL 버전에서도 일반적입니다. 대부분의 사람들은 새로운 스토리지 엔진을로드하지 않으며 MariaDB는 MySQL보다 많은 스토리지 엔진을 제공하므로 문제가되지 않습니다.
MySQL
5.1과 마찬가지로 MariaDB가 컬럼에서 NULL을 무시하지 않기 때문에 CHECKSUM TABLE은 다른 결과를 나타낼 수
있습니다 (MySQL의 향후 버전에서는 MariaDB와 동일한 방식으로 체크섬을 계산해야합니다). --old 옵션으로 mysqld를 시작하면 MariaDB에서 'old style'체크섬을 얻을 수있다. 그러나 MariaDB의 MyISAM 및 Aria 스토리지 엔진은 내부적으로 새로운 체크섬을 사용하므로 --old를 사용하는 경우 체크섬을 행 단위로 계산해야하므로 CHECKSUM 명령의 속도가 느려집니다.
느린 쿼리 로그에는 쿼리에 대한 자세한 정보가 있습니다. 느린 쿼리 로그를 구문 분석하는 스크립트가있는 경우 문제가 될 수 있습니다.
기본적으로 MariaDB는 내부 임시 테이블을 처리하기 위해 Aria 스토리지 엔진을 기본적으로 활성화했기 때문에 MySQL보다 약간 더 많은 메모리를 사용합니다. 성능을 희생시키면서 MariaDB에 메모리가 거의 필요하지 않은 경우 aria_pagecache_buffer_size 값을 1M (기본값은 128M)으로 설정할 수 있습니다.
새로운 명령 옵션, MariaDB의 새로운 기능 또는 새로운 스토리지 엔진을 사용하는 경우 더 이상 MySQL과 MariaDB간에 쉽게 이동할 수 없습니다.
MariaDB 5.2와 MySQL 5.1의 비 호환성
이 목록은 MariaDB 5.1과 MySQL 5.1 사이의 목록과 동일하며 추가 된 항목은 다음과 같습니다.
새 SQL_MODE 값이 추가되었습니다 : IGNORE_BAD_TABLE_OPTIONS. 설정되지 않은 경우 선택한 스토리지 엔진에서 지원하지 않는 테이블, 필드 또는 색인 속성 (옵션)을 사용하면 오류가 발생합니다. 이 변경으로 인해 mysql 데이터베이스의 잘못 정의 된 테이블에 대한 에러 로그에 경고가 발생하고 mysql_upgrade로이를 수정하십시오.
모든 실제적인 목적을 위해, MariaDB 5.2는 MariaDB 5.1 및 MySQL 5.1을 대체합니다.
MariaDB 5.3과 MySQL 5.1 및 MariaDB 5.2 간의 비 호환성
정의가있는 뷰 ALGORITHM = MERGE 또는 ALGORITHM = TEMPTABLE이 MariaDB 5.2와 MariaDB 5.3 사이에서 실수로 바뀌 었습니다! 이 정의 중 하나로 만든보기를 다시 만들어야합니다!
MariaDB가 무엇이 잘못되었는지에 대한 메시지에 더 많은 정보를 제공하기 때문에 잘못된 변환과 관련된 몇 가지 오류 메시지가 다릅니다.
- MariaDB 관련 오류의 오류 번호가 1900 년부터 시작되어 MySQL 오류와 충돌하지 않도록했습니다.
마이크로 초는 이제 모든 상황에서 작동합니다. 일부 상황에서 MySQL은 날짜와 시간에서 마이크로 초 부분을 잃어 버렸습니다.
UNIX_TIMESTAMP (constant-date-string)는 MariaDB에서 6 자리 소수점이있는 타임 스탬프를 반환하는 반면, MySQL은 소수점없이 반환합니다. 파티션 함수로 UNIX_TIMESTAMP ()를 사용하면이 문제가 발생할 수 있습니다. FLOOR (UNIX_TIMESTAMP (..))를 사용하거나 날짜 문자열을 20080101000000과 같은 날짜 번호로 변경하여이 문제를 해결할 수 있습니다.
MariaDB는 날짜, 날짜 시간 및 시간 소인 값을 엄격하게 검사합니다. 예를 들어 UNIX_TIMESTAMP ( 'x')는 이제 0 대신 NULL을 반환합니다.
이전 --maria- 시작 옵션이 제거되었습니다. 대신에 --aria- 접두어를 사용해야합니다. (MariaDB 5.2는 - 마리아와 - 아리아를 모두 지원합니다)
SHOW PROCESSLIST에는 일부 명령의 진행 상황을 보여주는 추가 진행 열이 있습니다. --old-mode = NO_PROGRESS_INFO 또는 --old 플래그 (OLD_MODE 참조)를 사용하여 mysqld를 시작하여 비활성화 할 수 있습니다.
INFORMATION_SCHEMA.PROCESSLIST에는 진행보고를위한 세 개의 새로운 열이 있습니다 : STAGE, MAX_STAGE 및 PROGRESS.
/ * M으로 시작하는 긴 주석! 또는 / * M! #####이 실행됩니다.
mysqld를 시작할 때 max_user_connections = 0 (연결 수를 의미)을 사용하면 mysqld가 실행 중일 때 전역 변수를 더 이상 변경할 수 없다. mysqld가 max_user_connections = 0으로 시작될 때 계수 구조 (각 연결마다 뮤텍스가 포함됨)를 할당하지 않기 때문입니다. 나중에 변수를 변경하면 잘못된 카운터로 이어질 수 있습니다. 런타임에이 변수를 변경할 수 있으려면 시작시 높은 값으로 설정하십시오.
max_user_connections (전역 변수와 GRANT 옵션 모두)를 -1로 설정하여 사용자가 서버에 연결하지 못하게 할 수 있습니다. 전역 max_user_connections 변수는 SUPER 특권이있는 사용자에게 영향을주지 않습니다.
IGNORE 지시어는 치명적 오류와 같은 모든 오류를 무시하지 않고 무시해도 안전합니다.