1
1

More than 1 year has passed since last update.

MySQLのmysqldumpでS3にバックアップを保存する(EC2+S3)

Posted at

はじめに

こんにちは、山田です。
今回は、MySQLのmysqldumpでバックアップをS3に保存する方法を記載していきます。

全体構成図

今回の全体構成図はシンプルですが以下の通りです。

image.png
全体の流れを以下に記載します。
① EC2-①にSSH接続します。
② mysqldumpコマンドを実行します。
③ S3にバックアップファイルが保存されます。

構築手順

以下により構築手順について記載していきます。

前提条件

EC2に関しては、作成済みとします。
S3に関しては作成済みとし、バケット名「yamada-backup-s3」とします。

IAMロールの作成

① IAMロールにアタッチする、IAMポリシーの作成します
特定のS3バケットにアクセスできるように、次のようなJSONポリシー設定します。

IAMポリシー名 アクセスできるS3バケット
s3-backup-policy yamada-backup-s3
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": [
          "arn:aws:s3:::yamada-backup-s3",
          "arn:aws:s3:::yamada-backup-s3/*"
      ]
    }
  ]
}

②IAMロールを作成します。

IAMロール名 アタッチするIAMポリシー
s3-backup-policy s3-backup-role

image.png

AWS CLIのインストール

① AWS CLIをインストールします。

yum -y install python38
sudo update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1
pip install awscli --upgrade --user
export PATH="$PATH:/root/.local/bin"
aws --version

#以下のように表示されればOKです。
aws-cli/1.22.31 Python/3.8.8 Linux/4.18.0-348.7.1.el8_5.x86_64 botocore/1.23.31

mysqldumpコマンドの実行

① EC2-①にSSH接続します。
② 以下のコマンドを実行します。

#DBごとバックアップを取得

mysqldump -u root -pP@ssw0rd mysql | aws s3 cp - s3://yamada-backup-s3/test.dump
#mysqldump -u ユーザ名 -pパスワード DB名 | aws s3 cp - s3://バケット名/ファイル名

#テーブルを指定する場合は以下のように記載する。

mysqldump -u root -pP@ssw0rd mysql users | aws s3 cp - s3://yamada-backup-s3/test.dump
#mysqldump -u ユーザ名 -pパスワード DB名 テーブル名 | aws s3 cp - s3://バケット名/ファイル名

S3にバックアップが保存されているか確認

yamada-backup-s3にバックアップが保存されていれば完了です!

image.png

中身は以下のような感じです。

-- MySQL dump 10.13  Distrib 8.0.26, for Linux (x86_64)
--
-- Host: localhost    Database: mysql
-- ------------------------------------------------------
-- Server version   8.0.26

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `users`
--

DROP TABLE IF EXISTS `users`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `users` (
  `id` int DEFAULT NULL,
  `name` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `users`
--

LOCK TABLES `users` WRITE;
/*!40000 ALTER TABLE `users` DISABLE KEYS */;
INSERT INTO `users` VALUES (1,'Yamada');
/*!40000 ALTER TABLE `users` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2022-01-11 10:54:04

dumpファイルについて調べてみると、dumpファイルとは元のデータベースにあったテーブルを作り直すためのコマンドが記載してあるファイルのことだそうです。

参考URLは以下です。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1