データベース
26.10 バージョンの違い
26.10 は、MySQL を 8.4 LTS から 9.7 LTS (リリースノートでは 9.7.2) に移動し、Valkey を含みます。 9.1.2。以下の 26.04 手順は、メジャー バージョンの移行手順ではありません。最初に、独立したバックアップ復元、アプリケーション ドライバー、および SQL の互換性をテストします。 公式リリースノート
この記事は、最初に Ubuntu 26.04 LTS 2026 年 4 月リリース ノートと照合してチェックされました。データベースのバージョンとアップグレードに関するメモは、引き続きページごとの検証が必要です。
データベースは、事実上すべての Web アプリケーションおよびサービスの中核コンポーネントです。 Ubuntu 公式リポジトリは、多くの一般的なデータベースのインストール パッケージを提供します。この記事では、最も一般的に使用されるデータベース (Ubuntu、26.04: MySQL/MariaDB、PostgreSQL、Redis、SQLite) をインストールして構成する方法について説明します。
MySQL / MariaDB
MySQL は世界で最も人気のあるオープンソース リレーショナル データベースの 1 つであり、MariaDB は MySQL の元の開発者によって保守されている MySQL のコミュニティ フォークです。両者は使用上非常に互換性があります。
Ubuntu 26.04 公式リポジトリは、MySQL と MariaDB の両方を提供します。 MariaDB は、パフォーマンスの最適化が向上し、よりオープンなコミュニティ ガバナンスを備えた、MySQL の完全互換性のあるドロップイン代替品です。特別な要件がない場合は、MariaDB をお勧めします。コマンドライン ツールと SQL 構文はほぼ同じです。
MySQL のインストール
# Install MySQL Server
sudo apt update
sudo apt install mysql-server
# Check service status
sudo systemctl status mysql
# Enable auto-start on boot
sudo systemctl enable mysqlMariaDB のインストール
# Install MariaDB Server
sudo apt update
sudo apt install mariadb-server
# Check service status
sudo systemctl status mariadb
# Enable auto-start on boot
sudo systemctl enable mariadbセキュリティの初期化
インストール後、必ずセキュリティ初期化スクリプトを実行してデータベースを強化してください。
# Both MySQL and MariaDB use the same command
sudo mysql_secure_installationスクリプトは次の操作をガイドします。
- root パスワードを設定します (まだ設定されていない場合)
- 匿名ユーザーを削除 (強く推奨)
- root リモート ログインを禁止します (強く推奨)
- テスト データベースを削除 (推奨)
- 特権テーブルをリロード
基本操作
# Log in to MySQL/MariaDB (Ubuntu defaults to unix_socket authentication)
sudo mysql
# Or log in with a password
mysql -u root -p一般的な SQL 操作:
-- List all databases
SHOW DATABASES;
-- Create a database
CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- Use a database
USE myapp;
-- Create a user and set password
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'StrongPassword123!';
-- Grant privileges (limited to a specific database)
GRANT ALL PRIVILEGES ON myapp.* TO 'appuser'@'localhost';
-- Flush privileges
FLUSH PRIVILEGES;
-- View user privileges
SHOW GRANTS FOR 'appuser'@'localhost';
-- Create a table
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Insert data
INSERT INTO users (username, email) VALUES ('zhang', 'zhang@example.com');
-- Query data
SELECT * FROM users;
-- View table structure
DESCRIBE users;
-- Drop a user
DROP USER 'appuser'@'localhost';
-- Drop a database
DROP DATABASE myapp;
-- Exit
EXIT;リモートアクセス構成
デフォルトでは、MySQL/MariaDB はローカルホスト (127.0.0.1) でのみリッスンします。リモート アクセスを有効にするには:
# Edit MySQL configuration
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# Or MariaDB configuration
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnfbind-address 行を見つけて、次のように変更します。
# Allow connections from all IPs (in production, bind to a specific IP)
bind-address = 0.0.0.0次に、リモート接続を許可するユーザーを作成します。
-- Create a user that can connect from any IP
CREATE USER 'remoteuser'@'%' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON myapp.* TO 'remoteuser'@'%';
FLUSH PRIVILEGES;
-- Or restrict to a specific IP
CREATE USER 'remoteuser'@'192.168.1.100' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON myapp.* TO 'remoteuser'@'192.168.1.100';
FLUSH PRIVILEGES;# Restart the service for changes to take effect
sudo systemctl restart mysql
# Or
sudo systemctl restart mariadb
# If the firewall is enabled, allow the port
sudo ufw allow 3306/tcpデータベースを公共のインターネット (0.0.0.0) に公開することは非常に危険です。リモート アクセスが必要な場合は、強力なパスワードを使用し、許可される接続 IP を制限し、ファイアウォール ルールを構成し、ポートを直接公開する代わりに SSH トンネルまたは VPN の使用を検討してください。
一般的な構成の最適化
/etc/mysql/mysql.conf.d/mysqld.cnf (または対応する MariaDB 構成ファイル) を編集します。
[mysqld]
# Character set (utf8mb4 recommended to support emoji and other characters)
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# InnoDB buffer pool (recommended: 50%-70% of physical memory)
innodb_buffer_pool_size = 1G
# Maximum connections
max_connections = 200
# Slow query log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2# Restart the service after changes
sudo systemctl restart mysqlPostgreSQL
PostgreSQL (一般に PG と略される) は、SQL 標準への厳格な準拠、豊富なデータ型、強力な拡張性で知られる強力なオープンソース オブジェクト リレーショナル データベースです。これは、複雑なクエリ、地理空間データ (PostGIS)、および JSON データに最適です。
PostgreSQL のインストール
# Install PostgreSQL
sudo apt update
sudo apt install postgresql postgresql-client
# Check service status
sudo systemctl status postgresql
# Check installed version
psql --versionユーザーとデータベースの作成
PostgreSQL は独自のユーザー認証システムを使用します。インストール後、postgres という名前のシステム ユーザーとデータベース スーパーユーザーが自動的に作成されます。
# Switch to the postgres user
sudo -u postgres psql-- Create a new database user
CREATE USER appuser WITH PASSWORD 'StrongPassword123!';
-- Create a database and assign an owner
CREATE DATABASE myapp OWNER appuser;
-- Grant connection privileges
GRANT ALL PRIVILEGES ON DATABASE myapp TO appuser;
-- List all databases
\l
-- List all users
\du
-- Switch database
\c myapp
-- Exit
\qコマンドライン ツールを使用することもできます。
# Create a new user using the postgres account
sudo -u postgres createuser --interactive appuser
# Create a database
sudo -u postgres createdb -O appuser myapp
# Connect with the new user
psql -U appuser -d myapp -h localhost基本操作
# Connect to a database
psql -U appuser -d myapp -h localhost-- Create a table
CREATE TABLE articles (
id SERIAL PRIMARY KEY,
title VARCHAR(200) NOT NULL,
content TEXT,
tags TEXT[],
metadata JSONB,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- Insert data (note: PostgreSQL supports array and JSON types)
INSERT INTO articles (title, content, tags, metadata)
VALUES (
'Ubuntu 26.04 Released',
'The new version brings many improvements...',
ARRAY['ubuntu', 'linux', 'release'],
'{"author": "admin", "views": 0}'::jsonb
);
-- Query data
SELECT * FROM articles;
-- JSON query
SELECT title FROM articles WHERE metadata->>'author' = 'admin';
-- Array query
SELECT title FROM articles WHERE 'ubuntu' = ANY(tags);
-- View table structure
\d articles
-- List all tables
\dt
-- View table sizes
\dt+一般的な psql コマンド
| 指示 | 説明 |
|---|---|
\l | すべてのデータベースをリストする |
\c dbname | 特定のデータベースに切り替える |
\dt | 現在のデータベース内のすべてのテーブルを一覧表示します |
\d tablename | テーブル構造を表示する |
\du | すべてのユーザー/ロールをリストする |
\di | すべてのインデックスをリストする |
\df | すべての関数をリストする |
\timing | クエリタイミングのオン/オフを切り替えます |
\x | 拡張表示モードを切り替える |
\q | 出口 |
リモートアクセス構成
# Edit the main configuration file
sudo nano /etc/postgresql/18/main/postgresql.conf# Change the listen address
listen_addresses = '*'# Edit the client authentication configuration
sudo nano /etc/postgresql/18/main/pg_hba.confファイルの末尾に以下を追加します。
# Allow a specific subnet via password authentication
host all all 192.168.1.0/24 scram-sha-256
# Or allow all IPs (not recommended for production)
host all all 0.0.0.0/0 scram-sha-256# Restart PostgreSQL
sudo systemctl restart postgresql
# Allow through firewall
sudo ufw allow 5432/tcpレディス / ヴァルキー
Redis / Valkey は、データベース、キャッシュ、メッセージ ブローカーとして使用できるオープンソースのメモリ内データ構造ストアです。文字列、ハッシュ、リスト、セットなどのさまざまなデータ構造をサポートしており、読み取り/書き込み速度が非常に速いことで知られています。
Ubuntu 26.04 公式リポジトリは Valkey 9.0 (Redis プロトコルと互換性のある Redis のコミュニティ フォーク) を促進し、それを main コンポーネントに移動しました。 Valkey をお勧めします。 Redis は引き続き個別にインストールできます。valkey-server と redis-server はリポジトリ内に共存します。以下の例では、valkey-server / valkey-cli コマンドで Valkey を使用しています。古い redis-cli は互換性エイリアスとして引き続き使用できます。
Valkeyのインストール
# Install Valkey (recommended on 26.04)
sudo apt update
sudo apt install valkey-server
# If you need Redis, you can install it separately (coexists with Valkey; swap the redis prefix into the commands)
# sudo apt install redis-server
# Check service status
sudo systemctl status valkey-server
# Verify it is working properly
valkey-cli ping
# Should output: PONG基本操作
# Connect to the Valkey CLI (redis-cli is also available as a compatibility alias)
valkey-cli# String operations
SET name "Ubuntu Fan"
GET name
# Set a key with expiration (60 seconds)
SET session:abc123 "user_data" EX 60
# Check remaining TTL
TTL session:abc123
# Hash operations (similar to objects)
HSET user:1 name "John" email "john@example.com" age "30"
HGET user:1 name
HGETALL user:1
# List operations
LPUSH tasks "task1" "task2" "task3"
LRANGE tasks 0 -1
RPOP tasks
# Set operations
SADD online_users "user1" "user2" "user3"
SMEMBERS online_users
SISMEMBER online_users "user1"
# Sorted set (leaderboard scenario)
ZADD leaderboard 100 "player1" 200 "player2" 150 "player3"
ZREVRANGE leaderboard 0 -1 WITHSCORES
# List all keys
KEYS *
# Delete a key
DEL name
# Check key type
TYPE user:1
# View server info
INFO
# View memory usage
INFO memory
# Exit
QUIT永続化構成
データはデフォルトでメモリに保存され、再起動すると失われます。 Valkey は 2 つの永続化メソッドを提供します。
RDB (Snapshots) — メモリ内のデータをスナップショット ファイルとして定期的に保存します。
# Edit Valkey configuration (the Redis-compatible package uses /etc/redis/redis.conf)
sudo nano /etc/valkey/valkey.conf# RDB persistence rules (enabled by default)
# Save if at least 1 change in 3600 seconds
save 3600 1
# Save if at least 100 changes in 300 seconds
save 300 100
# Save if at least 10000 changes in 60 seconds
save 60 10000
# RDB file location
dir /var/lib/valkey
dbfilename dump.rdbAOF (追加専用ファイル) — すべての書き込み操作を記録します。
# Enable AOF
appendonly yes
# AOF sync policy
# always: Sync on every write (safest, but slowest)
# everysec: Sync once per second (recommended, balances safety and performance)
# no: Let the OS decide (fastest, but may lose data)
appendfsync everysec
# AOF filename
appendfilename "appendonly.aof"# Restart Valkey for changes to take effect
sudo systemctl restart valkey-serverValkey セキュリティ構成
sudo nano /etc/valkey/valkey.conf# Set password
requirepass YourStrongRedisPassword
# Bind address (defaults to local access only)
bind 127.0.0.1 ::1
# Disable dangerous commands
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command CONFIG ""# Connect with password
valkey-cli -a YourStrongRedisPassword
# Or authenticate after connecting
valkey-cli
AUTH YourStrongRedisPasswordSQLite
SQLite は、軽量の組み込みリレーショナル データベースです。個別のサーバープロセスは必要なく、すべてのデータは単一のファイルに保存されます。 SQLite は、小規模なアプリケーション、プロトタイピング、モバイル アプリ、組み込みシステムに最適です。
インストールと使用方法
# Install SQLite
sudo apt install sqlite3
# Create/open a database file
sqlite3 mydb.sqlite
# Operate within the SQLite prompt-- Create a table
CREATE TABLE notes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
content TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- Insert data
INSERT INTO notes (title, content) VALUES ('Test Note', 'This is a test entry');
-- Query
SELECT * FROM notes;
-- List all tables
.tables
-- View table structure
.schema notes
-- Display results with column names
.headers on
.mode column
-- Export as SQL
.dump
-- Export as CSV
.mode csv
.output notes.csv
SELECT * FROM notes;
.output stdout
-- Exit
.quitSQLite の強みは、構成やメンテナンスが不要な点にあります。以下に適しています:
- 小規模な Web アプリケーション (個人のブログなど)
- 開発およびテスト環境
- デスクトップ アプリケーション用のローカル データ ストレージ
- データ分析 (Python の sqlite3 モジュールと組み合わせて)
データベースのバックアップ戦略
データのバックアップは、データベース管理において最も重要なタスクの 1 つです。各データベースのバックアップ方法は次のとおりです。
MySQL / MariaDB バックアップ
# Back up a single database
mysqldump -u root -p myapp > myapp_backup_$(date +%Y%m%d).sql
# Back up all databases
mysqldump -u root -p --all-databases > all_databases_$(date +%Y%m%d).sql
# Compressed backup
mysqldump -u root -p myapp | gzip > myapp_backup_$(date +%Y%m%d).sql.gz
# Restore a database
mysql -u root -p myapp < myapp_backup_20260324.sql
# Restore a compressed backup
gunzip < myapp_backup_20260324.sql.gz | mysql -u root -p myappPostgreSQL バックアップ
# Back up a single database
sudo -u postgres pg_dump myapp > myapp_backup_$(date +%Y%m%d).sql
# Back up all databases
sudo -u postgres pg_dumpall > all_databases_$(date +%Y%m%d).sql
# Custom format backup (supports parallel restore)
sudo -u postgres pg_dump -Fc myapp > myapp_backup_$(date +%Y%m%d).dump
# Restore SQL format backup
sudo -u postgres psql myapp < myapp_backup_20260324.sql
# Restore custom format backup
sudo -u postgres pg_restore -d myapp myapp_backup_20260324.dumpヴァルキーバックアップ
# Manually trigger RDB snapshot
valkey-cli BGSAVE
# Copy the RDB file
sudo cp /var/lib/valkey/dump.rdb /backup/valkey_$(date +%Y%m%d).rdb
# Restore: stop Valkey, replace dump.rdb, restart
sudo systemctl stop valkey-server
sudo cp /backup/valkey_20260324.rdb /var/lib/valkey/dump.rdb
sudo chown valkey:valkey /var/lib/valkey/dump.rdb
sudo systemctl start valkey-server自動バックアップスクリプト
自動バックアップ用の cron ジョブを作成します。
# Create backup script
sudo nano /usr/local/bin/db-backup.sh#!/bin/bash
BACKUP_DIR="/backup/databases"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BACKUP_DIR"
# MySQL/MariaDB backup
mysqldump -u root --all-databases | gzip > "$BACKUP_DIR/mysql_$DATE.sql.gz"
# PostgreSQL backup
sudo -u postgres pg_dumpall | gzip > "$BACKUP_DIR/postgres_$DATE.sql.gz"
# Valkey backup
valkey-cli BGSAVE
sleep 5
cp /var/lib/valkey/dump.rdb "$BACKUP_DIR/valkey_$DATE.rdb"
# Delete backups older than 30 days
find "$BACKUP_DIR" -type f -mtime +30 -delete
echo "Backup complete: $DATE"# Set execute permission
sudo chmod +x /usr/local/bin/db-backup.sh
# Add cron job (runs daily at 3 AM)
sudo crontab -e
# Add the following line:
# 0 3 * * * /usr/local/bin/db-backup.sh >> /var/log/db-backup.log 2>&1データベースの比較: MySQL 対 PostgreSQL 対 MariaDB
| 特徴 | MySQL | PostgreSQL | MariaDB |
|---|---|---|---|
| 開発者 | オラクル | Ubuntufanplaceholder0000 コミュニティ | MariaDB財団 |
| ライセンス | GPL v2 (デュアルライセンス) | PostgreSQL ライセンス (MIT 類似) | GPL v2 |
| デフォルトのポート | 3306 | 5432 | 3306 |
| ACID 準拠 | InnoDB エンジンのサポート | フルサポート | InnoDB/Aria エンジンをサポート |
| JSON のサポート | JSONタイプ | JSONB タイプ (より強力) | JSONタイプ |
| 全文検索 | サポートされています | サポート済み (より強力) | サポートされています |
| 地理空間 | 基本サポート | PostGIS 拡張機能 (業界をリード) | 基本サポート |
| レプリケーション | プライマリレプリカ、グループレプリケーション | ストリーミングレプリケーション、論理レプリケーション | プライマリ レプリカ、Galera クラスター |
| ストレージ エンジン | 複数 (InnoDB、MyISAM など) | シングルエンジン | 複数 (InnoDB、Aria、ColumnStore など) |
| SQL 標準への準拠 | 良い | 最高 | 良い |
| 使用例 | Web アプリ、読み取り負荷の高いワークロード | 複雑なクエリ、データ分析、GIS | Web アプリ、MySQL の置き換え |
| 学習曲線 | 低い | 中くらい | 低 (MySQL 互換) |
おすすめガイド
- MySQL: 最大のエコシステムとほとんどのコミュニティ リソース。ほとんどの Web アプリケーションに適しています
- PostgreSQL: 最も強力な機能。複雑なクエリ、JSON 操作、地理空間データに最適
- MariaDB: より積極的なパフォーマンスの最適化とよりオープンなコミュニティを備えたオープンソースの MySQL の代替品
共通の管理コマンドの概要
# --- MySQL / MariaDB ---
sudo systemctl start mysql # Start
sudo systemctl stop mysql # Stop
sudo systemctl restart mysql # Restart
sudo systemctl status mysql # Check status
sudo mysql # Log in
# --- PostgreSQL ---
sudo systemctl start postgresql # Start
sudo systemctl stop postgresql # Stop
sudo systemctl restart postgresql # Restart
sudo systemctl status postgresql # Check status
sudo -u postgres psql # Log in
# --- Valkey ---
sudo systemctl start valkey-server # Start
sudo systemctl stop valkey-server # Stop
sudo systemctl restart valkey-server # Restart
sudo systemctl status valkey-server # Check status
valkey-cli # Log in
valkey-cli INFO # View info
valkey-cli DBSIZE # View key count適切なデータベースを選択して構成することは、信頼性の高い Web アプリケーションを構築するための基本です。プロジェクトのニーズに最適なものを見つけるために、開発環境でさまざまなデータベースを試してみることをお勧めします。