MySQL

Red Hat Linuxのページトップへ

MySQLの公式ページ
日本MySQLユーザ会
株式会社ソフトエイジェンシー MySQL日本公認代理店
日本のMySQLダウンロードサイト

RubyからMySQLを使用できるようにするための拡張ライブラリ
MySQLとはフリーのデータベースソフトです
処理速度を最優先に開発されているため、一部のSQL命令が省略されている
SQL(Structured Query Language) 

注意
GPLライセンスなのでソースコードの一部を改変して作られたソフトを頒布するときはソースコードを公開しなければならない

MySQL5.0 Alpha版
MySQL4.1 Beta版
MySQL4.0 

recommendedとなっている「MySQL 4.0」をクリックします。

「Linux downloads」からダウンロードします。ここではソースからインストールするので、一番下の「Source downloads」からダウンロード

ユーザー登録の下のミラーサイトから入手

日本語対応を行うには、MySQLをソースから構築する
configureスクリプトを実行する際に、EUCとSJISのどちらかの漢字コードを指定する
たとえば、EUCの日本語文字コードに対応させる場合には、以下のようにする
./configure --with-charset=ujis
SJISの場合
./configure --with-charset=sjis

インストール
MySQL用のユーザとグループを作成する
# groupadd mysql
# useradd -g mysql mysql

