mysqldumpで取得したdumpファイルをインポートする手順|文字化けとエラー対処まで

運営:リナックスマスター.JP(代表 宮崎智広)
HOME > Linux技術 リナックスマスター.JP(Linuxマスター.JP) > Linuxtips > データーベース管理 > mysqldumpで取得したdumpファイルをインポートする手順|文字化けとエラー対処まで
「mysqldumpでバックアップしたdumpファイルをインポートしたいが、コマンドの書き方が分からない」「インポートしたら日本語が文字化けした」というケースは、Linuxサーバー上でMySQLを運用していると必ず一度は遭遇します。

この記事では、RHEL 9系/Ubuntu 24.04 LTSを想定環境として、mysqldumpで取得したdumpファイルをmysqlコマンドでインポートする手順をステップごとに解説します。文字コードの落とし穴や「ERROR 1049」「外部キー制約エラー」など実務でよく遭遇するエラーの対処法まで、まとめて説明します。

この記事のポイント

・mysql DB名 < backup.sql がインポートの基本コマンド形式
・--default-character-set=utf8mb4 の指定で文字化けを防ぐ
・「ERROR 1049」はDB未作成が原因、先にCREATE DATABASEを実行
・外部キーエラーは foreign_key_checks=0 の設定で回避できる


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

dumpファイルをインポートする前に確認すること

mysqldumpコマンドが生成するdumpファイルは、CREATE TABLE文とINSERT文が並んだSQLのテキストファイルです。インポートとは、そのSQL文をMySQLサーバーに流し込んで実行することを指します。作業を始める前に以下の2点を確認しておくと、後のトラブルを減らせます。

1. dumpファイルの先頭を確認する

dumpファイルの先頭数行を見ると、取得時の文字コードやMySQLバージョン情報が記録されています。

# dumpファイルの先頭10行を確認する head -10 /tmp/backup.sql

出力例(環境により異なります)

-- MySQL dump 10.13 Distrib 8.0.36, for Linux (x86_64) -- -- Host: localhost Database: myapp_db -- ------------------------------------------------------ -- Server version 8.0.36 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET NAMES utf8mb4 */; /*!50503 SET NAMES utf8mb4 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;

SET NAMES utf8mb4 の記述があれば、このdumpファイルはutf8mb4で取得されています。後の文字コード指定時の参考にしてください。

2. インポート先のMySQLバージョンを確認する

取得元と受け入れ先のメジャーバージョンが大きく離れている場合(例: MySQL 5.7から8.0へ)、構文の非互換が出ることがあります。

# インポート先サーバーのMySQLバージョンを確認する mysql --version

出力例(環境により異なります)

mysql Ver 8.0.36 Distrib 8.0.36, for Linux (x86_64) using EditLine wrapper

mysqlコマンドでdumpファイルをインポートする基本手順

1. インポート先データベースを作成する

dumpファイルにCREATE DATABASE文が含まれている場合は省略できますが、多くの場合は含まれていないため、事前にデータベースを作成しておきます。

# MySQLに接続してデータベースを作成する mysql -u root -p # MySQLプロンプト内で実行する CREATE DATABASE myapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; SHOW DATABASES; EXIT;

文字コードはdumpファイルの取得時と合わせておくのが鉄則です。後から変更するには追加の手順が必要になります。

2. mysqlコマンドでインポートを実行する

dumpファイルのインポートは、mysqlコマンドにリダイレクト(<)でdumpファイルを渡すだけです。

# 基本のインポートコマンド mysql -u root -p myapp_db < /tmp/backup.sql # 文字コードを明示してインポートする(推奨) mysql -u root -p --default-character-set=utf8mb4 myapp_db < /tmp/backup.sql

・-u:接続ユーザー名
・-p:パスワード入力を求めるプロンプトを表示
・--default-character-set:クライアント側の文字コードを指定
・myapp_db:インポート先のデータベース名
・< /tmp/backup.sql:読み込むdumpファイルのパス
コマンドを実行するとパスワード入力を求めるプロンプトが出ます。成功時は特にメッセージは表示されず、プロンプトに戻ります。

3. インポート完了を確認する

インポート後、データベースとテーブルが正しく作成されているか確認します。

# MySQLに接続して確認する mysql -u root -p # データベースを選択してテーブル一覧を確認する USE myapp_db; SHOW TABLES; # テーブルの行数を確認する(例: usersテーブル) SELECT COUNT(*) FROM users; EXIT;

出力例(環境により異なります)

+--------------------+ | Tables_in_myapp_db | +--------------------+ | orders | | products | | users | +--------------------+ 3 rows in set (0.00 sec)

文字化けを防ぐ文字コード指定の方法

インポート後に日本語が「?????」や「縺ゅ≧縺・」のように化けてしまうケースは非常に多く、ほぼすべての原因は文字コードの不一致です。

1. dumpファイルの文字コードを調べる

# dumpファイル内のSET NAMESを確認する grep 'SET NAMES' /tmp/backup.sql

出力例(環境により異なります)

/*!40101 SET NAMES utf8mb4 */;

2. --default-character-set オプションを指定する

dumpファイルの文字コードに合わせて --default-character-set を指定するのが基本です。

# utf8mb4のdumpをインポートする場合 mysql -u root -p --default-character-set=utf8mb4 myapp_db < /tmp/backup.sql # 古いシステムからのdumpでutf8の場合 mysql -u root -p --default-character-set=utf8 myapp_db < /tmp/backup.sql

