MySQLのibdataから個別のテーブルデータをリストアする

バックアップは取っていてもリストアできないと宝の持ち腐れですね。

ibdataのコールドバックアップは取っていて、サクッと一部のテーブルのデータのみリストアする方法です。 稼働中のMySQLを止める必要がないので、一部のテーブルだけ復旧したい場合や、とりあえず昔のテーブルの状況を見たい場合などに利用可能です。 データベース全体のリストアではないので、リストアの時間を短縮したいときに使えるかと思います。

やり方としては公式のドキュメントに書いてある通りなのですが、もうちょっと細かくやり方を見ていきます。 innodb_file_per_tableがONになっていて、テーブル毎にibdataが作成されていることが前提になります。

大まかな手順は下記のようになります。

  1. 復旧したいデータベース・テーブルがない場合はあらかじめ作成しておく
  2. 該当テーブルへの変更をLOCKする
  3. テーブルスペースを削除(ibdファイルを削除)
  4. 復旧したいibdファイルをコピーする
  5. テーブルスペースをインポート
  6. Lockを解除

下記のバージョンで検証しました。

  • MySQL: 5.6.42
  • CentOS: 7.5

Read the whole article ...


「Docker/Kubernetes実践コンテナ開発入門」を読んだ

OreillyのDocker本に続いて読んだのが、現時点では比較的最近出版された本書でした。 出来るだけ新しいDocker本で最近の情報で知識をアップデートしたかったのと、Kubernetesの説明が充実してそうというのが本書を手に取った動機です。 Dockerに正式採用されたKubernetesと、Swarmの違いなんかも体験できればなと思いました。

Read the whole article ...


Oreillyの「Docker」を読んだ

Dockerのチュートリアルを軽く触った事しかなかったのですが、本番でDockerを運用しているシステムを触ることになったので手に取りました。 しかしDockerは進化のスピードが早くてどの本を買おうか非常に迷いましたね。 この本は2016年の出版ですが、パッと見た所そこまで難しすぎず、手を動かしながらDockerを体験できそうだったのと、 迷ったらオライリーでしょっていう安易な考え方で選びました。 2年の月日はこの分野では大きな差がありそうですが、 特に進化が激しそうなオーケストレーション周りはこの本とは別に直近に出版されたものも読んで、 Dockerの進化を疑似体験しつつ知識をアップデートしていこうという目論見です。

Read the whole article ...



「入門!論理学」を読んだ

「データベース実践入門」 を読んでいて、これは論理学を学んでおかないと歯が立たないなと感じ、急遽読むことにしました。 論理学はプログラマが勉強すべき内容として、こちら でも紹介されていますね。 難しさに挫折するのは悔しい所ですが、ここは自分の知識のなさを素直に認めて急がば回れで行くことにしました。

Read the whole article ...


「初めてのAnsible」を読んだ

実際に仕事でも使ってるAnsibleだけど、使い始めた頃から本書にはお世話になってます。 改めて読み返してみると、最初のハードルから様々なプロダクトとの連携や高速化など、 痒いところに手がとどく内容だなと思います。 初めてAnsibleを触る人にも良いと思います。 あまり馴染みのないPython製のCRMをベースに話が進んでいく箇所は若干難儀しましたが。

Read the whole article ...


「Google ネット覇者の真実」を読んだ

これまで、Googleの成長をリアルタイムで体験しながらネットを利用してきたわけですが、 Googleが企業し、小さな企業から大企業へとなっていく華やかな成長の裏で、 中の人は何を考え、苦悩してきたのかがわかる本です。

Read the whole article ...


ansible_specを試してみた

以前試したServerspecですが、Ansibleと連携するプロダクトがあるということで試してみました。 その名もansible_specです。 Ansibleで構成したサーバーの接続情報を共有したいというモチベーションはTestinfraと同様です。 やはり同じ接続設定をいろんなところに設定するのは避けたいところですよね。

Read the whole article ...


「Infrastructure as Code」を読んだ

Infrastructure as Code(IaC)もずいぶん使い古された感のあるワードですね。 出始めの頃は自分もChefとかPuppetを使いさえすればいいもんだと勘違いしていました。 実際はもっと大きな考え方であり、この本は網羅的にIaCの考え方を抑えていってくれるので、 視野狭窄にならないようにするためにも、読んでおいて損はない本だと思いました。

Read the whole article ...


Testinfra使ってみた

前回、ServerSpecを使ってインフラのテストを書いてみましたが、 同じ思想でpythonベースのプロダクトを教えてもらったので試してみました。

Testinfra aims to be a Serverspec equivalent in python	  

Read the whole article ...


「The DevOps 逆転だ!究極の継続的デリバリー」を読んだ

DevOpsは最近ではバズワードでもなんでもなくて、 普通に考えなきゃいけない概念になってきました。 と言っても自分の周辺ではまだまだという感があるので、 とりあえず軽い気持ちで読んでみたのが本書です。 あまり考えずに買ったので、物語調で始まった時には少し面食らいました。

