SlideShare a Scribd company logo
1 of 13
Download to read offline
Backup Requirement
RTO(Recovery Time Objective):目標復旧時間
–障害発生時に「どのくらいの時間で復旧させるか?」
RPO(Recovery Point Objective):目標復旧時点
–障害発生時に「どの時点までのデータを復旧させる必要があるか?」
バックアップ計画を立てる為に、先ずは障害発生時のリカバリー要件を検討し方法を選択。
Backup Procedure
オフラインバックアップ
–物理バックアップ(コールドバックアップ)
–MySQL & PostgreSQLを停止してデータベースのバックアップを取得
オンラインバックアップ
–論理バックアップ
 mysqldump, mysqlpump, pg_dump, pg_dumpallコマンドを使ってバックアップを取得(Lockやオプションは確認)
mysql, psql, pg_restoreコマンドによるリストア
 ※ 並列処理が可能:mysqlpump, pg_dump & pg_restore(共にPG9.6以降)
–物理バックアップ
pg_basebackup, pg_start_backup & pg_stop_backup + WALファイルをバックアップ(任意の時点にリカバリ可)
 xtrabackup, mysqlbackup (差分バックアップ、任意の時点にリカバリ可)
※ MySQL, PostgreSQL共にレプリケーションを利用して物理的な障害などに対応可能。
※ pg_dumpはテキスト(psqlでリストア)、カスタム、tar、ディレクトリーでバックアップを取得。バイナリーはpg_restoreでリストア
バックアップ & リカバリー方法
Compared Version
MySQL PostgreSQL
root@localhost [mysql]> select @@version,now();
+-----------+---------------------+
| @@version | now() |
+-----------+---------------------+
| 8.0.18 | 2019-11-04 01:50:06 |
+-----------+---------------------+
1 row in set (0.00 sec)
postgres=# select version();
version
--------------------------------------
PostgreSQL 12.0 on x86_64-pc-linux-gnu,
compiled by gcc (GCC) 4.8.5 20150623
(Red Hat 4.8.5-39), 64-bit
(1 行)
PostgreSQL 12 Release date: 2019-10-03
https://www.postgresql.org/docs/12/release-12.html
MySQL 8.0.18 Release date: 2019-10-14
https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-18.html
Logical Backup (ALL)
MySQL PostgreSQL
# ❶ 全てのオブジェクトをバックアップ
-bash-4.2$ mysqldump --user=root --password=password --all-databases --
default-character-set=utf8mb4 --flush-logs --single-transaction --hex-blob
--triggers --routines --events --master-data=2 > all_dbs_20200105.sql
# ❶ dropデータベースを含まない
-bash-4.2$ pg_dumpall -f all_databases_20200105.sql
# ❷ dropデータベースを含む (リストア時はpostgresデータベースに接続)
-bash-4.2$ pg_dumpall --clean -f all_databases_with_drop_20200105.sql
-bash-4.2$ zcat ALLDB_20200104.sql.gz | head -n 40 | grep -v ^'--'
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `app` /*!40100 DEFAULT CHARACTER
SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N'
*/;
USE `app`;
DROP TABLE IF EXISTS `FTS_DOC`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
-bash-4.2$
https://dev.mysql.com/doc/refman/5.6/ja/mysqldump.html
https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html
※ ここではInnoDBのトランザクションを利用出来る事を前提にバックアップ
※ MyISAM等トランザクション非対応のテーブルは,LOCKしてバックアップが必要
-bash-4.2$ cat all_databases_20200105.sql | grep -i create | head -n 10
CREATE ROLE application_role;
ALTER ROLE application_role WITH SUPERUSER INHERIT NOCREATEROLE NOCREATEDB
LOGIN NOREPLICATION NOBYPASSRLS PASSWORD 'md5eacb5421b43a0da9377231f';
CREATE ROLE postgres;
ALTER ROLE postgres WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN
REPLICATION BYPASSRLS PASSWORD 'md572f4e1133f9b86c968ef';
CREATE DATABASE app WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE
= 'ja_JP.UTF-8' LC_CTYPE = 'ja_JP.UTF-8';
CREATE TABLE public.btree (
CREATE TABLE public.const (
CREATE TABLE public.films (
-bash-4.2$
https://www.postgresql.jp/document/11/html/app-pg-dumpall.html
含 場合 適宜事前削除利用
等 指定
Logical Backup (Specific Schema)
MySQL PostgreSQL
# ❶ 特定スキーマをダンプ(カンマ区切りで複数指定可能)
-bash-4.2$ mysqldump --user=root --password=password --databases gis --
default-character-set=utf8mb4 --flush-logs --single-transaction --hex-blob
--triggers --routines --events --master-data=2 > dbs_20200105.sql
# ❶ dropデータベースを含まないPlainテキストフォーマットのダンプ
-bash-4.2$ pg_dump -Fp -f app.dump_plain app #Plainテキスト
# ❷ dropデータベースを含まないバイナリーフォーマットのダンプ
-bash-4.2$ pg_dump -Fc -f app.dump app #バイナリー
※ リストア時に-cオプションを指定してオブジェクトを削除可能
-bash-4.2$ pg_restore -c -d app app.dump
-bash-4.2$ cat dbs_20200105.sql | grep -ie create -ie drop
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `gis` /*!40100 DEFAULT CHARACTER
SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N'
*/;
DROP TABLE IF EXISTS `temp1`;
CREATE TABLE `temp1` (
DROP TABLE IF EXISTS `tokyo_area`;
CREATE TABLE `tokyo_area` (
-bash-4.2$
※ デフォルトでは INFORMATION_SCHEMAデータベースおよび performance_schema
データベースをダンプしません。必須では無いですが、これらをダンプするには、
コマンド行で明示的に指定し、--skip-lock-tables オプションも使用します。  
--databases オプションでも指定可能。
-F format ( --format=format )
p : plain (平文のSQLスクリプトファイルを出力でpsqlでリストア)
c : custom (pg_restoreへの入力に適したアーカイブを出力)
d : directory (pg_restoreへの入力に適したアーカイブを出力)
t : tar (pg_restoreへの入力に適したアーカイブを出力)
※ Plainテキストバックアップの場合は、psqlでリストア可能
$ dropdb app
$ createdb -E UTF8 -l ja_JP.UTF-8 -T template0 -O application_role app
$ psql app < app.dump_plain
https://www.postgresql.jp/document/11/html/app-pgdump.html
https://www.postgresql.jp/document/11/html/app-pgrestore.html
https://www.postgresql.jp/document/11/html/app-dropdb.html
https://www.postgresql.jp/document/11/html/app-createdb.html
指定
複数 指定 事 可能
時 選択可能
Logical Dump Restore (ALL)
MySQL PostgreSQL
# ❶ 全てのデータベースやアカウント情報をリストア
-bash-4.2$ mysql --user=root --password=password < all_dbs_20200105.sql
# ❶ dropデータベースを含まない
-bash-4.2$ psql -f all_databases_20200105.sql postgres
# ❷ dropデータベースを含む (リストア時はpostgresデータベースに接続)
-bash-4.2$ psql -f all_databases_with_drop_20200105.sql postgres
-bash-4.2$ mysql --user=root --password=password < all_dbs_20200105.sql
❶ スキーマは存在していればそのまま、テーブルオブジェクトは存在していれば
dropして再作成してデータをINSERT
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `app` /*!40100 DEFAULT CHARACTER
SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N'
*/;
USE `app`;
DROP TABLE IF EXISTS `FTS_DOC`;
❶ postgres以外のデータベースを削除してリストア
-bash-4.2$ dropdb app
-bash-4.2$ dropdb lc_test
-bash-4.2$ psql -f all_databases_20200105.sql postgres
SET
CREATE DATABASE
ALTER DATABASE
データベース"app"にユーザ"postgres"として接続しました。
❷ psql -f all_databases_with_drop_20200105.sql postgres
-bash-4.2$ psql -f all_databases_with_drop_20200105.sql postgres
SET
SET
SET
DROP DATABASE
DROP DATABASE
DROP ROLE
"pg_dumpall --clean"を指定してバックアップ
を取得しているのでDROPも含まれるのでそのま
まリストアすれば良い。
Logical Backup Restore(Specific Schema)
MySQL PostgreSQL
# ❶ 特定スキーマをリストア
-bash-4.2$ mysql -u root -p gis < dbs_20200105.sql
# ❶ dropデータベースを含まないPlainテキストフォーマットのダンプ
-bash-4.2$ psql app < app.dump_plain
# ❷ dropデータベースを含まないバイナリーフォーマットのダンプ
-bash-4.2$ pg_restore -c -d app app.dump
-bash-4.2$ mysql -u root -p gis < dbs_20200105.sql
Enter password:
-bash-4.2$
root@localhost [gis]> show tables;
+---------------+
| Tables_in_gis |
+---------------+
| temp1 |
| tokyo_area |
+---------------+
2 rows in set (0.00 sec)
root@localhost [gis]>
❶ Plainテキストフォーマットのダンプファイルリストア (psqlでリストア)
$ dropdb app
$ createdb -E UTF8 -l ja_JP.UTF-8 -T template0 -O application_role app
$ psql app < app.dump_plain
❷ リストア時に"-c"を指定し事前にオブジェクトを削除 (pg_restoreでリストア)
-bash-4.2$ pg_restore -c -d app app.dump
app=# l
データベース一覧
-[ RECORD 1 ]-----+----------------------
名前 | app
所有者 | postgres
エンコーディング | UTF8
https://www.postgresql.jp/document/11/html/app-pgrestore.html
https://www.postgresql.jp/document/11/html/app-dropdb.html
https://www.postgresql.jp/document/11/html/app-createdb.html
バイナリーフォーマットのダンプにて -cで事前
に対象オブジェクトの削除を指定する事が可能
Physical Backup (MySQL)
MySQL
-bash-4.2$ yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
-bash-4.2$ yum install percona-xtrabackup-24.x86_64
-bash-4.2$ yum install qpress
-bash-4.2$ innobackupex --user root --password root --compress /mnt/log/backup/20200201
<SNIP>
200201 12:47:46 Executing UNLOCK BINLOG
200201 12:47:46 Executing UNLOCK TABLES
200201 12:47:46 All tables unlocked
200201 12:47:46 [00] Compressing ib_buffer_pool to /mnt/data/backup/20200201/2020-02-01_12-47-46/ib_buffer_pool.qp
200201 12:47:46 [00] ...done
200201 12:47:46 Backup created in directory '/mnt/data/backup/20200201/2020-02-01_12-47-46/'
MySQL binlog position: filename 'mysql-bin.000148', position '154', GTID of the last change ''
200201 12:47:46 [00] Compressing /mnt/data/backup/20200201/2020-02-01_12-47-46/backup-my.cnf.qp
200201 12:47:46 [00] ...done
200201 12:47:46 [00] Compressing /mnt/data/backup/20200201/2020-02-01_12-47-46/xtrabackup_info.qp
200201 12:47:46 [00] ...done
xtrabackup: Transaction log of lsn (1023727525908) to (1023727525958) was copied.
200201 12:47:46 completed OK!
データが大きくなるにしたがってバックアップが1時間以上かかることもある場合は、物理バックアップが良いでしょう。(リカバリーも高速!!)
※ 最新情報&詳細はマニュアルを参照してください
https://www.percona.com/doc/percona-xtrabackup/LATEST/installation/yum_repo.html
https://www.percona.com/doc/percona-xtrabackup/LATEST/xtrabackup_bin/xbk_option_reference.html
https://gihyo.jp/dev/serial/01/mysql-road-construction-news/0059?page=1
※ バックアップやサポートが必要な場合は、MySQLがオフィシャルに提供しているmysqlbackupの利用が良いでしょう。(MySQLのバージョンに合わせてmysqlbackupも選択)
https://www.mysql.com/jp/products/enterprise/backup.html
--incrementalオプションを付ける事でフルバック
アップ取得後に差分バックアップを取得する事も可
能。最新版では, xtrabackupコマンドを利用するこ
とを推奨。
左記のように、ログファイルも一緒にバックアップさ
れるので、リストア時にはデータファイルに該当ログ
を適用してから、--copy-backを利用してMySQLのデー
タディレクトリーにリストア
Physical Backup (PostgreSQL)
PostgreSQL
-bash-4.2$ psql -c "SELECT pg_start_backup('online_physical_backup');"
pg_start_backup
-----------------
0/D000028
(1 行)
-bash-4.2$ cp -rp /var/lib/pgsql/12/data/ /var/lib/pgsql/physical_backup/
-bash-4.2$ psql -c "SELECT pg_stop_backup();"
NOTICE: 必要なすべての WAL セグメントがアーカイブされました
pg_stop_backup
----------------
0/D000170
(1 行)
-bash-4.2$ cat 12/data/archive/00000001000000000000000D.00000028.backup
START WAL LOCATION: 0/D000028 (file 00000001000000000000000D)
STOP WAL LOCATION: 0/D000170 (file 00000001000000000000000D)
CHECKPOINT LOCATION: 0/D000098
BACKUP METHOD: pg_start_backup
BACKUP FROM: master
START TIME: 2020-02-01 17:32:22 JST
LABEL: online_physical_backup
START TIMELINE: 1
STOP TIME: 2020-02-01 17:33:00 JST
STOP TIMELINE: 1
-bash-4.2$ psql app -c "select pg_switch_wal();"
-bash-4.2$ cat /var/lib/pgsql/12/data/postgresql.conf | grep -v ^# | grep restore
restore_command = 'cp /var/lib/pgsql/12/data/archive/%f %p' # placeholders: %p = path of file to restore
Oracleのオンラインバックアップに似ている。
1) pg_start_backup()でバックアップ開始を宣言
2) データファイルをコピー
3) pg_stop_backup()でバックアップを停止
4) pg_switch_wal()で最新データをアーカイブログに記録
リカバリーの為に、postgresql.confにrestore_commandを追記
データフォルダーをまるごと入れ替えて、PostgreSQLを起動
※recovery.confはPostgreSQL12には無く、postgresql.confに統合
-bash-4.2$ cat postgresql.conf | grep -e "recovery_target_time" -e "restore_command"
restore_command = 'cp /var/lib/pgsql/12/data/archive/%f %p'
#restore_command = '' # command to use to restore an archived logfile segment
#recovery_target_time = '' # the time stamp up to which recovery will proceed
#recovery_target_timeline = 'latest' # 'current', 'latest', or timeline ID
More Info
pg_dumpall: https://www.postgresql.jp/document/11/html/app-pg-dumpall.html
pg_dump: https://www.postgresql.jp/document/11/html/app-pgdump.html
pg_restore: https://www.postgresql.jp/document/11/html/app-pgrestore.html
dropdb: https://www.postgresql.jp/document/11/html/app-dropdb.html
createdb: https://www.postgresql.jp/document/11/html/app-createdb.html
PITR: https://www.postgresql.jp/document/11/html/continuous-archiving.html
https://www.slideshare.net/uptimejp/postgresql-14108817
https://www.slideshare.net/satock/osc-hokkaido2014-backuprecovery
https://oss-db.jp/amp/dojo/dojo_info_08
mysqldump: https://dev.mysql.com/doc/refman/5.6/ja/mysqldump.html
mysqldump: https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html
mysqlpump: https://dev.mysql.com/doc/refman/8.0/en/mysqlpump.html
MySQLに関しては、mysqldumpとMySQL5.7にて実装されたmysqlpumpを利用して論理バックアップの取得が可能。
mysqlpumpに関しては、マルチスレッドにてバックアップ可能。
PostgreSQLに関しては、pg_dumpallを利用して全てのデータベースのバックアップ可能、
但しPlainテキストフォーマットのみでダンプ可能。各データベースをダンプする場合は、
pg_dumpでフォーマットを指定してバックアップを取得し、pg_restoreでリストアする事が可能。
それぞれ、-jオプションを指定する事で並列処理が可能。
物理バックアップに関しては、論理バックアップと比較しても柔軟にPITRの対応が可能。
補足:Backup & Replication (MySQL)
-bash-4.2$ zcat ALLDB_20200105.sql.gz | grep -A5 "Position to start replication or point-in-time recovery from"
-- Position to start replication or point-in-time recovery from
--
-- CHANGE MASTER TO MASTER_LOG_FILE='binlog.001403', MASTER_LOG_POS=155;
--
-bash-4.2$ cat dbs_20200105.sql | grep -A5 "GTID state at the beginning of the backup"
-- GTID state at the beginning of the backup
--
SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ '50fca08e-5a35-11e8-a4f2-06db798d79c8:1';
--
Logポジションベースのレプリケーションはここから
レプリケーション開始すればOK
GTIDベースのレプリケーションはここから
レプリケーション開始されるのでリストア後にAUTO
でこのポジションから同期が開始される。
補足:Backup & Replication (PostgreSQL)
-bash-4.2$ systemctl stop postgresql-12
-bash-4.2$ systemctl status postgresql-12
-bash-4.2$ pwd
/var/lib/pgsql/12
-bash-4.2$ rm -rf data/
-bash-4.2$ mkdir data
-bash-4.2$ pg_basebackup -R -h 192.168.56.104 -p 5432 -U replication_user -D "/var/lib/pgsql/12/data"
-bash-4.2$ chown -R postgres:postgres data/
-bash-4.2$ chmod -R 700 data/
pg_basebackupコマンドに-Rオプションを付けて
Slaveにてバックアップを実行
-bash-4.2$ vim postgresql.conf
-bash-4.2$ cat postgresql.conf | grep hot_standby
hot_standby = on # "off" disallows queries during recovery
-bash-4.2$
-bash-4.2$ ls -l standby.signal
-rw-------. 1 postgres postgres 0 1月 11 10:32 standby.signal
[root@CL-SLAVE01 data]# cat postgresql.auto.conf | grep primary_conninfo
primary_conninfo = 'user=replication_user passfile=''/var/lib/pgsql/.pgpass'' host=192.168.56.104 port=5432 sslmode=prefer sslcompression=0
gssencmode=prefer krbsrvname=postgres
PostgreSQL12からは、recovery.confは不要
postgresql.confのhot_standbyをONにしてあげる
だけで、スレーブを開始すれば同期が始まります。

More Related Content

What's hot

PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~Miki Shimogai
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)NTT DATA Technology & Innovation
 
