0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【メモ】mysqldumpしたデータを別環境でトランザクションを張って流すときのtips

Last updated at Posted at 2018-09-18

MySQLにあるデータをdumpしたファイルを、別環境でトランザクションを張ってからdumpしようとした時にハマったメモ

環境情報

  • innoDB
  • MySQL5.6.37

最終的なdumpのコマンド

mysqldump db table1 --add-locks=false --disable-keys=false -t --where 'id > 1' > file.sql
mysqldump db table2 --add-locks=false --disable-keys=false -t --where 'id > 1' >> file.sql
sed -i 'begin;' file.sql #fileにトランザクションを書く
echo echo 'commit;' >> file.sql 

mysqldumpオプション解説1

--add-locks=false

これがないとdumpファイルにLOCK TABLESが出力されるので外す。

LOCK TABLES `table1` WRITE;
INSERT INTO table1 VALUES(....)
UNLOCK TABLES;

LOCK TABLEが暗黙的にコミットしてしまうので除外。
https://dev.mysql.com/doc/refman/5.6/ja/lock-tables.html

mysqldumpオプション解説2

--disable-keys=false

これがないと DISABLE KEYS が出力されるので外す。

/*!40000 ALTER TABLE `table1` DISABLE KEYS */;
INSERT INTO table1 VALUES(....)
/*!40000 ALTER TABLE `table1` ENABLE KEYS */;

ALTER TABLE が暗黙的にコミットしてしまうので除外。あと、 /*!40000 */; はコメントアウトじゃなく、バージョンが4以上ならばコマンドを流すという意味。
https://dev.mysql.com/doc/refman/5.6/ja/implicit-commit.html

感想

暗黙的なコミットが怖い。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?