MYSQL †
入手 †
最新版は 5.系列。
日本語マニュアルは 4.系列まで用意されている。
Linux 用アーカイブ(non-rpm版)
インストール †
インストールポリシー
- データディレクトリはデフォルトの場所から変更
- 専用ユーザ(mysql)で動作させる
- mysql ユーザには shell を割り振らない
以下、root で作業。
- mysql 専用ユーザの作成
# groupadd mysql
# useradd -g mysql -d /home/data/mysql -s /bin/false
- DL したアーカイブはすでにビルド済みなので、インストール先に展開
# tar mysql-standard-5.0.18-linux-i686.tar.gz -C /usr/local
# cd /usr/local
# mv mysql-standard-5.0.18-linux-i686 mysql-5.0.18
# chgrp -R mysql mysql-5.0.18
# ln -s mysql-5.0.18 mysql
Version 管理を容易にする為、ここではシンボリックリンクにしている
- データディレクトリの作成と初期化*1
# cd /usr/local
# mkdir /home/data/mysql/DATA
# /usr/local/mysql/scripts/mysql_install_db --datadir=/home/data/mysql/DATA
# chown -R mysql:mysql /home/data/mysql/DATA
mysql_install_db スクリプトは、mysql をインストールした TOP ディレクトリで実行しないとエラーになる
- 設定ファイルの作成
# cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf
# vim /etc/my.cnf
下記内容を /etc/my.cnf に追加
[mysqld]
user=mysql
language=/usr/local/mysql/share/mysql/japanese/
[mysql.server]
basedir=/usr/local/mysql
datadir=/home/data/mysql/DATA
- 起動スクリプトの用意
# cp /usr/local/mysql/support-files/mysql.server /usr/local/etc/init.d/mysql.sh
# chmod 754 /usr/local/etc/init.d/mysql.sh
- デーモンの起動と確認
# /usr/local/etc/init.d/mysql.sh start
# /usr/local/mysql/bin/mysqladmin version
# /usr/local/mysql/bin/mysqladmin variables
# /usr/local/mysql/bin/mysqlshow
- mysql 用 root*2 パスワードの設定
# /usr/local/mysql/bin/mysql -u root
mysql> set password=password('パスワード');
mysql> exit
root パスワードは必ず設定する。
パスワードが無いままだと第三者に mysql -u root db_name を実行され、DB を操作されてしまう。
設定ファイル †
ファイル名 | 用途 |
/etc/my.cnf | グローバルオプション |
DATADIR/my.cnf | サーバ固有オプション |
defaults-extra-file | --defaults-extra-file=path で指定されたファイル |
~/.my.cnf | ユーザ固有オプション |
上から順に評価される。
起動スクリプト mysql.server からも参照される為、起動に関する設定は /etc/my.cnf にすると良い。
コマンド †
コマンド名 | 用途 |
mysqladmin version | Version 表示 |
mysqladmin variables | mysql の設定表示 |
mysqlshow -u ユーザ名 -p | 作成されているユーザテーブルの表示 |
mysql -u ユーザ名 -p データベース名 | DB にアクセスする |
mysqladmin -u root -p create HOGE | データベース HOGE を作成 |
SQL文 | 用途 |
CREATE DATABASE HOGE | DB HOGE を作成(基本的に root だけが作成できる |
GRANT ALL PRIVILEGES ON HOGE.* TO ユーザ名@ホスト名 IDENTIFIED BY 'DB パスワード | DB HOGE上に全ての権限を持つユーザを作成 |
REVOKE 権限 ON db.* FROM ユーザ名@ホスト名 | ユーザから権限と取り上げる |
SET PASSWORD FOR ユーザID@"%" = PASSWORD('パスワード') | パスワードセット |
UPDATE db.* SET カラム=値 | カラムのデータを更新する |
FLUSH PRIVILEGES | DB のフレッシュ |
SHOW DATABASES | DB 一覧表示 |
SHOW TABLES | テーブル一覧表示 |
USE データベース名 | DB の変更 |
DESCRIBE テーブル名 | テーブル構造の取得 |
CREATE TABLES | テーブル作成 |
SQL文 | 用途 |
UPDATE db.* SET カラム名=値 | カラムのデータを更新する |
UPDATE db.* SET カラム名=concat(カラム名, 'hoge,edu,piyo') | 文字列型のデータを追記 |
UPDATE db.* SET カラム名=カラム名+10000 | 数値型のデータを追記 |
ALTER TABLE テーブル名 ALTER カラム名 set default 'hogehoge' | 指定カラムの default 値を変更する |
○create table の例
CREATE TABLE SAMPLE_TABLE (
id INT(10) AUTO_INCREMENT,
no MEDIUMINT(5) NOT NULL,
name VARCHAR(50),
sex TINYINT(1) NOT NULL,
address VARCHAR(255),
tel VARCHAR(11),
flg CHAR(1) DEFAULT '0',
timestamp TIMESTAMP(10),
PRIMARY KEY (id, no)
);
バックアップ †
データベースのバックアップには下記の mysql メーリングリストが参考になる。
[mysql 12751] MySQL のバックアップ・復元について
[mysql 12752] Re: MySQL のバックアップ・復元について
[mysql 12761] Re: MySQL のバックアップ・復元について
[mysql 12763] Re: MySQL のバックアップ・復元について
以下重要ポイントの抜粋
1.MyISAMなどの非InnoDBテーブルに対して途中で更新が入る可能性がある場合
バックアップデータの一貫性を保つために、バックアップの間中共有ロックをかける必要があります。
以下のように実行します。
% mysqldump --all-databases --lock-all-tables --flush-logs > ***.sql
2.権限テーブルを除くすべてのテーブルがInnoDBの場合
この場合、「バックアップの開始時にほんの一瞬だけ共有ロックをかければ、
バックアップデータの一貫性が保たれる」というバックアップ方法があります。以下のように実行します。
% mysqldump --all-databases --master-data=2 --single-transaction --flush-logs > ***.sql
1との違いは、バックアップの最中に更新を行なうことができるということです。
バックアップと同時に古いバイナリログを削除するには --delete-master-logs オプションを付加して実行する。この場合は文字通りそれまで保存されていた全てのバイナリログが消えてしまうので、古いログを参照する必要がある場合は、ログローテートプログラムを導入するか、別途バックアップを取る必要がある。
得に気にしないのならば、
$ mysqldump --all-databases --delete-master-logs --lock-all-tables --flush-logs -pパスワード> ***.sql
と実行すれば良いだろう。
関連プログラム †
参考資料 †