雑なMySQLパフォーマンスチューニング
雑なMySQLパフォーマンスチューニング雑なMySQLパフォーマンスチューニング
雑なMySQLパフォーマンスチューニングyoku0825
 
PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)NTT DATA Technology & Innovation
 
PostgreSQL:行数推定を読み解く
PostgreSQL:行数推定を読み解くPostgreSQL:行数推定を読み解く
PostgreSQL:行数推定を読み解くHiroya Kabata
 
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウトMasahiko Sawada
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較Akihiro Suda
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)NTT DATA Technology & Innovation
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)NTT DATA Technology & Innovation
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドAkihiro Suda
 
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!NTT DATA Technology & Innovation
 
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...NTT DATA Technology & Innovation
 
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)NTT DATA Technology & Innovation
 
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...NTT DATA Technology & Innovation
 
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)NTT DATA Technology & Innovation
 
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 

What's hot (20)

PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
雑なMySQLパフォーマンスチューニング
雑なMySQLパフォーマンスチューニング雑なMySQLパフォーマンスチューニング
雑なMySQLパフォーマンスチューニング
 
PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)
 
PostgreSQL:行数推定を読み解く
PostgreSQL:行数推定を読み解くPostgreSQL:行数推定を読み解く
PostgreSQL:行数推定を読み解く
 
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウト
 
