よっしー
こんにちは。よっしーです(^^)
今日は、mysqlで日付パーティションを追加する方法 についてご紹介します。
背景
mysqlの日付パーティションを調査した際に、検証環境の構築したときの内容を備忘として残しました。
この記事のソースは下記のリポジトリにあります。
作成ファイル一覧
下記のファイルを作成しました。ファイルの内容は下記のセクションに記載しています。
aws/work/add_partition.sh
aws/work/add_partition.sh
#!/bin/bash
host='mysql'
user='root'
pass='P@ssw0rd'
db='sample'
tbl='test'
mysql_cmd="mysql -h${host} -u${user} -p${pass} -D${db}"
partition_info=$(${mysql_cmd} -sN <<EOL
SELECT TABLE_SCHEMA
, PARTITION_NAME
, PARTITION_ORDINAL_POSITION
, PARTITION_EXPRESSION
, PARTITION_DESCRIPTION
, TABLE_ROWS
FROM INFORMATION_SCHEMA.PARTITIONS
WHERE TABLE_NAME = '${tbl}'
ORDER BY PARTITION_DESCRIPTION DESC
LIMIT 1
;
EOL
);
column=$(echo "${partition_info}" | awk '{print $4}')
max_p_name=$(echo "${partition_info}" | awk '{print $2}')
max_cond_date=$(echo "${partition_info}" | awk '{print $5}')
max_cond_date=${max_cond_date/\'/}
add_cond_date=$(date '+%Y-%m-%d' -d "${max_cond_date} 1 day")
add_p_name=p$(date '+%Y%m%d' -d "${max_cond_date}")
${mysql_cmd} <<EOL
ALTER TABLE \`${tbl}\` ADD PARTITION (
PARTITION ${add_p_name} VALUES LESS THAN ('${add_cond_date} 00:00:00')
);
EOL
cat <<EOL
success !!
$column
MAX : ${max_p_name} ( LESS THAN ${max_cond_date} )
ADD : ${add_p_name} ( LESS THAN ${add_cond_date} )
EOL
動作確認
下記のコマンドを実行します。
make build
make up
make login_aws
cd /work
下記のコマンドで日付パーティションが追加されます。
bash add_partition.sh
bash-5.2# bash add_partition.sh
mysql: [Warning] Using a password on the command line interface can be insecure.
mysql: [Warning] Using a password on the command line interface can be insecure.
success !!
`date_at`
MAX : p20231022 ( LESS THAN 2023-10-23 )
ADD : p20231023 ( LESS THAN 2023-10-24 )
解説
aws/work/add_partition.sh
このスクリプトはBashスクリプトで、MySQLデータベース内のパーティションテーブルに新しいパーティションを追加する目的を持っています。以下はスクリプトの各部分の説明です:
- スクリプトの冒頭では、MySQLの接続情報が設定されています。
host
、user
、pass
、db
、tbl
変数にそれぞれホスト、ユーザー、パスワード、データベース、テーブルの情報が設定されています。 mysql_cmd
変数にMySQLクライアントのコマンドが構築されています。これにより、MySQLデータベースへの接続が確立されます。partition_info
変数には、mysql_cmd
を使用してMySQLデータベースにクエリを送信し、テーブルのパーティション情報を取得するためのSQLクエリが実行されています。取得された情報は、テーブルのスキーマ、パーティション名、パーティション順序などを含みます。awk
コマンドを使用して、特定の列の値を変数に格納しています。max_cond_date
変数は、最大のパーティション条件を表す日付を取得します。この日付に1日を追加して、新しいパーティションの条件日付を計算します。add_p_name
変数は、新しいパーティション名を生成します。日付情報を使用して、新しいパーティション名をpYYYYMMDD
の形式で作成します。ALTER TABLE
クエリを使用して、新しいパーティションをテーブルに追加します。新しいパーティションは、指定された日付を基準に作成され、それ以前のデータは既存のパーティションに格納されます。- 最後に、スクリプトは成功メッセージを表示し、追加されたパーティションとその条件を示します。
このスクリプトは、MySQLデータベース内の日付ベースのパーティションテーブルに対して、新しい日付でパーティションを作成および管理するために使用されるものです。新しいデータが到着したときに自動的に新しいパーティションを追加し、データベースを効率的に保つのに役立ちます。
おわりに
今日は、mysqlで日付パーティションを追加する方法 についてご紹介しました。
よっしー
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント