データベース管理
💾 データベース管理完全ガイド
Section titled “💾 データベース管理完全ガイド”データベースのバックアップ、レプリケーション、パフォーマンス最適化など、実務で必要なデータベース管理の知識を詳しく解説します。
💾 1. データベースのバックアップ
Section titled “💾 1. データベースのバックアップ”💾 バックアップの重要性
Section titled “💾 バックアップの重要性”データベースのバックアップは、データ損失を防ぐための重要な対策です。
PostgreSQLのバックアップ
Section titled “PostgreSQLのバックアップ”# pg_dumpを使用したバックアップpg_dump -h localhost -U postgres -d mydb > backup.sql
# 圧縮バックアップpg_dump -h localhost -U postgres -d mydb | gzip > backup.sql.gz
# カスタム形式でのバックアップpg_dump -h localhost -U postgres -F c -d mydb -f backup.dumpMySQLのバックアップ
Section titled “MySQLのバックアップ”# mysqldumpを使用したバックアップmysqldump -u root -p mydb > backup.sql
# 圧縮バックアップmysqldump -u root -p mydb | gzip > backup.sql.gz
# すべてのデータベースのバックアップmysqldump -u root -p --all-databases > all_backup.sql自動バックアップの設定
Section titled “自動バックアップの設定”#!/bin/bashDATE=$(date +%Y%m%d_%H%M%S)BACKUP_DIR="/backups"DB_NAME="mydb"
# PostgreSQLのバックアップpg_dump -h localhost -U postgres -d $DB_NAME | gzip > $BACKUP_DIR/backup_$DATE.sql.gz
# 古いバックアップの削除(30日以上)find $BACKUP_DIR -name "backup_*.sql.gz" -mtime +30 -delete# crontabで定期実行# 毎日午前2時にバックアップ0 2 * * * /path/to/backup.sh2. データベースのレプリケーション
Section titled “2. データベースのレプリケーション”レプリケーションとは
Section titled “レプリケーションとは”レプリケーションは、データベースのコピーを複数のサーバーに保持し、可用性とパフォーマンスを向上させます。
PostgreSQLのレプリケーション
Section titled “PostgreSQLのレプリケーション”-- マスターサーバーの設定(postgresql.conf)wal_level = replicamax_wal_senders = 3max_replication_slots = 3
-- レプリケーションスロットの作成SELECT pg_create_physical_replication_slot('replica_slot');
-- スレーブサーバーの設定(recovery.conf)primary_conninfo = 'host=master.example.com port=5432 user=replicator'primary_slot_name = 'replica_slot'MySQLのレプリケーション
Section titled “MySQLのレプリケーション”-- マスターサーバーの設定(my.cnf)[mysqld]server-id = 1log-bin = mysql-binbinlog-format = ROW
-- レプリケーションユーザーの作成CREATE USER 'replicator'@'%' IDENTIFIED BY 'password';GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
-- スレーブサーバーの設定CHANGE MASTER TO MASTER_HOST='master.example.com', MASTER_USER='replicator', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;
START SLAVE;3. パフォーマンス最適化
Section titled “3. パフォーマンス最適化”インデックスの最適化
Section titled “インデックスの最適化”-- インデックスの作成CREATE INDEX idx_user_email ON users(email);
-- 複合インデックスCREATE INDEX idx_user_name_email ON users(name, email);
-- インデックスの使用状況を確認EXPLAIN ANALYZE SELECT * FROM users WHERE email = 'user@example.com';クエリの最適化
Section titled “クエリの最適化”-- 不要なSELECT *を避けるSELECT id, name, email FROM users WHERE id = 1;
-- JOINの最適化SELECT u.name, o.totalFROM users uINNER JOIN orders o ON u.id = o.user_idWHERE u.id = 1;
-- LIMITの使用SELECT * FROM users ORDER BY created_at DESC LIMIT 10;4. よくある問題と解決策
Section titled “4. よくある問題と解決策”問題1: データベースが遅い
Section titled “問題1: データベースが遅い”原因:
- インデックスが不足している
- クエリが最適化されていない
- リソースが不足している
解決策:
-- スロークエリログの確認SHOW VARIABLES LIKE 'slow_query_log';
-- インデックスの確認SHOW INDEX FROM users;
-- クエリの実行計画を確認EXPLAIN ANALYZE SELECT * FROM users WHERE email = 'user@example.com';問題2: ディスク容量が不足
Section titled “問題2: ディスク容量が不足”原因:
- ログファイルが大きくなっている
- バックアップファイルが蓄積している
解決策:
# ログファイルのローテーション# logrotateの設定/var/log/postgresql/*.log { daily rotate 7 compress delaycompress notifempty missingok}
# 古いバックアップの削除find /backups -name "*.sql.gz" -mtime +30 -deleteこれで、データベース管理の基礎知識と実務での使い方を理解できるようになりました。