ダウンロードファイルを解凍する
# gunzip < mysql-VERSION.tar.gz | tar -xvf -
( #cd /usr/local/src
 #tar zxvf mysql-3.23.49.tar.gz)
解凍後に出来たディレクトリに移動する
# cd mysql-VERSION

configureコマンドでコンパイルする
# ./configure --prefix=/usr/local/mysql
( --with-extra-charsets=all --with-mysqld-user=mysql --prefix=/usr/local/mysql)
# ./configure --prefix=/usr/local/mysql --with-charset=sjis --with-extra-charsets=all --with-mysqld-user=mysql --with-innodb
# make

インストールする
# make install

テーブルを生成する
# scripts/mysql_install_db

rootの初期パスワードはブランクになっているため、全ユーザがパスワードなしでrootになれてしまう
データディレクトリ以下のファイルの所有者をmysql、それ以外のファイルの所有者をrootにする
# chown -R root /usr/local/mysql
# chown -R mysql /usr/local/mysql/var
# chgrp -R mysql /usr/local/mysql

サポートファイルをコピーする
# cp support-files/my-medium.cnf /etc/my.cnf

初期化とテストを行なう
# /usr/local/mysql/bin/safe_mysqld --user=mysql &

#/usr/local/mysql/bin/mysql_install_db --user=mysql
#chown -R mysql /usr/local/mysql
#chgrp -R mysql /usr/local/mysql
#/usr/local/mysql/bin/safe_mysqld --user=mysql&
#/usr/local/mysql/bin/mysqladmin -u root password xxxxxxx
(xxxxxxxx は適切なMySQLのパスワード)

ディレクトリ保存されるファイル
/usr/local/libexec/mysqldMySQLサーバ
/usr/local/bin/コマンド類
/usr/local/lib/mysql/ライブラリ
/usr/local/include/mysql/includeファイル
MySQLユーザーディレクトリデータベース保存先
次にデータベースを初期化し、その後データディレクトリのオーナーを先ほど作成したmysqlユーザーに修正します。 # /usr/local/bin/scripts/mysql_install_db --user=mysql # chown -R mysql /usr/local/var # chgrp -R mysql /usr/local/var # /usr/local/bin/mysqld_safe --user=mysql & /etc/rc.d/rc.localにこの1行を追加するか、rcスクリプト(起動スクリプト)を用意します。展開されたソースの中(support-files)にrcスクリプトのひな型(mysql.server)がありますので、そちらを使用します。mysql.serverをrc.mysqlなどの適当な名前に変更します。 # cd support-files # mv mysql.server rc.mysql # chmod +x rc.mysql 実行可能にし、/etc/rc.d/init.dにファイルを移動します。 # mv rc.mysql /etc/rc.d/init.d/  ただし、このままではマシンを再起動しても有効に働きません。/etc/rc.d/rc2.d/にリンクを張っておきましょう。 # cd /etc/rc.d/rc2.d/ # ln -s ../init.d/rc.mysql S90mysql  このrcスクリプトを使うことで、起動時のオプションを/etc/my.cnfファイルに記述する形で指定できます。support-filesディレクトリにはさまざまな場合に応じたcnfファイルが用意されています。huge→large→medium→smallの順で規模を選べますが、大きなデータベースに合わせたcnfファイルは、当然ながら大容量のメモリを積んでいることを前提としています。  適当なcnfファイルを選び、/etc/my.cnfにコピーします。 # cp my-XXX.cnf /etc/my.cnf mysql ユーザーの .bash_profile へ操作設定の記述をします。   PATH=$PATH:/usr/local/mysql/bin   export MANPATH=$MANPATH:/usr/local/mysql/man その後にプロファイルをロードし、MySQL 環境の初期化と MySQL の起動を行います。   $ . .bash_profile ($ source .bash_profile)   $ /usr/local/mysql/bin/mysql_install_db --user=mysql   $ /usr/local/mysql/bin/safe_mysqld --user=mysql & 自動起動させるために /etc/rc.d/rc.local へ以下の記述を行います。   /usr/local/mysql/bin/safe_mysqld --user=mysql & Apacheの設定 httpd.confの編集 LoadFile /usr/local/mysql/lib/mysql/libmysqlclient.so 5.起動スクリプトの設定 ・起動スクリプトファイル/etc/rc.d/rc.local に以下の行を追加する ------------------------------------------------------ # if [ -x /usr/local/apache/bin/apachectl ] ; then echo -n "Starting Apache web server" su - root -c "/usr/local/apache/bin/apachectl restart" echo "." fi # /bin/sh -c 'cd /usr/local/mysql; ./bin/safe_mysqld&' ------------------------------------------------------ (注意)if文行の空白に注意 6.バックアップの設定 ・cronで MySQL DB のバックアップを取る #crontab -e ★以下の行を挿入 0 4 * * 0 /usr/local/mysql/bin/mysqldump -uroot -pXXXXXXXX db1 > /usr/local/backup/db1.sql  (実際は改行しないで1行で入力してください) 7.環境の設定 ・adminがftpでドキュメントをアップできるようにする #cd /usr/local/apache #chown -R admin htdocs ・adminのパスを設定する #cd /home/admin #vi .bash_profile 最初のPATH行に以下のPATH行を追加 ------------------------------------------------------ PATH=.:/usr/local/mysql/bin:$PATH ------------------------------------------------------ # mysql mysql> create database chap3db; mysql> grant select,insert,delete,update on chap3db.* to chap3dbu@localhost identified by 'chap3pass'; mysql> use chap3db mysql> create table members ( -> sn int auto_increment primary key, -> name varchar(80), -> fname varchar(160), -> ename varchar(80), -> phone varchar(80), -> email varchar(100) -> ); mysql> select * from members; 設定ファイル /etc/my.cnf # gedit /etc/my.cnf # useradd mysql # su mysql $ tar -zxvf mysql-3.23.52.tar.gz $ cd mysql-3.23.52/ $ ./configure \   --prefix=/usr/local/mysql \   --with-charset=ujis \   --with-extra-charsets=all \   --with-mysqld-user=mysql \   --without-bench \   --localstatedir=/home/mysql/data $ make $ su # make install --prefix=[DIR] mysql プログラム格納先 --with-charset=[ujis/sjis] 使用される文字コード --with-extra-charsets=[all/ujis/sjis] 拡張文字コード --with-mysqld-user=[USER] MySQL デーモン起動ユーザー --without-bench ベンチマークツールをインストールしない --localstatedir=[DIR] データベース保存ディレクトリ MySQLのPerlモジュール Msql-Mysql-modules を使用するためには、 Data-Dumper、DBI、 Msql-Mysql-modules が必要 初めてこれらのモジュールをインストールする際には、 Data-Dumper → DBI → Msql-Mysql-modulesの順でなければならない ftp://ftp.mysql.com/pub/mysql/Contrib/ http://www.mysql.com/downloads/index.html # perl Makefile.PL # make # make test # make install /usr/local/mysql/share/mysql/mysql.server start 管理者パスワードの設定 root のパスワード設定 mysqladminで root のパスワード設定 MySQLへのインストールが済むと、自動的に root ユーザが作成されている。 初期状態の root はパスワードが設定されていないから、まずはパスワードを設定したほうがいい。 root のパスワード設定 rootでmysqlにログイン # mysql -u root mysql パスワードを設定 ログインが済んだら、SET PASSWORD 構文でパスワードの設定だ。 mysql> SET PASSWORD FOR root=PASSWORD('[new_password]'); mysqladminで root のパスワード設定 コマンドラインでも、mysqladmin コマンドを使ってパスワードを設定することができる。 # mysqladmin -u root password new_password # mysqladmin reload phpMyAdmin本家 phpMyAdmin データベースサーバをスタートさせたい
mysqld_safe &
データベースサーバを終了させたい
mysqladmin shutdown
ログをファイル【/tmp/mysql.log】【/tmp/mysql.err.log】に残すようにして起動したい
mysqld_safe --log=/tmp/mysql.log --err-log=/tmp/mysql.err.log &
更新系の SQL をファイル【/tmp/mysql.update.log】に残して差分バックアップが取れるようにして起動したい
mysqld_safe --log-update=/tmp/mysql.update.log &
実行された更新系 SQL のみが書き出されます。差分バックアップに利用することができます。 実際には、/tmp/mysql.update.log.001 のように、ファイル名の末尾に連番がつきます。 --log-updateで作成されているログファイルの番号をローテートしたい
mysqladmin flush-logs
データベース【mydatabase】を作成したい
mysqladmin create mydatabase
データベース【mydatabase】を削除したい
mysqladmin drop mydatabase
ファイル【myfile】に書かれたSQLをデータベース【mydatabase】に一括実行したい
mysql -D mydatabase < myfile
シェルからデータベース【mydatabase】で SQL を実行したい
mysql -D mydatabase -e 'select * from mytable order by id;'
シェルからユーザ【myuser】とパスワードを指定してデータベース【mydatabase】で SQL を実行したい
mysql -u myuser -p -D mydatabase -e 'select * from mytable order by id;'
実行するとパスワードプロンプトが出るので、そのユーザのパスワードを入力します。 お勧めできませんが、パスワード【yourpassword】をコマンドラインに与えたい場合は下記のように実行します。

mysql -u myuser --password=yourpassword -D mydatabase -e 'select * from mytable order by id;'
データベース【mydatabase】のテーブル【mytable】にtext型のフィールド【myfield】を追加したい
mysql -D mydatabase -e 'alter table mytable add column myfield text;'
データベース【mydatabase】のテーブル【mytable】のフィールド【myfield】を削除したい
mysql -D mydatabase -e 'alter table mytable drop column myfield;'
データベース【mydatabase】のテーブル【mytable】の名前を【mytable2】に変更したい
mysql -D mydatabase -e 'alter table mytable rename to mytable2;'
データベース【mydatabase】のテーブル【mytable】のフィールド【myfield】の名前を【myfield2】に、型を【integer】に変更したい
mysql -D mydatabase -e 'alter table mytable change column myfield myfield2 integer;'
データベース【mydatabase】のテーブル【mytable】のフィールド【myfield, myfield2】にインデックスを追加したい
mysql -D mydatabase -e 'alter table mytable add index (myfield, myfield2);'
データベース【mydatabase】をファイル【myfile】に(SQLとして)フルバックアップしたい
mysqldump mydatabase > myfile
mysqldump で作成したバックアップファイル【myfile】をデータベース【mydatabase】にリストアしたい
mysql -D mydatabase < myfile
mydatabaseは空のデータベースである必要があります データベース【mydatabase】をgzip圧縮し、ファイル【myfile.gz】に(SQLとして)フルバックアップしたい
mysqldump mydatabase | gzip > myfile.gz
mysqldump + gzip で作成したバックアップファイル【myfile.gz】をデータベース【mydatabase】にリストアしたい
gzip -dc myfile.gz | mysql -D mydatabase
mydatabaseは空のデータベースである必要があります データベース【mydatabase】のデータファイルそのものをディレクトリ【/tmp/bk】以下にフルバックアップしたい
mysqlhotcopy mydatabase /tmp/bk/
この方法はPerlのDBDとDBIが必要です。 別ホスト【anotherhost】のデータベース【mydatabase】をファイル【myfile】にバックアップしたい
mysqldump -h anotherhost -D mydatabase > myfile
別ホスト【anotherhost】のデータベース【mydatabase】をファイル【myfile.gz】にバックアップ&gzip圧縮したい
mysqldump -h anotherhost -D mydatabase | gzip > myfile.gz
データベース【mydatabase】のテーブルスキーマのみ(入っているデータは含まない)をSQLとしてファイル【myfile】に保存したい
mysqldump --no-data mydatabase > myfile
全てのデータベースをファイル【myfile】にバックアップしたい
mysqldump --all-databases > myfile
差分バックアップを行いたい
mysqld_safe --log-update=/tmp/mysql.update.log &
mysqlデーモンの起動時に --log-updateを指定することによって、実行された更新系 SQL のみがファイルに書き出されます。これを利用して差分バックアップを行うことができます。実際には、/tmp/mysql.update.log.001 のように、ファイル名の末尾に連番がつきます。 --log-updateで作成されているログファイルの番号をローテートしたい
mysqladmin flush-logs
差分バックアップファイル【/tmp/mysql.update.log.001】をデータベース【mydatabase】上で復元したい
mysql -D mydatabase < /tmp/mysql.update.log.001
ファイルが複数ある場合は、連番の数字の小さいものから順に復元していきます。 データベース【mydatabase】のテーブル【mytable】のデータを、タブ区切りのファイル【myfile】として全て取り出したい
mysql -B --skip-column-names -D mydatabase -e 'select * from mytable;' > myfile
データベース【mydatabase】のテーブル【mytable】のデータの一部(SQLで選択)を、タブ区切りのファイル【myfile】として全て取り出したい
mysql -B --skip-column-names -D mydatabase -e 'select * from mytable where id<10;' > myfile
タブ区切りのファイル【myfile】をデータベース【mydatabase】のテーブル【mytable】に挿入したい
mv myfile mytable.sql
mysqlimport mydatabase mytable.sql
ファイル名(拡張子を除いた部分)とテーブル名を同じにしておく必要があります。 タブ区切りのファイル【myfile】をEUCに変換してからデータベース【mydatabase】のテーブル【mytable】に挿入したい
nkf -e myfile > mytable.sql
mysqlimport mydatabase mytable.sql
ファイル名(拡張子を除いた部分)とテーブル名を同じにしておく必要があります。 データベース【mydatabase】のテーブル【mytable】のデータを、コンマ区切りのファイル【/tmp/myfile】として全て取り出したい
mysql -D mydatabase -e \ "select * into outfile '/tmp/myfile' fields terminated by ',' lines terminated by '\n' from mytable;"
データベース【mydatabase】のテーブル【mytable】のデータの一部(SQLで選択)を、コンマ区切りのファイル【myfile】として取り出したい
mysql -D mydatabase -e \ "select * into outfile '/tmp/myfile' fields terminated by ',' lines terminated by '\n' from mytable where id < 10;"
コンマ区切りのファイル【/tmp/myfile】をデータベース【mydatabase】のテーブル【mytable】に挿入したい
mysql -D mydatabase -e \ "load data infile '/tmp/myfile' into table mytable fields terminated by ',' lines terminated by '\n';"
ファイル【myfile】に保存されたタブ区切りのデータの間に一つデータを追加して、データベース【mydatabase】のテーブル【mytable】に挿入したい
cat myfile | perl -F"\n|\t" -nae 'print "$F[0]\t$F[1]\tmydata\t$F[2]\n";' > /tmp/mytable.sql
mysqlimport mydatabase /tmp/mytable.sql
例の場合は、3つのフィールドがあって、二つ目と三つ目のフィールドの間に「mydata」という値を追加しています。 ファイル【myfile】に保存されたタブ区切りのデータの間のフィールドを一つ削除して、データベース【mydatabase】のテーブル【mytable】に挿入したい
cat myfile | perl -F"\n|\t" -nae 'print "$F[0]\t$F[2]\n";' > /tmp/mytable.sql
mysqlimport mydatabase /tmp/mytable.sql
例の場合は、3つのフィールドがあって、真ん中のフィールドを取り除いています。 全てのデータベース・全てのテーブルに、ユーザ【myuser】がパスワード【itbpassword】で全てのホストから接続出来るようにしたい
mysql -D mydatabase -e \ "grant all privileges on *.* to myuser@'%' identified by 'itbpassword' with grant option;"
grant を使用して設定を行った時点でユーザが追加されます。 データベース【mydatabase】の全てのテーブルに、ユーザ【myuser】がパスワード【itbpassword】で全てのホストから接続出来るようにしたい
mysql -D mydatabase -e \ "grant all privileges on mydatabase.* to myuser@'%' identified by 'itbpassword' with grant option;"
grant を使用して設定を行った時点でユーザが追加されます。 データベース【mydatabase】の全てのテーブルに、ユーザ【myuser】がパスワード【itbpassword】で 192.168.0.10 から接続出来るようにしたい
mysql -D mydatabase -e \ "grant all privileges on mydatabase.* to myuser@192.168.0.10 identified by 'itbpassword' with grant option;"
grant を使用して設定を行った時点でユーザが追加されます。 データベース【mydatabase】の全てのテーブルに、ユーザ【myuser】がパスワード【itbpassword】で example.com ドメインの全てのホストから接続出来るようにしたい
mysql -D mydatabase -e \ "grant all privileges on mydatabase.* to myuser@'%.example.com' identified by 'itbpassword' with grant option;" 
grant を使用して設定を行った時点でユーザが追加されます。 ユーザ【myuser】を削除したい
mysql -D mysql -e "delete from user where user='myuser';"
mysql -D mysql -e "delete from table_priv where user='myuser;"
mysql -D mysql -e "delete from db where user='myuser';"
mysql -D mysql -e "flush privileges;"
ユーザ【myuser】のパスワードを【newpassword】に変更したい
mysql -D mysql -e "update user set password=password('newpassword') where user='myuser';"
mysql -D mysql -e "flush privileges;"
データベースの一覧を確認したい
mysql -D mysql -e "show databases;"
データベース【mydatabase】のテーブルの一覧を確認したい
mysql -D mydatabase -e "show tables;"
データベース【mydatabase】のテーブル【mytable】の定義を確認したい
mysql -D mydatabase -e "describe mytable;"
使用しているMySQLのバージョンを確認したい
mysql -D mydatabase -e "select version();"

ぺんたん.info
あかいひ.com
IPくん.com
8枠.com - 競馬情報
galhime.com

PC Q&A||古い記事|雑学|ラーメン