Vacuum徹底解説
Vacuum徹底解説Vacuum徹底解説
Vacuum徹底解説
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
 
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
 
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
 
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
 
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
 
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
 

Similar to MySQLとPostgreSQLの基本的なバックアップ比較

MySQLとPostgreSQLの基本的なレプリケーション設定比較
MySQLとPostgreSQLの基本的なレプリケーション設定比較MySQLとPostgreSQLの基本的なレプリケーション設定比較
MySQLとPostgreSQLの基本的なレプリケーション設定比較Shinya Sugiyama
 
MySQLとPostgreSQLにおける基本的なアカウント管理
MySQLとPostgreSQLにおける基本的なアカウント管理MySQLとPostgreSQLにおける基本的なアカウント管理
MySQLとPostgreSQLにおける基本的なアカウント管理Shinya Sugiyama
 
MySQLとPostgreSQLの基本的な実行プラン比較
MySQLとPostgreSQLの基本的な実行プラン比較MySQLとPostgreSQLの基本的な実行プラン比較
MySQLとPostgreSQLの基本的な実行プラン比較Shinya Sugiyama
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1Ryosuke IWANAGA
 
PostgreSQLレプリケーション(pgcon17j_t4)
PostgreSQLレプリケーション(pgcon17j_t4)PostgreSQLレプリケーション(pgcon17j_t4)
PostgreSQLレプリケーション(pgcon17j_t4)Kosuke Kida
 
