【MySQL】 MySQL での データ移行 を考える

■ 方法

[1] mysqldump を使ってバックアップ
[2] Workbenchを使ってデータ移行
[3] SELECT-INERTでデータ移行

[1] mysqldump を使ってバックアップ

 * 以下の関連記事を参照のこと
http://blogs.yahoo.co.jp/dk521123/36680883.html

[2] Workbenchを使ってデータ移行

 * 使ったことはないが、GUIでできるみたい
Workbenchを使ってデータの移行
http://www.sdblog.info/20160621697.html
http://ginneko-atelier.com/blogs/tips/365/

補足:HeidiSQL のエクスポート機能について

 * HeidiSQL のエクスポート機能で、エクスポートしたBLOB型データが壊れるので注意。
   (詳細は、以下の関連記事を参照のこと)
http://blogs.yahoo.co.jp/dk521123/36708098.html


[3] SELECT-INERTでデータ移行

 * 移行元「旧DB:sampledb」⇒移行先「新DB:sampledb_2016」にデータ移行
テーブル
-- 顧客
CREATE TABLE `customer` (
	`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
	`first_name` VARCHAR(50) NULL DEFAULT NULL,
	`family_name` VARCHAR(50) NULL DEFAULT NULL,
	PRIMARY KEY (`id`)
)
COMMENT='顧客'
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;
SQL
 * 以下の関連記事で行った「SELECT INSERT文」。
   後、テーブル名の指定の前で、DB名を記載すればOK
http://blogs.yahoo.co.jp/dk521123/16106035.html
INSERT INTO sampledb_2016.customer(id, first_name, family_name)
SELECT c.id, c.first_name, c.family_name 
FROM sampledb.customer AS c

補足:SELECT文でフィールドの一部だけを使って、INSERTしたい場合

https://oshiete.goo.ne.jp/qa/162964.html
より、固定値('Mike'とかの部分)にすればいい
INSERT INTO sampledb_2016.customer(id, first_name, family_name)
SELECT c.id, 'Mike', 'Christofer' 
FROM sampledb.customer AS c

■ データ移行後の確認

 * 目視でもよいが、それだとミスるのでメモ。
[1] LENGTHを利用する
SELECT LENGTH(【テーブルの対象項目】) FROM 【対象テーブル名】
[2] MD5を利用する
SELECT md5(【テーブルの対象項目】) FROM 【対象テーブル名】


関連記事

MySQL】 データのエクスポート / バックアップを行うには... ~ mysqldump ~

http://blogs.yahoo.co.jp/dk521123/36680883.html

MySQLMySQLの全DBをエクスポート/インポートするスクリプト

https://blogs.yahoo.co.jp/dk521123/37416957.html

データ追加 ~ INSERT文 / SELECT INSERT文 ~

http://blogs.yahoo.co.jp/dk521123/16106035.html

【トラブル】【MySQL】HeidiSQL のエクスポート機能で、エクスポートしたBLOB型データが壊れる

http://blogs.yahoo.co.jp/dk521123/36708098.html