ibdata1をtable毎に作ってサイズ分散させる

連休明けたら MySQL のibdata1が9.1GBとかになってて焦った焦った。
ってのも12GBで割ってあるパーティションにDBが設置してあるので、
パンパンになってしまうとDBが動かなくなっちまう。ま、全部消えてしまっても良かったのですが。

概ね原因は見つけられてるので、今回はなんとかする方法として
いろんな実験をやりつつibdata1のダイエットに挑戦してみました。
(結果、サイズを小さくする事が出来なかったのですが、なんとかする方法は編み出しました)

ibdata1をテーブル毎に分けてサイズ分散する手順
  1. サービス停止
  2. mysqlとかを止めます。

    バックアップ
    論理的に
    mysqldump -u root -p -x --all-databases > mysql_all.sql
    物理的に
    tar czpvf /hd/admin/mysql.tgz /var/db/mysql/

  3. データベースのデータ削除
  4. 既存データの削除
  5. ・サーバアカウントを抽出して drop table [account]; -> create table [account];
    ・ibdata* ib_logfile* ファイルの削除

  6. my.cnfにibdata1の設定行を追加
  7. innodb_file_per_table=1
    innodb_data_file_path = ibdata1:10M:autoextend:max:512M

  8. mysql を立ち上げてバックアップからのリストア
  9. mysql -u root -p < /hd/admin/mysql_all.sql

これでテーブル毎にibdataができるようになったはず。
でも私の場合、ibdata1自体は小さくなりましたが、各table毎に出来たibdファイルが全然大きくて全然問題解決になりませんので、次の方法で対処してみました。

dbファイルを違うパーティションに移動する手順
  1. データベースファイルを別のパーティションにコピー
  2. コピーしたファイルを所有者を mysql:mysql に変更
  3. 実態があった所からコピー先にシンボリックリンクを設置

正直、問題を先送りにしただけのオススメできない方法ですが、
こうしないとやり過ごせない事もあります、きっと。

別件だけど、いや別件でもないけど、こまめにalter table [table] ENGINE InnoDB;でibdファイルの最適化が出来ると書いてあったのだけど、私の環境では完了しないでセッションが切れてしまう。どうして?

—————–
version
mysql Ver 14.14 Distrib 5.5.28, for FreeBSD9.1 (amd64) using 5.2

0

Amazon Product Advertising APIにキレる5秒前

略してAK5、カラシニコフの略称見たくなりました。

amazonの広告を動的に出してみたいので、色々研究してるのですが、どうやっても

SignatureDoesNotMatch

The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.

と言うのです。

そもそも日本語リファレンスもメチャメチャ理解しにくいし、書いてある通りにやっても動かないし、
何度確認してもAccessKeyIDやSecretAccessKeyのスペルミスや設定ミスも見当たらない。
http://associates-amazon.s3.amazonaws.com/signed-requests/helper/index.htmlを使って、Signitureの暗号化内容も問題ないわだし、有志が公開しているRESTリクエスト簡単作成コードを使っても同様の結果に。

ってことで、やっぱりエラーに書かれてる通り私のAccessKeyIDとSecretAccesKeyに
何らかの間違いがあるのでしょうけど、それを全く見つけられない。もういい!やめた!

そもそもAWSのIAMには対応してないとか、ややこしいのですよ、アマゾンさん。
世の中全員が母国語のように英語読み書き出来ると思うんじゃねコンチキショウ。

0

VirtualminのバックアップをAWSのS3に置く

amazonのサービスを使う為に必要なIAMというサービスなんですが、イマイチよく解らない。
amazonのHELPもgoogleと同じく、英語のさっぱり解らない日本人には難攻不落、日本語ページのアメリカナイズされた翻訳は私の稚拙な脳みそでは理解しにくくて一苦労ですもの。
ってことで2014/08/06現在、virtualminのバック置き場として確保したS3にバックアップ出来るように、
最低限使えるようにするためのメモをここに記しておこうと。

まず最初に斜め読みで使えるものをメモっておこうとしてますので、詳しいのは省きます。
必要なら各リンクを追っかけていってください。

最初に IAM で Userを作る

IAM とは? http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/IAM_Introduction.html

  1. https://console.aws.amazon.com/iam/home にアクセス
  2. 左側のメニューからUsersを選んで、「Create New Users」をクリック
    1
  3. 作るUserの名前を入力し、右下の「Create」をクリック
    2
  4. 表示されたAccess Key IDと Secret Access Keyをとりあえず何かにコピー。私は何でもかんでもEvernoteにつっこんでます。
    3

次にS3にバケットを作る

  1. https://console.aws.amazon.com/s3/homeにアクセス
  2. バックアップ置き場のフォルダ(S3ではバケットって言うんでしたっけ)を作成します。左上の「Create Bucket」をクリック。
    4
  3. バケット名を入力して「Create」をクリック
    5

Virtualminでバックアップしてみる

  1. webminにログイン
  2. Virtualmin側の左側メニューにある「Backup and Restore」の中にある「Backup Virtual Servers」をクリック
  3. 「Destination and format」を開く
  4. 「Access Key ID」「Secret Access Key」「作ったバケット名」を入力
    6
  5. 一番下の「Backup Now」をポチ。

とりあえずコレでS3上にバックアップを取る事が出来ます。とりあえずです。
色々細かな設定がありますが、各自調べて逆に私に教えてやってください。

0