PostgreSQL Unconference #26 No Error on PostgreSQL
PostgreSQL Unconference #26 No Error on PostgreSQLPostgreSQL Unconference #26 No Error on PostgreSQL
PostgreSQL Unconference #26 No Error on PostgreSQLNoriyoshi Shinoda
 
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)Uptime Technologies LLC (JP)
 
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界Yoshinori Nakanishi
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Masahiro Nagano
 
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-靖 小田島
 
実用裏方 Perl 入門
実用裏方 Perl 入門実用裏方 Perl 入門
実用裏方 Perl 入門keroyonn
 
20170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#820170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#8Kohei KaiGai
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2Atsuo Yamasaki
 
JPUG 沖縄支部セミナー資料(2013-04-27)
JPUG 沖縄支部セミナー資料(2013-04-27)JPUG 沖縄支部セミナー資料(2013-04-27)
JPUG 沖縄支部セミナー資料(2013-04-27)Chika SATO
 
MySQLとPostgreSQLの基本的なパラメータ比較
MySQLとPostgreSQLの基本的なパラメータ比較MySQLとPostgreSQLの基本的なパラメータ比較
MySQLとPostgreSQLの基本的なパラメータ比較Shinya Sugiyama
 
Chugoku db 20th-postgresql-10-pub
Chugoku db 20th-postgresql-10-pubChugoku db 20th-postgresql-10-pub
Chugoku db 20th-postgresql-10-pubToshi Harada
 

Similar to MySQLとPostgreSQLの基本的なバックアップ比較 (20)

Mysql casial01
Mysql casial01Mysql casial01
Mysql casial01
 
MySQLとPostgreSQLの基本的なレプリケーション設定比較
MySQLとPostgreSQLの基本的なレプリケーション設定比較MySQLとPostgreSQLの基本的なレプリケーション設定比較
MySQLとPostgreSQLの基本的なレプリケーション設定比較
 
MySQLとPostgreSQLにおける基本的なアカウント管理
MySQLとPostgreSQLにおける基本的なアカウント管理MySQLとPostgreSQLにおける基本的なアカウント管理
MySQLとPostgreSQLにおける基本的なアカウント管理
 
MySQLとPostgreSQLの基本的な実行プラン比較
MySQLとPostgreSQLの基本的な実行プラン比較MySQLとPostgreSQLの基本的な実行プラン比較
MySQLとPostgreSQLの基本的な実行プラン比較
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
 
PostgreSQLレプリケーション(pgcon17j_t4)
PostgreSQLレプリケーション(pgcon17j_t4)PostgreSQLレプリケーション(pgcon17j_t4)
PostgreSQLレプリケーション(pgcon17j_t4)
 
PostgreSQL Unconference #26 No Error on PostgreSQL
PostgreSQL Unconference #26 No Error on PostgreSQLPostgreSQL Unconference #26 No Error on PostgreSQL
PostgreSQL Unconference #26 No Error on PostgreSQL
 
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
 
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界
 
Capistrano
CapistranoCapistrano
Capistrano
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
 
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
 
実用裏方 Perl 入門
実用裏方 Perl 入門実用裏方 Perl 入門
実用裏方 Perl 入門
 
20170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#820170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#8
 
dm-thin-internal-ja
dm-thin-internal-jadm-thin-internal-ja
dm-thin-internal-ja
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
 
about dakota6.7 gui
about dakota6.7 guiabout dakota6.7 gui
about dakota6.7 gui
 
JPUG 沖縄支部セミナー資料(2013-04-27)
JPUG 沖縄支部セミナー資料(2013-04-27)JPUG 沖縄支部セミナー資料(2013-04-27)
JPUG 沖縄支部セミナー資料(2013-04-27)
 
MySQLとPostgreSQLの基本的なパラメータ比較
MySQLとPostgreSQLの基本的なパラメータ比較MySQLとPostgreSQLの基本的なパラメータ比較
MySQLとPostgreSQLの基本的なパラメータ比較
 
