データサイズ・行数・テーブルごと!mysqldump 出力を分割する最適な方法
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