データサイズ・行数・テーブルごと!mysqldump 出力を分割する最適な方法

2024-04-06

mysqldump 出力を分割する方法

mysqldump は、MySQL データベースのバックアップや移行に役立つツールですが、出力ファイルが大きくなる場合があります。

この問題を解決するために、mysqldump 出力をいくつかの小さなファイルに分割する方法を紹介します。

方法

テーブルごと分割

この方法は、データベースの各テーブルを個別のファイルに分割します。

コマンド

mysqldump --no-create-db --skip-extended-insert --tables <テーブル名> > <出力ファイル名>

mysqldump --no-create-db --skip-extended-insert --tables users > users.sql
mysqldump --no-create-db --skip-extended-insert --tables posts > posts.sql

データサイズごと分割

この方法は、データを指定されたサイズごとに分割します。

split -b <分割サイズ> <入力ファイル名> <出力ファイル名>
split -b 1000000 users.sql users.sql.part

行数ごと分割

split -l <行数> <入力ファイル名> <出力ファイル名>
split -l 1000 users.sql users.sql.part

その他のツール

mysqldump-split

https://stackoverflow.com/questions/132902/how-do-i-split-the-output-from-mysqldump-into-smaller-files は、mysqldump 出力を分割するための専用ツールです。

gh-ost

https://github.com/github/gh-ost は、データベースの移行ツールで、mysqldump 出力を分割する機能も備えています。

注意点

  • 分割後のファイルは、元のファイルと同じ順序で復元する必要があります。
  • 分割後のファイルは、圧縮して保存することができます。

mysqldump 出力を分割することで、ファイルサイズを小さくし、管理しやすくなります。 上記の方法を参考に、自分に合った方法を選択してください。




# テーブル名を取得
table_names = ["users", "posts"]

# 各テーブルを個別のファイルに分割
for table_name in table_names:
    command = f"mysqldump --no-create-db --skip-extended-insert --tables {table_name} > {table_name}.sql"
    subprocess.run(command, shell=True)
# 分割サイズ
split_size = 1000000

# 入力ファイル名
input_file_name = "users.sql"

# 出力ファイル名
output_file_name = "users.sql.part"

# データサイズごとに分割
command = f"split -b {split_size} {input_file_name} {output_file_name}"
subprocess.run(command, shell=True)
# 行数
line_count = 1000

# 入力ファイル名
input_file_name = "users.sql"

# 出力ファイル名
output_file_name = "users.sql.part"

# 行数ごとに分割
command = f"split -l {line_count} {input_file_name} {output_file_name}"
subprocess.run(command, shell=True)
# mysqldump-split をインストール
pip install mysqldump-split

# テーブルごと分割
command = f"mysqldump-split --tables {table_name} {input_file_name}"
subprocess.run(command, shell=True)

# データサイズごと分割
command = f"mysqldump-split --split-size {split_size} {input_file_name}"
subprocess.run(command, shell=True)

# 行数ごと分割
command = f"mysqldump-split --split-lines {line_count} {input_file_name}"
subprocess.run(command, shell=True)
# gh-ost をインストール
pip install gh-ost

# テーブルごと分割
command = f"gh-ost dump --tables {table_name} {input_file_name}"
subprocess.run(command, shell=True)

# データサイズごと分割
command = f"gh-ost dump --split-size {split_size} {input_file_name}"
subprocess.run(command, shell=True)

# 行数ごと分割
command = f"gh-ost dump --split-lines {line_count} {input_file_name}"
subprocess.run(command, shell=True)

**




  • GUI ツールを使う

MySQL Workbench: https://dev.mysql.com/downloads/workbench/ などの GUI ツールを使って、mysqldump 出力を分割することができます。

  • スクリプトを使う

GitHub: https://github.com/ などで公開されているスクリプトを使って、mysqldump 出力を分割することができます。

  • 独自のスクリプトを書く

Python や Bash などの言語を使って、独自のスクリプトを書いて、mysqldump 出力を分割することができます。

  • データ量が小さい場合は、GUI ツールを使うのが簡単です。
  • データ量が多い場合は、スクリプトを使う方が効率的です。
  • 細かいカスタマイズが必要な場合は、独自のスクリプトを書く必要があります。

mysql migration


コードを簡潔に、読みやすく!MySQL WITH句で複雑なサブクエリを攻略

MySQL WITH句は、SELECT文の中で複雑なサブクエリを簡潔かつ読みやすく表現するための機能です。共通テーブル式 (CTE) とも呼ばれ、中間結果を一時的に保存し、複数のクエリで参照できるようにします。メリット:コードの簡潔化: 複雑なサブクエリを CTE として定義することで、コードをより読みやすく、理解しやすくなります。...


データベースの動作を安定化!FLUSH TABLESコマンドでテーブルを再読み込み

すべてのオープンテーブルを閉じるFLUSH TABLESコマンドを実行すると、現在のデータベースだけでなく、すべてのデータベースのオープンテーブルが閉じられます。これは、以下の状況で役立ちます。テーブル構造の変更を反映させるために、すべてのテーブルを再読み込みしたい場合...


ターミナルからMySQLデータベースをmysqlimportコマンドを使ってインポートする方法

ステップ 1: ターミナルを開いて、MySQLサーバーに接続します。ステップ 2: インポートしたいデータベースファイルの場所まで移動します。ステップ 3: mysql コマンドを使って、データベースファイルをインポートします。例:オプション:...


MySQL/MariaDBクライアント: 接続できない?原因と解決策を分かりやすく解説

MySQLやMariaDBクライアントが、設定したポート番号で接続できない問題が発生することがあります。これは、様々な要因が考えられます。以下では、一般的な原因と解決策について詳しく解説します。原因ポート番号の競合:指定したポート番号が既に別のプログラムによって使用されている可能性があります。例えば、別のデータベースサーバーや、ファイル共有ソフトなどが同じポートを使用している可能性があります。...