Read the whole article ...


S3をマウントするgoofysを試してみた

S3をEC2からマウントするgoofysを試してみた。 昔s3fsを試したことがあるんだけど、パフォーマンスが問題になったりしたことがありました。 巷では爆速と噂のgoofysですが、とりあえずパフォーマンスは置いておいて、できないことが何かを見ておきました。

Read the whole article ...


Web API The Good Partsを読んだ

昔はWebAPIを作る事が多かったんだけど、ここ数年はすっかりインフラ寄りになって、機能寄りの設計をやらなくなってました。 そんな中に読んだのが、Web API The Good Parts。 技術書の中にはかつての自分の成果物に赤面してしまう本が多々ありますが、この本は赤面度上位に位置しますね。

Read the whole article ...






GentooのAMIを作る

GentooをAWS上で動かすために、イメージを作ってみました。 クラウドに使えるstage4ファイルを利用すれば、簡単にできてしまいます。

追加ボリュームにgentooをインストール後、snapshot作成、AMI作成という手順でいきました。

Read the whole article ...


TerraformでSnapshotからAMI作って立ち上げる

独自のAMIを作ってたら、どうもうまく行かず。Try and Errorの様相を呈してきた。 何度もSnapshot作ってAMIを作ってLaunchってやり始めたので、Terraformでこの辺をやるようにした。

ただ、EBSボリュームからSnapshotを作る部分は見つけられなかったので、Snapshotを作るところは手動です。

resource "aws_ami" "origin-base" {
    name = "origin-base-20161124"
    virtualization_type = "hvm"
    root_device_name = "/dev/sda1"

    ebs_block_device {
        device_name = "/dev/sda1"
        snapshot_id = "snap-60559eee"
        volume_size = 10
    }
}

resource "aws_instance" "gside-origin" {
    ami                         = "${aws_ami.origin-base.id}"
    availability_zone           = "${aws_subnet.main.availability_zone}"
    ebs_optimized               = false
    associate_public_ip_address = false
    instance_type               = "t2.nano"
    monitoring                  = false
    key_name                    = "${aws_key_pair.gside-key.key_name}"
    vpc_security_group_ids      = ["${aws_security_group.basic.id}"]
    associate_public_ip_address = true
    disable_api_termination     = "true"
    source_dest_check           = "false"
    subnet_id 			= "${aws_subnet.main.id}"

    root_block_device {
        volume_type           = "gp2"
        volume_size           = 10
        delete_on_termination = true
    }

    tags {
        "Name" = "gside-origin"
    }
}	  

Terraformで追加のEBSをインスタンスにAttacheする

とあるインスタンスに追加でEBS VolumeをAttacheしたかったのですが、 現在のTerraform(Ver 0.7.9)では新規にインスタンスを作成し直さないとできないようです。 残念。

ebs_block_deviceの箇所で追加のEBSについて記載しています。 サイズとマウントポイントを記載するだけ。 簡単なんだけどやはりインスタンス作りなおしなのは惜しいですね。

resource "aws_instance" "gside" {
    ami                         = "ami-0c11b26d"
    availability_zone           = "${aws_subnet.main.availability_zone}"
    ebs_optimized               = false
    associate_public_ip_address = false
    instance_type               = "t2.nano"
    monitoring                  = false
    key_name                    = "${aws_key_pair.gside-key.key_name}"
    vpc_security_group_ids      = ["${aws_security_group.basic.id}"]
    associate_public_ip_address = true
    private_ip                  = "10.0.1.10"
    disable_api_termination     = "true"
    source_dest_check           = "false"
    subnet_id 			= "${aws_subnet.main.id}"

    root_block_device {
        volume_type           = "gp2"
        volume_size           = 10
        delete_on_termination = true
    }

    ebs_block_device {
	device_name = "/dev/xvdb"
        volume_size           = 10
    }

    tags {
        "Name" = "gside"
    }
}	  

インスタンスにログインしてディスクの状況を確認します。

[ec2-user@ip-10-0-1-10 ~]$ lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0  10G  0 disk
└─xvda1 202:1    0  10G  0 part /
xvdb    202:16   0  10G  0 disk	  

sshの鍵をTerraformで扱う

AMIを作る時に必要なSSHのキーですが、 Terraformでは鍵のインポートのみサポートしています。 確かに秘密鍵をダウンロードするより、公開鍵をアップロードするほうが健全ですね。

Read the whole article ...


Ansibleを使ってみる

仕事では利用しているAnsible。 プライベートで使っているサーバーも、構成管理することにしました。 まずは初期構築の部分をまとめてみました。

Read the whole article ...


S3のEtagの値はMD5と同じ?

MD5でファイルが同じかどうかを判定することがあります。 S3ではETAGにMD5値が格納されているという事になっていますが、 結論から言うと、Multipart Updateされた場合と、そうでない場合で異なります。

Read the whole article ...