Chugoku db 20th-postgresql-10-pub
Chugoku db 20th-postgresql-10-pubChugoku db 20th-postgresql-10-pub
Chugoku db 20th-postgresql-10-pub
 

More from Shinya Sugiyama

Locondo 20190703@inno db_cluster
Locondo 20190703@inno db_clusterLocondo 20190703@inno db_cluster
Locondo 20190703@inno db_clusterShinya Sugiyama
 
Locondo 20190215@ec tech_group
Locondo 20190215@ec tech_groupLocondo 20190215@ec tech_group
Locondo 20190215@ec tech_groupShinya Sugiyama
 
DB tech showcase_tokyo2018_LOCONDO
DB tech showcase_tokyo2018_LOCONDODB tech showcase_tokyo2018_LOCONDO
DB tech showcase_tokyo2018_LOCONDOShinya Sugiyama
 
MySQL8.0 SYS スキーマ概要
MySQL8.0 SYS スキーマ概要MySQL8.0 SYS スキーマ概要
MySQL8.0 SYS スキーマ概要Shinya Sugiyama
 
MySQL SYSスキーマのご紹介
MySQL SYSスキーマのご紹介MySQL SYSスキーマのご紹介
MySQL SYSスキーマのご紹介Shinya Sugiyama
 
Oracle Cloud MySQL Service
Oracle Cloud MySQL ServiceOracle Cloud MySQL Service
Oracle Cloud MySQL ServiceShinya Sugiyama
 
MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)
MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)
MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)Shinya Sugiyama
 
MySQLデータ暗号化と暗号鍵のローテーション
MySQLデータ暗号化と暗号鍵のローテーションMySQLデータ暗号化と暗号鍵のローテーション
MySQLデータ暗号化と暗号鍵のローテーションShinya Sugiyama
 
Power of SQL and NoSQL with MySQL5.7
Power of SQL and NoSQL with MySQL5.7Power of SQL and NoSQL with MySQL5.7
Power of SQL and NoSQL with MySQL5.7Shinya Sugiyama
 
Multi thread slave_performance_on_opc
Multi thread slave_performance_on_opcMulti thread slave_performance_on_opc
Multi thread slave_performance_on_opcShinya Sugiyama
 
db tech showcase2016 - MySQLドキュメントストア
db tech showcase2016 - MySQLドキュメントストアdb tech showcase2016 - MySQLドキュメントストア
db tech showcase2016 - MySQLドキュメントストアShinya Sugiyama
 
MySQL57 Update@OSC Fukuoka 20151003
MySQL57 Update@OSC Fukuoka 20151003MySQL57 Update@OSC Fukuoka 20151003
MySQL57 Update@OSC Fukuoka 20151003Shinya Sugiyama
 
No sql with mysql cluster (MyNA・JPUG合同DB勉強会)
No sql with mysql cluster (MyNA・JPUG合同DB勉強会)No sql with mysql cluster (MyNA・JPUG合同DB勉強会)
No sql with mysql cluster (MyNA・JPUG合同DB勉強会)Shinya Sugiyama
 
MySQL 5.7とレプリケーションにおける改良
MySQL 5.7とレプリケーションにおける改良MySQL 5.7とレプリケーションにおける改良
MySQL 5.7とレプリケーションにおける改良Shinya Sugiyama
 
MySQL 5.7 Technical Update (日本語)
MySQL 5.7 Technical Update (日本語)MySQL 5.7 Technical Update (日本語)
MySQL 5.7 Technical Update (日本語)Shinya Sugiyama
 
MySQL Fabric with OpenStack Nova
MySQL Fabric with OpenStack NovaMySQL Fabric with OpenStack Nova
MySQL Fabric with OpenStack NovaShinya Sugiyama
 
My sql security (暗号化)
My sql security (暗号化) My sql security (暗号化)
My sql security (暗号化) Shinya Sugiyama
 

More from Shinya Sugiyama (19)

Locondo 20190703@inno db_cluster
Locondo 20190703@inno db_clusterLocondo 20190703@inno db_cluster
Locondo 20190703@inno db_cluster
 
Locondo 20190215@ec tech_group
Locondo 20190215@ec tech_groupLocondo 20190215@ec tech_group
Locondo 20190215@ec tech_group
 
DB tech showcase_tokyo2018_LOCONDO
DB tech showcase_tokyo2018_LOCONDODB tech showcase_tokyo2018_LOCONDO
DB tech showcase_tokyo2018_LOCONDO
 
MySQL8.0 SYS スキーマ概要
MySQL8.0 SYS スキーマ概要MySQL8.0 SYS スキーマ概要
MySQL8.0 SYS スキーマ概要
 
MySQL SYSスキーマのご紹介
MySQL SYSスキーマのご紹介MySQL SYSスキーマのご紹介
MySQL SYSスキーマのご紹介
 
MySQL Partition Engine
MySQL Partition EngineMySQL Partition Engine
MySQL Partition Engine
 
Oracle Cloud MySQL Service
Oracle Cloud MySQL ServiceOracle Cloud MySQL Service
Oracle Cloud MySQL Service
 
MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)
MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)
MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)
 
MySQL8.0 in COSCUP2017
MySQL8.0 in COSCUP2017MySQL8.0 in COSCUP2017
MySQL8.0 in COSCUP2017
 
MySQLデータ暗号化と暗号鍵のローテーション
MySQLデータ暗号化と暗号鍵のローテーションMySQLデータ暗号化と暗号鍵のローテーション
MySQLデータ暗号化と暗号鍵のローテーション
 
Power of SQL and NoSQL with MySQL5.7
Power of SQL and NoSQL with MySQL5.7Power of SQL and NoSQL with MySQL5.7
Power of SQL and NoSQL with MySQL5.7
 
Multi thread slave_performance_on_opc
Multi thread slave_performance_on_opcMulti thread slave_performance_on_opc
Multi thread slave_performance_on_opc
 
db tech showcase2016 - MySQLドキュメントストア
db tech showcase2016 - MySQLドキュメントストアdb tech showcase2016 - MySQLドキュメントストア
db tech showcase2016 - MySQLドキュメントストア
 
MySQL57 Update@OSC Fukuoka 20151003
MySQL57 Update@OSC Fukuoka 20151003MySQL57 Update@OSC Fukuoka 20151003
MySQL57 Update@OSC Fukuoka 20151003
 
