* MySQL [#pcbd758b]

** TODO [#fd5a7637]

以下の内容はかなり古いところがあるので直すべし。例えば今はダンプは

 mysqldump -u root -p -A >all.sql
 mysqldump -u root -p -B db1 db2 db3 >db123.sql

みたいな感じでOK(latin1指定は不要)。

** インストール [#bb00b93d]

単なるmysqlのほかにmysql-serverというパッケージが必要。

 yum install mysql-server
 /sbin/chkconfig --level 345 mysqld on
 /etc/rc.d/init.d/mysqld start

** パスワードの設定 [#u7c84b2f]

起動した時点ではMySQLの4つのデフォルトユーザにパスワードが設定されていない。

 mysql -u root

と打ち込むとパスワードなしで入れる。

 select user,host,password from mysql.user;

と打つと,ユーザ名,ホスト名,パスワードのハッシュが現れる。

 update mysql.user set password=password('hoge') where user='root';
 flush privileges;

で管理人のパスワードをhogeにできる。
mysql.user等を変えたときはflush privilegesするのが安全。

空ユーザ名のユーザは消してもいい:

 delete from mysql.user where user='';
 flush privileges;

これで quit; してもう一度 mysql -u root しても入れない。
mysql -u root -p と打つとパスワードを聞いてくる。

** ユーザとデータベースの作成 [#wae1fdbc]

データベース foo を作り,oku.edu.mie-u.ac.jp からログインするユーザ bar に自由に操作させる:

 mysql -u root -p
 create database foo;
 grant all privileges on foo.* to bar@'oku.edu.mie-u.ac.jp' identified by 'somepassword';

** データベース管理 [#n68d63cf]

mysqlshow コマンド(オプション -u root -p とかを付ける)でデータベース一覧が表示される。
さらにデータベース名を引数に与えれば,そのデータベース中のテーブル一覧が表示される。
mysql というデータベースには全体の管理情報が入っている。

データベースごとにバックアップ(SQLダンプ)するには mysqldump コマンドを使う。
表をロックする権限のあるユーザでやらないとエラーになる。

 mysqldump --opt -v -u root -p dbname | gzip >dbname.sql.gz

原理的にはこれでいいが,デフォルトのままのデータベースでは日本語がそのまま8ビットスルーで格納されているようだ(euc-jpなら問題ない)。
これを上記のようにダンプすると,どういうわけかutf-8にエンコードされて8ビット文字の頭に0xc2とか0xc3とかが入ったファイルになってしまった。
オプション --default-character-set=latin1 を付ければいいようだ。

これをリストアするには例えば次のようにする。

 mysqladmin create dbname
 zcat dbname.sql.gz | mysql -u root -p dbname

mysql データベースをリストアした後は mysqladmin flush-privileges を行う。

 mysqldump -u root -p -A --default-character-set=latin1 | gzip >all.sql.gz
 zcat all.sql.gz | mysql -u root -p

データベースの構造は mysql コマンドでも調べられる。
show databases; でデータベース一覧,show tables; で現在のデータベースのテーブル一覧,describe テーブル名; でテーブルのコラム一覧が表示される。

** 文字コードの設定 [#ta4c2f75]

mysql クライアントのプロンプトで status; と打ち込むと現在の文字コードが表示される。
デフォルトでは latin1になっている。
これで8ビットスルーで扱われ,euc-jpなら特に問題はなさそうだ。

文字コードを設定するには /etc/my.cnf にたとえば次のように書く(ujisはeuc-jpの意味)。

 [mysqld]
 default-character-set=ujis
 
 [mysql]
 default-character-set=ujis

このように作り直したデータベースに latin1 でダンプしたものをリストアするには,ダンプ中で DEFAULT CHARSET=latin1 となっているところを ujis に直さなければならない。

** ソースからのインストール [#q41f30cd]

MySQL 5.xをVine Linux 3.2にインストールする。

あらかじめ mysql:mysql というユーザ:グループを作る:

 mysql:x:101:104:MySQL server:/usr/local/mysql:/bin/bash

 mysql:x:104:

http://dev.mysql.com/ からソースをいただいてきて展開。
その中に入って

 CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors \
            -fno-exceptions -fno-rtti" ./configure \
            --prefix=/usr/local/mysql --enable-assembler \
            --with-mysqld-ldflags=-all-static
 make
 make install
 cp support-files/my-medium.cnf /etc/my.cnf
 cd /usr/local/mysql
 bin/mysql_install_db --user=mysql
 chown -R root  .
 chown -R mysql var
 chgrp -R mysql .
 cp support-files/mysql.server /etc/rc.d/init.d/mysql
 cd /etc/rc.d/init.d
 chmod 755 mysql
 chkconfig --add mysql
 ./mysql start

アップグレード時は /etc/rc.d/init.d/mysql stop
しておいてからroot権限でmake installまですればよいだろう。

** 読み物 [#h7d77404]

-[[MySQL日本語の旅:http://oss.timedia.co.jp/index.cgi/kahua-web/show/MySQL%C6%FC%CB%DC%B8%EC%A4%CE%CE%B9]]
-[[新キャラクタセット cp932 / eucjpms:http://www.mysql-partners-jp.biz/techinfo/tech_01.html]]

-----

#comment