Oracle が Sun Microsystems を買収し, MySQL は Oracle の製品になりました。Oracle による支配を嫌い, fork されたプロジェクトがあります。
better MySQL として, MariaDBも検討の余地ありです。
あるいは, PostgreSQL に移行することも考えられます。PostgreSQLについては PostgreSQLの管理
(2004.11.21作成)
(2005.5.5更新、公開) バージョンを4.1.11にした。
MySQLは、最もメジャーなオープンソースRDBMSのひとつ。非常に高速であり、v4.0からは標準SQLへの準拠度も上がってきた。
MySQLは、商用ライセンス / GPLのデュアルライセンスになっている。オープンソースライセンスはLGPLではないことに注意が必要。したがって、MySQLとリンクするプロプライエタリ(proprietary)なソフトウェアを開発する場合は、通常は商用ライセンスが必要になる。
現時点での一般向けバージョンは、v4.0.22とv4.1.7。v4.1系列はUnicodeのサポートが追加され、文字まわりの扱いがかなり変わっている。
ここでは、バージョン4.1系列の最新版であるv4.1.7をインストールしてみる。
ソースからインストールしてもいいが、バイナリ版のほうが面倒がない。Linux downloads > Linux (x86, glibc-2.2, static, gcc) > Standard のものを使う。
MySQLのインストールディレクトリは、バイナリ版では、決め打ちで /usr/local/mysql となっている。アーカイブを展開してから、/usr/local/mysql からリンクを張る。
/opt# tar xzvf mysql-standard-4.1.7-pc-linux-i686.tar.gz /opt# chown -R root:root mysql-standard-4.1.7-pc-linux-i686 /opt# ln -s /opt/mysql-standard-4.1.7-pc-linux-i686 /usr/local/mysql
データベースの内容が保存されるディレクトリを /var/lib以下へ移動しておく。
mysql-standard-4.1.11-pc-linux-gnu-i686# mkdir /var/lib/mysql mysql-standard-4.1.11-pc-linux-gnu-i686# mv data /var/lib/mysql mysql-standard-4.1.11-pc-linux-gnu-i686# ln -s /var/lib/mysql/data .
ディレクトリ構成は、次のようになる。
/usr /local /mysql -> /opt/mysql-standard-4.1.11-pc-linux-gnu-i686 /opt /mysql-standard-4.1.11-pc-linux-gnu-i686 /data -> /var/lib/mysql/data
この節はv4.0系列での例。
$ tar xzvf mysql-4.0.9-gamma.tar.gz $ cd mysql-4.0.9-gamma
$ ./configure --prefix=/usr/local/mysql --localstatedir=/var/lib/mysql --with-extra-charsets=latin1,sjis,ujis,latin1_de --without-isam
latin1_deは、テストを正常に実行するのに必要。
$ make
テストを実行する。
$ make test ... TEST USER SYSTEM ELAPSED RESULT ------------------------------------------------------------------------ alias 0.02 0.01 0.59 [ pass ] alter_table 0.02 0.04 0.22 [ pass ] analyse 0.02 0.02 0.12 [ pass ] ... Master shutdown finished Slave shutdown finished All 165 tests were successful.
インストールする。
$ su # make install
/etc/ld.so.confに/usr/local/mysql/lib/mysqlを追加してldconfigするか,環境変数LD_LIBRARY_PATHに/usr/local/mysql/lib/mysqlを追加する。
設定ファイルの雛形が support-files ディレクトリにある。いずれかを選んで、$(DATADIR)/my.cnfにコピーする。DATADIRは、バイナリ版では決め打ちで /usr/local/mysql/data ディレクトリになっている。mysqld 起動時に引数として渡す--datadirオプションに左右されない。
support-files# cp my-small.cnf ../data/my.cnf
ファイル名 | 用途 |
---|---|
my-small.cnf | 64Mバイト以下のメモリの小規模サーバー向け |
my-medium.cnf | 32M〜64Mバイトのメモリを持つMySQL専用サーバーか,128Mバイトのメモリを持つサーバー向け |
my-large.cnf | 512Mバイト程度のメモリを持ち,MySQL専用となる機械向け |
my-huge.cnf | 1G〜2Gバイトのメモリを持つMySQL専用サーバー向け |
my-innodb-heavy-4G.cnf | 4Gバイトのメモリ、InnoDBのみ、ACID、少ない接続、大量のクエリ。 |
データベースで面倒なく日本語を扱えるように,デフォルトの文字コードを設定しておく。サーバ起動時にコマンドラインオプションで渡すこともできるが、ここでは my.cnf ファイルを編集する。mysqldグループに default-character-set 行を追加する。
指定できる文字コードは、share/mysql/charsets/Index.xml ファイルにある。次の例は、デフォルトの文字コードをUTF-8にする。
[mysqld] ... default-character-set = utf8
データベースサーバーをroot権限で動かすのは,セキュリティ面から見て適当ではないので,専用のユーザーmysql:mysqlを作成しておく。
# /usr/sbin/groupadd mysql # /usr/sbin/useradd -g mysql mysql
インストールが完了したら,/usr/local/mysql に移動して、データベースを初期化する。
/usr/local/mysql$ su /usr/local/mysql# scripts/mysql_install_db --user=mysql
データベースサーバ(mysqldデーモン)を起動する。
UNIX rootユーザーで次のように打つ。バイナリ版では、--userオプションを付けなくても、自動的に mysqlユーザーで実行される。
# /usr/local/mysql/bin/mysqld_safe &
mysqld がすぐに終了する場合は、何らかのエラーが発生しているので,data/ホスト名.err ファイルに出力されているエラーメッセージを確認する。
mysqldを終了させる場合は、単にkillコマンドを使う。data/ホスト名.pid ファイルは、自動的に削除される。
# kill `cat /usr/local/mysql/data/ホスト名.pid`
コンピュータの起動時に、自動的にMySQLを起動させるようにする。daemontoolsだとうまくkillできない(pidが違うから)。support-files にあるmysql.server コマンドを使うのがいい。/etc/rc.d/init.d または/etc/init.d ディレクトリにリンクを張る。さらに、rc3.dなどでそのリンクへのリンクを張る。
init.d# ln -s /usr/local/mysql/support-files/mysql.server . rc3.d# ln -s ../init.d/mysql.server S65mysql
MySQL :: MySQL 8.0 リファレンスマニュアル :: 6.2.8 アカウントの追加、権限の割当ておよびアカウントの削除
MySQLは、OSシステムのユーザー・グループとは別に(独立して)、ユーザー(データベースユーザ)を管理している。MySQLのユーザーは、ホストとユーザ名の組み合わせで識別される。
MySQLサーバを起動して最初にすることは、MySQLスーパーユーザのパスワードを設定すること。パスワードを設定しないと,だれでもMySQLスーパーユーザに成りすますことができるので,重要。
パスワードは、ホスト名付きでも設定しておく。MySQLスーパーユーザ名は root という。UNIX OSシステムのスーパーユーザ名と同じなので、紛らわしい。
# bin/mysqladmin -u root password 'パスワード' # bin/mysqladmin -u root -h ホスト名 password 'パスワード'
JIS X 3005によれば,認可識別子(データベースユーザ)とOS利用者との対応は,処理系依存。(4.26 権限)
ユーザを追加するには、mysqlコマンドでmysqlターミナルに入ってから、GRANT文を実行する。次の例は、すべてのデータベースにアクセスできるユーザを追加する。
mysql$ bin/mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 7 to server version: 4.1.11-standard Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> GRANT ALL PRIVILEGES ON *.* TO ユーザ名@ホスト名 -> IDENTIFIED BY 'パスワード' WITH GRANT OPTION;
ユーザ一覧を表示するには、データベースmysqlを選択して、userテーブルの内容を表示すればいい。
> use mysql > select host,user from user;
また、現在どのデータベースユーザとして接続しているか確認するには、select user()すればいい。
mysql> select user(); +----------------+ | user() | +----------------+ | root@localhost | +----------------+ 1 row in set (0.00 sec)
MySQLデータベースの管理は、MySQL Administrator を使うとかなり簡単になる。
Windowsだとバイナリ版をダウンロードしてきてインストールするだけでいい。Linux用のバイナリ版は、libstdc++のバージョンが違うので、そのままでは実行できない。ソースからコンパイルするには、gtkmm-2.0などが必要になる。
新しいデータベースを作成し,一般ユーザーで操作できるように権限を付与する。
まず,MySQLスーパーユーザでmysql端末に入る。
$ ./mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 12 to server version: 4.0.4-beta Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
新しいデータベースは、CREATE DATABASE文で作成する。
mysql> CREATE DATABASE db1; Query OK, 1 row affected (0.01 sec)
このままではrootユーザーしかこのデータベースを使えないので,一般ユーザに権限を付与する。権限の付与(とデータベースユーザの作成)は,GRANT文で行う。
mysql> GRANT ALL PRIVILEGES ON db1.* TO ユーザ名@localhost -> IDENTIFIED BY 'パスワード' WITH GRANT OPTION; Query OK, 0 rows affected (0.01 sec)
いったんmysql端末から抜け,一般ユーザーで入り直す。SHOW DATABASES文で,先ほど権限が与えられたデータベースが見える。
$ ./mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 16 to server version: 4.0.4-beta Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> select user(); +----------------+ | user() | +----------------+ | hori@localhost | +----------------+ 1 row in set (0.00 sec) mysql> show databases; +----------+ | Database | +----------+ | db1 | | test | +----------+ 2 rows in set (0.00 sec)
SQL文を発行してデータベースを操作するには、まずデータベースを選択する。USE文でデータベースを選択する。
mysql> use db1; Database changed
適当に,表を作成してみる。
mysql> CREATE TABLE t_test ( -> val VARCHAR(100) NOT NULL); Query OK, 0 rows affected (0.11 sec)
データベースの一覧は、show databasesで確認できる。
mysql> show databases; +----------+ | Database | +----------+ | test | +----------+ 1 row in set (0.03 sec)
データベースを削除するのは、drop database文。
mysql> drop database db1; Query OK, 0 rows affected (0.00 sec)