注意:MySQL 8.0以降では utf8 は実際にはutf8mb3(3バイト制限)として扱われます。絵文字を含むデータがある場合は utf8mb4 を指定してください。

3. MySQLサーバー側の文字コード設定を確認する

インポート先サーバーの文字コード設定がdumpと合っていないと、オプションを正しく指定しても化けることがあります。

# MySQLサーバーの文字コード設定を確認する mysql -u root -p -e "SHOW VARIABLES LIKE 'character%';"

出力例(環境により異なります)

+--------------------------+---------+ | Variable_name | Value | +--------------------------+---------+ | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | +--------------------------+---------+

character_set_server が latin1 になっている場合は、/etc/my.cnf(RHEL系)または /etc/mysql/mysql.conf.d/mysqld.cnf(Ubuntu系)の [mysqld] セクションに以下を追加してMySQLを再起動してください。

[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_general_ci

よくあるエラーと対処法

「ERROR 1049 (42000): Unknown database」が出た時

インポート先のデータベースが存在しない場合に発生します。

ERROR 1049 (42000): Unknown database 'myapp_db'

対処法はシンプルで、先にデータベースを作成してから再実行します。

# データベースを作成してからインポートする mysql -u root -p -e "CREATE DATABASE myapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;" mysql -u root -p --default-character-set=utf8mb4 myapp_db < /tmp/backup.sql

「ERROR 1366 (HY000): Incorrect string value」が出た時

テーブルに定義されている文字コードに収まらない文字(絵文字など4バイトのUnicode文字)を挿入しようとすると発生します。

ERROR 1366 (HY000): Incorrect string value: '\xF0\x9F\x98\x8A...' for column 'comment' at row 1

テーブルの文字コードがutf8(utf8mb3)の場合に起きます。対処はテーブルの文字コードをutf8mb4へ変換することです。

# テーブルの文字コードをutf8mb4に変換する mysql -u root -p myapp_db -e "ALTER TABLE テーブル名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"

dumpを取得し直せる状況であれば、取得時に --default-character-set=utf8mb4 を付けて取り直すのが根本解決です。

「ERROR 1215 (HY000): Cannot add foreign key constraint」が出た時

外部キー制約を持つテーブルを含むdumpでは、テーブルの作成・データ投入の順序によってこのエラーが発生することがあります。

ERROR 1215 (HY000): Cannot add foreign key constraint

多くのmysqldump出力には SET foreign_key_checks=0 が既に含まれていますが、含まれていない場合は以下の方法でセッション単位で無効にしてインポートします。

# foreign_key_checksを一時無効にしてインポートする mysql -u root -p myapp_db << 'SQL' SET foreign_key_checks=0; SOURCE /tmp/backup.sql; SET foreign_key_checks=1; SQL

大容量dumpファイルで途中停止する場合

数GBに及ぶdumpファイルをインポートすると、MySQLのパケットサイズ制限やタイムアウトで途中停止することがあります。

# max_allowed_packetを拡張してインポートする mysql -u root -p --max_allowed_packet=1G --default-character-set=utf8mb4 myapp_db < /tmp/backup_large.sql

それでも途中停止する場合は、/etc/my.cnf の [mysqld] セクションに以下を追加してMySQLを再起動してください。

[mysqld] max_allowed_packet=1G net_read_timeout=600 net_write_timeout=600

本番データの大規模なDB移行・複製作業を行う場合は、手順の抜け漏れがないよう計画的に進めることが重要です。Linux環境でのデータベース運用を体系的に学びたい方には、Linux Master Pro Seminar のハンズオン形式の学習が参考になります。

本記事のまとめ

mysqldumpで取得したdumpファイルをインポートするための主要なコマンドと対処法をまとめます。
やりたいこと コマンド
基本のインポート mysql -u root -p DB名 < backup.sql
文字コードを指定してインポート mysql -u root -p --default-character-set=utf8mb4 DB名 < backup.sql
インポート先DBを作成する mysql -u root -p -e "CREATE DATABASE DB名 CHARACTER SET utf8mb4;"
サーバーの文字コード確認 mysql -u root -p -e "SHOW VARIABLES LIKE 'character%';"
dumpの文字コード確認 grep 'SET NAMES' backup.sql
大容量ファイルのインポート mysql -u root -p --max_allowed_packet=1G DB名 < backup.sql
インポート時の押さえどころは3つです。インポート先のデータベースを先に作成しておくこと、--default-character-set でdumpと文字コードを合わせること、外部キーエラーは foreign_key_checks の設定で回避できることを知っておけば、ほとんどのケースに対応できます。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、MySQLの実践的な運用管理もカバーしたLinux Master Pro Seminarをご用意しています。ハンズオン形式でDBバックアップ・復旧・チューニングまで体得できます。
>> Linux Master Pro Seminar の詳細はこちら

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

運営

リナックスマスター.JP(代表 宮崎智広)

株式会社イーネットマーキュリーが運営するLinux教育サイトです。代表の宮崎智広は現役のLinuxサーバー管理者として20年以上の実務経験を持ち、累計3,100名以上のエンジニアを指導してきました。実践型のLinuxセミナーや無料マニュアルの配布を通じてLinux人材の育成に取り組んでいます。