No sql with mysql cluster (MyNA・JPUG合同DB勉強会)
No sql with mysql cluster (MyNA・JPUG合同DB勉強会)No sql with mysql cluster (MyNA・JPUG合同DB勉強会)
No sql with mysql cluster (MyNA・JPUG合同DB勉強会)
 
MySQL 5.7とレプリケーションにおける改良
MySQL 5.7とレプリケーションにおける改良MySQL 5.7とレプリケーションにおける改良
MySQL 5.7とレプリケーションにおける改良
 
MySQL 5.7 Technical Update (日本語)
MySQL 5.7 Technical Update (日本語)MySQL 5.7 Technical Update (日本語)
MySQL 5.7 Technical Update (日本語)
 
MySQL Fabric with OpenStack Nova
MySQL Fabric with OpenStack NovaMySQL Fabric with OpenStack Nova
MySQL Fabric with OpenStack Nova
 
My sql security (暗号化)
My sql security (暗号化) My sql security (暗号化)
My sql security (暗号化)
 

MySQLとPostgreSQLの基本的なバックアップ比較

  • 1.
  • 2. Backup Requirement RTO(Recovery Time Objective):目標復旧時間 –障害発生時に「どのくらいの時間で復旧させるか?」 RPO(Recovery Point Objective):目標復旧時点 –障害発生時に「どの時点までのデータを復旧させる必要があるか?」 バックアップ計画を立てる為に、先ずは障害発生時のリカバリー要件を検討し方法を選択。
  • 3. Backup Procedure オフラインバックアップ –物理バックアップ(コールドバックアップ) –MySQL & PostgreSQLを停止してデータベースのバックアップを取得 オンラインバックアップ –論理バックアップ  mysqldump, mysqlpump, pg_dump, pg_dumpallコマンドを使ってバックアップを取得(Lockやオプションは確認) mysql, psql, pg_restoreコマンドによるリストア  ※ 並列処理が可能:mysqlpump, pg_dump & pg_restore(共にPG9.6以降) –物理バックアップ pg_basebackup, pg_start_backup & pg_stop_backup + WALファイルをバックアップ(任意の時点にリカバリ可)  xtrabackup, mysqlbackup (差分バックアップ、任意の時点にリカバリ可) ※ MySQL, PostgreSQL共にレプリケーションを利用して物理的な障害などに対応可能。 ※ pg_dumpはテキスト(psqlでリストア)、カスタム、tar、ディレクトリーでバックアップを取得。バイナリーはpg_restoreでリストア バックアップ & リカバリー方法
  • 4. Compared Version MySQL PostgreSQL root@localhost [mysql]> select @@version,now(); +-----------+---------------------+ | @@version | now() | +-----------+---------------------+ | 8.0.18 | 2019-11-04 01:50:06 | +-----------+---------------------+ 1 row in set (0.00 sec) postgres=# select version(); version -------------------------------------- PostgreSQL 12.0 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit (1 行) PostgreSQL 12 Release date: 2019-10-03 https://www.postgresql.org/docs/12/release-12.html MySQL 8.0.18 Release date: 2019-10-14 https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-18.html
  • 5. Logical Backup (ALL) MySQL PostgreSQL # ❶ 全てのオブジェクトをバックアップ -bash-4.2$ mysqldump --user=root --password=password --all-databases -- default-character-set=utf8mb4 --flush-logs --single-transaction --hex-blob --triggers --routines --events --master-data=2 > all_dbs_20200105.sql # ❶ dropデータベースを含まない -bash-4.2$ pg_dumpall -f all_databases_20200105.sql # ❷ dropデータベースを含む (リストア時はpostgresデータベースに接続) -bash-4.2$ pg_dumpall --clean -f all_databases_with_drop_20200105.sql -bash-4.2$ zcat ALLDB_20200104.sql.gz | head -n 40 | grep -v ^'--' CREATE DATABASE /*!32312 IF NOT EXISTS*/ `app` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */; USE `app`; DROP TABLE IF EXISTS `FTS_DOC`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; -bash-4.2$ https://dev.mysql.com/doc/refman/5.6/ja/mysqldump.html https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html ※ ここではInnoDBのトランザクションを利用出来る事を前提にバックアップ ※ MyISAM等トランザクション非対応のテーブルは,LOCKしてバックアップが必要 -bash-4.2$ cat all_databases_20200105.sql | grep -i create | head -n 10 CREATE ROLE application_role; ALTER ROLE application_role WITH SUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD 'md5eacb5421b43a0da9377231f'; CREATE ROLE postgres; ALTER ROLE postgres WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION BYPASSRLS PASSWORD 'md572f4e1133f9b86c968ef'; CREATE DATABASE app WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'ja_JP.UTF-8' LC_CTYPE = 'ja_JP.UTF-8'; CREATE TABLE public.btree ( CREATE TABLE public.const ( CREATE TABLE public.films ( -bash-4.2$ https://www.postgresql.jp/document/11/html/app-pg-dumpall.html 含 場合 適宜事前削除利用 等 指定
  • 6. Logical Backup (Specific Schema) MySQL PostgreSQL # ❶ 特定スキーマをダンプ(カンマ区切りで複数指定可能) -bash-4.2$ mysqldump --user=root --password=password --databases gis -- default-character-set=utf8mb4 --flush-logs --single-transaction --hex-blob --triggers --routines --events --master-data=2 > dbs_20200105.sql # ❶ dropデータベースを含まないPlainテキストフォーマットのダンプ -bash-4.2$ pg_dump -Fp -f app.dump_plain app #Plainテキスト # ❷ dropデータベースを含まないバイナリーフォーマットのダンプ -bash-4.2$ pg_dump -Fc -f app.dump app #バイナリー ※ リストア時に-cオプションを指定してオブジェクトを削除可能 -bash-4.2$ pg_restore -c -d app app.dump -bash-4.2$ cat dbs_20200105.sql | grep -ie create -ie drop CREATE DATABASE /*!32312 IF NOT EXISTS*/ `gis` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */; DROP TABLE IF EXISTS `temp1`; CREATE TABLE `temp1` ( DROP TABLE IF EXISTS `tokyo_area`; CREATE TABLE `tokyo_area` ( -bash-4.2$ ※ デフォルトでは INFORMATION_SCHEMAデータベースおよび performance_schema データベースをダンプしません。必須では無いですが、これらをダンプするには、 コマンド行で明示的に指定し、--skip-lock-tables オプションも使用します。   --databases オプションでも指定可能。 -F format ( --format=format ) p : plain (平文のSQLスクリプトファイルを出力でpsqlでリストア) c : custom (pg_restoreへの入力に適したアーカイブを出力) d : directory (pg_restoreへの入力に適したアーカイブを出力) t : tar (pg_restoreへの入力に適したアーカイブを出力) ※ Plainテキストバックアップの場合は、psqlでリストア可能 $ dropdb app $ createdb -E UTF8 -l ja_JP.UTF-8 -T template0 -O application_role app $ psql app < app.dump_plain https://www.postgresql.jp/document/11/html/app-pgdump.html https://www.postgresql.jp/document/11/html/app-pgrestore.html https://www.postgresql.jp/document/11/html/app-dropdb.html https://www.postgresql.jp/document/11/html/app-createdb.html 指定 複数 指定 事 可能 時 選択可能
  • 7. Logical Dump Restore (ALL) MySQL PostgreSQL # ❶ 全てのデータベースやアカウント情報をリストア -bash-4.2$ mysql --user=root --password=password < all_dbs_20200105.sql # ❶ dropデータベースを含まない -bash-4.2$ psql -f all_databases_20200105.sql postgres # ❷ dropデータベースを含む (リストア時はpostgresデータベースに接続) -bash-4.2$ psql -f all_databases_with_drop_20200105.sql postgres -bash-4.2$ mysql --user=root --password=password < all_dbs_20200105.sql ❶ スキーマは存在していればそのまま、テーブルオブジェクトは存在していれば dropして再作成してデータをINSERT CREATE DATABASE /*!32312 IF NOT EXISTS*/ `app` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */; USE `app`; DROP TABLE IF EXISTS `FTS_DOC`; ❶ postgres以外のデータベースを削除してリストア -bash-4.2$ dropdb app -bash-4.2$ dropdb lc_test -bash-4.2$ psql -f all_databases_20200105.sql postgres SET CREATE DATABASE ALTER DATABASE データベース"app"にユーザ"postgres"として接続しました。 ❷ psql -f all_databases_with_drop_20200105.sql postgres -bash-4.2$ psql -f all_databases_with_drop_20200105.sql postgres SET SET SET DROP DATABASE DROP DATABASE DROP ROLE "pg_dumpall --clean"を指定してバックアップ を取得しているのでDROPも含まれるのでそのま まリストアすれば良い。
  • 8. Logical Backup Restore(Specific Schema) MySQL PostgreSQL # ❶ 特定スキーマをリストア -bash-4.2$ mysql -u root -p gis < dbs_20200105.sql # ❶ dropデータベースを含まないPlainテキストフォーマットのダンプ -bash-4.2$ psql app < app.dump_plain # ❷ dropデータベースを含まないバイナリーフォーマットのダンプ -bash-4.2$ pg_restore -c -d app app.dump -bash-4.2$ mysql -u root -p gis < dbs_20200105.sql Enter password: -bash-4.2$ root@localhost [gis]> show tables; +---------------+ | Tables_in_gis | +---------------+ | temp1 | | tokyo_area | +---------------+ 2 rows in set (0.00 sec) root@localhost [gis]> ❶ Plainテキストフォーマットのダンプファイルリストア (psqlでリストア) $ dropdb app $ createdb -E UTF8 -l ja_JP.UTF-8 -T template0 -O application_role app $ psql app < app.dump_plain ❷ リストア時に"-c"を指定し事前にオブジェクトを削除 (pg_restoreでリストア) -bash-4.2$ pg_restore -c -d app app.dump app=# l データベース一覧 -[ RECORD 1 ]-----+---------------------- 名前 | app 所有者 | postgres エンコーディング | UTF8 https://www.postgresql.jp/document/11/html/app-pgrestore.html https://www.postgresql.jp/document/11/html/app-dropdb.html https://www.postgresql.jp/document/11/html/app-createdb.html バイナリーフォーマットのダンプにて -cで事前 に対象オブジェクトの削除を指定する事が可能
  • 9. Physical Backup (MySQL) MySQL -bash-4.2$ yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm -bash-4.2$ yum install percona-xtrabackup-24.x86_64 -bash-4.2$ yum install qpress -bash-4.2$ innobackupex --user root --password root --compress /mnt/log/backup/20200201 <SNIP> 200201 12:47:46 Executing UNLOCK BINLOG 200201 12:47:46 Executing UNLOCK TABLES 200201 12:47:46 All tables unlocked 200201 12:47:46 [00] Compressing ib_buffer_pool to /mnt/data/backup/20200201/2020-02-01_12-47-46/ib_buffer_pool.qp 200201 12:47:46 [00] ...done 200201 12:47:46 Backup created in directory '/mnt/data/backup/20200201/2020-02-01_12-47-46/' MySQL binlog position: filename 'mysql-bin.000148', position '154', GTID of the last change '' 200201 12:47:46 [00] Compressing /mnt/data/backup/20200201/2020-02-01_12-47-46/backup-my.cnf.qp 200201 12:47:46 [00] ...done 200201 12:47:46 [00] Compressing /mnt/data/backup/20200201/2020-02-01_12-47-46/xtrabackup_info.qp 200201 12:47:46 [00] ...done xtrabackup: Transaction log of lsn (1023727525908) to (1023727525958) was copied. 200201 12:47:46 completed OK! データが大きくなるにしたがってバックアップが1時間以上かかることもある場合は、物理バックアップが良いでしょう。(リカバリーも高速!!) ※ 最新情報&詳細はマニュアルを参照してください https://www.percona.com/doc/percona-xtrabackup/LATEST/installation/yum_repo.html https://www.percona.com/doc/percona-xtrabackup/LATEST/xtrabackup_bin/xbk_option_reference.html https://gihyo.jp/dev/serial/01/mysql-road-construction-news/0059?page=1 ※ バックアップやサポートが必要な場合は、MySQLがオフィシャルに提供しているmysqlbackupの利用が良いでしょう。(MySQLのバージョンに合わせてmysqlbackupも選択) https://www.mysql.com/jp/products/enterprise/backup.html --incrementalオプションを付ける事でフルバック アップ取得後に差分バックアップを取得する事も可 能。最新版では, xtrabackupコマンドを利用するこ とを推奨。 左記のように、ログファイルも一緒にバックアップさ れるので、リストア時にはデータファイルに該当ログ を適用してから、--copy-backを利用してMySQLのデー タディレクトリーにリストア
  • 10. Physical Backup (PostgreSQL) PostgreSQL -bash-4.2$ psql -c "SELECT pg_start_backup('online_physical_backup');" pg_start_backup ----------------- 0/D000028 (1 行) -bash-4.2$ cp -rp /var/lib/pgsql/12/data/ /var/lib/pgsql/physical_backup/ -bash-4.2$ psql -c "SELECT pg_stop_backup();" NOTICE: 必要なすべての WAL セグメントがアーカイブされました pg_stop_backup ---------------- 0/D000170 (1 行) -bash-4.2$ cat 12/data/archive/00000001000000000000000D.00000028.backup START WAL LOCATION: 0/D000028 (file 00000001000000000000000D) STOP WAL LOCATION: 0/D000170 (file 00000001000000000000000D) CHECKPOINT LOCATION: 0/D000098 BACKUP METHOD: pg_start_backup BACKUP FROM: master START TIME: 2020-02-01 17:32:22 JST LABEL: online_physical_backup START TIMELINE: 1 STOP TIME: 2020-02-01 17:33:00 JST STOP TIMELINE: 1 -bash-4.2$ psql app -c "select pg_switch_wal();" -bash-4.2$ cat /var/lib/pgsql/12/data/postgresql.conf | grep -v ^# | grep restore restore_command = 'cp /var/lib/pgsql/12/data/archive/%f %p' # placeholders: %p = path of file to restore Oracleのオンラインバックアップに似ている。 1) pg_start_backup()でバックアップ開始を宣言 2) データファイルをコピー 3) pg_stop_backup()でバックアップを停止 4) pg_switch_wal()で最新データをアーカイブログに記録 リカバリーの為に、postgresql.confにrestore_commandを追記 データフォルダーをまるごと入れ替えて、PostgreSQLを起動 ※recovery.confはPostgreSQL12には無く、postgresql.confに統合 -bash-4.2$ cat postgresql.conf | grep -e "recovery_target_time" -e "restore_command" restore_command = 'cp /var/lib/pgsql/12/data/archive/%f %p' #restore_command = '' # command to use to restore an archived logfile segment #recovery_target_time = '' # the time stamp up to which recovery will proceed #recovery_target_timeline = 'latest' # 'current', 'latest', or timeline ID
  • 11. More Info pg_dumpall: https://www.postgresql.jp/document/11/html/app-pg-dumpall.html pg_dump: https://www.postgresql.jp/document/11/html/app-pgdump.html pg_restore: https://www.postgresql.jp/document/11/html/app-pgrestore.html dropdb: https://www.postgresql.jp/document/11/html/app-dropdb.html createdb: https://www.postgresql.jp/document/11/html/app-createdb.html PITR: https://www.postgresql.jp/document/11/html/continuous-archiving.html https://www.slideshare.net/uptimejp/postgresql-14108817 https://www.slideshare.net/satock/osc-hokkaido2014-backuprecovery https://oss-db.jp/amp/dojo/dojo_info_08 mysqldump: https://dev.mysql.com/doc/refman/5.6/ja/mysqldump.html mysqldump: https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html mysqlpump: https://dev.mysql.com/doc/refman/8.0/en/mysqlpump.html MySQLに関しては、mysqldumpとMySQL5.7にて実装されたmysqlpumpを利用して論理バックアップの取得が可能。 mysqlpumpに関しては、マルチスレッドにてバックアップ可能。 PostgreSQLに関しては、pg_dumpallを利用して全てのデータベースのバックアップ可能、 但しPlainテキストフォーマットのみでダンプ可能。各データベースをダンプする場合は、 pg_dumpでフォーマットを指定してバックアップを取得し、pg_restoreでリストアする事が可能。 それぞれ、-jオプションを指定する事で並列処理が可能。 物理バックアップに関しては、論理バックアップと比較しても柔軟にPITRの対応が可能。
  • 12. 補足:Backup & Replication (MySQL) -bash-4.2$ zcat ALLDB_20200105.sql.gz | grep -A5 "Position to start replication or point-in-time recovery from" -- Position to start replication or point-in-time recovery from -- -- CHANGE MASTER TO MASTER_LOG_FILE='binlog.001403', MASTER_LOG_POS=155; -- -bash-4.2$ cat dbs_20200105.sql | grep -A5 "GTID state at the beginning of the backup" -- GTID state at the beginning of the backup -- SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ '50fca08e-5a35-11e8-a4f2-06db798d79c8:1'; -- Logポジションベースのレプリケーションはここから レプリケーション開始すればOK GTIDベースのレプリケーションはここから レプリケーション開始されるのでリストア後にAUTO でこのポジションから同期が開始される。
  • 13. 補足:Backup & Replication (PostgreSQL) -bash-4.2$ systemctl stop postgresql-12 -bash-4.2$ systemctl status postgresql-12 -bash-4.2$ pwd /var/lib/pgsql/12 -bash-4.2$ rm -rf data/ -bash-4.2$ mkdir data -bash-4.2$ pg_basebackup -R -h 192.168.56.104 -p 5432 -U replication_user -D "/var/lib/pgsql/12/data" -bash-4.2$ chown -R postgres:postgres data/ -bash-4.2$ chmod -R 700 data/ pg_basebackupコマンドに-Rオプションを付けて Slaveにてバックアップを実行 -bash-4.2$ vim postgresql.conf -bash-4.2$ cat postgresql.conf | grep hot_standby hot_standby = on # "off" disallows queries during recovery -bash-4.2$ -bash-4.2$ ls -l standby.signal -rw-------. 1 postgres postgres 0 1月 11 10:32 standby.signal [root@CL-SLAVE01 data]# cat postgresql.auto.conf | grep primary_conninfo primary_conninfo = 'user=replication_user passfile=''/var/lib/pgsql/.pgpass'' host=192.168.56.104 port=5432 sslmode=prefer sslcompression=0 gssencmode=prefer krbsrvname=postgres PostgreSQL12からは、recovery.confは不要 postgresql.confのhot_standbyをONにしてあげる だけで、スレーブを開始すれば同期が始まります。