mysqldump를 사용해 SQL 스크립트를 만들어낼 때 여러가지 목적이 있겠지만 다른 데이터베이스와의 호환성을 염두에 두는 경우가 종종 있다. 예를 들어 MySQL을 개발용으로만 사용하고 다른 데이터베이스를 실운영용으로 사용하는 경우가 있을 수 있다.

데이터베이스간의 호환성 문제는 단순한 문제가 아니므로 이 글에서는 일단 mysqldump 명령만을 주제로 SQL 호환성을 최대한 높이는 방법을 알아보자. mysqldump로 결과물을 어느 정도 호환성 있게만 만들어도 많은 수고를 줄일 수 있다. 우선 mysqldump는 다음과 같은 형식으로 명령을 실행한다.

mysqldump [옵션] [DB명 [테이블명 ...]]

mysqldump의 실행을 제어하는 옵션 중 호환성에 관련된 건 다음과 같다. 참고로 모든 옵션은 --xxx-xxx와 같은 형태인데 기본값으로 동작하도록 켜있는 경우가 많고 --skip-xxx-xxx와 같이 하여 그 옵션을 끌 수 있다.

이상과 같은 옵션을 염두에 두고 실제 예시를 보자. 원래 별다른 옵션 없이 mysqldump을 실행한 경우 결과물이 다음과 같았다면,

-- MySQL dump 10.13  Distrib 5.1.12, for redhat-linux-gnu (i386)
**중략**

--
-- Table structure for table `wp_commentmeta`
--

DROP TABLE IF EXISTS `wp_commentmeta`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `wp_commentmeta` (
`meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`comment_id` bigint(20) unsigned NOT NULL DEFAULT '0',
`meta_key` varchar(255) DEFAULT NULL,
`meta_value` longtext,
PRIMARY KEY (`meta_id`),
KEY `comment_id` (`comment_id`),
KEY `meta_key` (`meta_key`)
) ENGINE=MyISAM AUTO_INCREMENT=30 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `wp_commentmeta`
--

LOCK TABLES `wp_commentmeta` WRITE;
/*!40000 ALTER TABLE `wp_commentmeta` DISABLE KEYS */;
INSERT INTO `wp_commentmeta` VALUES (8,3,'akismet_result','false'),(9,3,'akismet_history',
**중략**,(29,7,'hc_foreign_user_id','1');
/*!40000 ALTER TABLE `wp_commentmeta` ENABLE KEYS */;
UNLOCK TABLES;

** 생략 **

이제 다음과 같이 mysqldump를 실행하면,

mysqldump -uuser -p --skip-opt --compatible="no_table_options, no_field_options, no_key_options, oracle" --skip-quote-names mydb > mydb.sql

다음과 같이 보다 호환성이 높은 SQL 스크립트가 만들어진다.

-- MySQL dump 10.13  Distrib 5.1.12, for redhat-linux-gnu (i386)
**중략**

--
-- Table structure for table "wp_commentmeta"
--

/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE wp_commentmeta (
meta_id bigint(20) unsigned NOT NULL,
comment_id bigint(20) unsigned NOT NULL DEFAULT '0',
meta_key varchar(255) DEFAULT NULL,
meta_value longtext,
PRIMARY KEY (meta_id),
KEY comment_id (comment_id),
KEY meta_key (meta_key)
);
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table "wp_commentmeta"
--

INSERT INTO wp_commentmeta VALUES (8,3,'akismet_result','false');
INSERT INTO wp_commentmeta VALUES (9,3,'akismet_history',
**중략**
INSERT INTO wp_commentmeta VALUES (29,7,'hc_foreign_user_id','1');

**생략**