hironomiu's Blog

こそっと書いていきます。twitter_id:hironomiu

mysql mysqldumpのオプション設定のtips

mysql mysqldumpのオプション設定のtips

マニュアルにも記載されているけど結構見落としがちなのでtipsとして。
MySQL 5.1 リファレンスマニュアル mysqldump

オプションで--skip~を設定してるのに何故か設定どおりに動いてくれないって思うことがありませんか?
大体の理由はマニュアル中のこれが原因だったりします。

グループオプションの一部を選択して効果を有効化・無効化する場合、オプションは前から後ろへの順で処理されるため、記述する順番が重要になります。

例えば--skip-set-charsetを設定した場合(検証を5.0で行っているので--optを明示的に設定しています。)
mysqldump --skip-set-charset --opt -t hoge hoge > hoge.dmp のダンプ内容。「SET NAMES」までが出力されてしまってます。

-- MySQL dump 10.11
--
-- Host: localhost    Database: hoge
-- ------------------------------------------------------
-- Server version       5.0.67-community-log

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

mysqldump --opt -t hoge hoge --skip-set-charset > hoge.dmp のダンプ内容。意図したとおり「SET NAMES」までが省略されています。

-- MySQL dump 10.11
--
-- Host: localhost    Database: hoge
-- ------------------------------------------------------
-- Server version       5.0.67-community-log
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

順番によりパラメータ値が決定されるのは知っておくと無用なトラブルにならないので知っておくと便利です。