MySQL

TODO

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

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

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

インストール

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

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

パスワードの設定

起動した時点では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 と打つとパスワードを聞いてくる。

ユーザとデータベースの作成

データベース 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';

データベース管理

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 テーブル名; でテーブルのコラム一覧が表示される。

文字コードの設定

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 に直さなければならない。

ソースからのインストール

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まですればよいだろう。

読み物




Last-modified: 2016-07-10 (日) 07:12:11 (499d)