FreeBSD初心者運用日記 このページをアンテナに追加

2008-11-30

[]MySQLの記事を引越しします 17:41 MySQLの記事を引越しします - FreeBSD初心者運用日記 を含むブックマーク はてなブックマーク - MySQLの記事を引越しします - FreeBSD初心者運用日記 MySQLの記事を引越しします - FreeBSD初心者運用日記 のブックマークコメント

記事数もふえてきてカテゴリも細かく分けて整理もしたいので、MySQLグループを新しく作成しました。

http://nysql.g.hatena.ne.jp/py4s-tnk/

こちらに、少しずつ引越しさせる予定です。

urlがnysqlとなっているのは、mysqlでグループを登録しようとしたら、"予約語が含まれているためこのグループ名は使用できません。"などと意味不明なことをいわれたためしょうがなくnysqlとしました。

2008-01-23

[]べからずな話 01:33 べからずな話 - FreeBSD初心者運用日記 を含むブックマーク はてなブックマーク - べからずな話 - FreeBSD初心者運用日記 べからずな話 - FreeBSD初心者運用日記 のブックマークコメント

mysqlクライアントを起動するとき、

$ /usr/local/bin/mysql -u hoge -pfoo

などとすると、wコマンドでパスワードが見れてしまうのでダメ。

以下のようにして起動する。

$ /usr/local/bin/mysql -u hoge -p

Enter password:

CressCress2008/01/25 20:05MySQLのパスワードを ~/.my.cnf に書いておくと自動的に読まれます。
cronで実行したりするとき(定期的なバックアップとか)に幸せになれます。
http://dev.mysql.com/doc/refman/4.1/ja/password-security.html

PostgreSQLだとこんな感じ。
http://www.postgresql.jp/document/pg746doc/html/libpq-pgpass.html

py4s-tnkpy4s-tnk2008/01/29 02:34>MySQLのパスワードを ~/.my.cnf に書いておくと自動的に読まれます。
知りませんでした。orz
思いっきり、バックアップのプログラムの中にパスワード書いていました。。
貴重な情報ありがとうございます!

2007-06-29

[]tarmysqlデータバックアップする方法 02:33 tarでmysqlデータをバックアップする方法 - FreeBSD初心者運用日記 を含むブックマーク はてなブックマーク - tarでmysqlデータをバックアップする方法 - FreeBSD初心者運用日記 tarでmysqlデータをバックアップする方法 - FreeBSD初心者運用日記 のブックマークコメント

備忘録

$ mysql -u hoge -phoge -e 'flush tables with read lock; system backup.sh; unlock tables';

mysqlコマンド終了させると、ロックも同時に解除されてしまうので、

以下のようなケースではロック意味がない。

$ mysql -u hoge -phoge -e 'flush tables with read lock';
$ ./backup.sh
$ mysql -u hoge -phoge -e  'unlock tables';

CressCress2007/07/05 22:51ロックされないとDBの意味ないですからねぇ。
私は、mysqldumpしたのをbzip2してバックアップしています。大規模なところなら、コレをcronでやってしまうと楽です。

py4s-tnkpy4s-tnk2007/07/06 06:15コメントありがとうございますm(_ _)m

たしかに、mysqldumpですと、オプションでロックできるので便利ですよねー。

2007-04-30MySQL5.0の環境構築

[] 04:10 MySQL5.0の環境構築 - FreeBSD初心者運用日記 を含むブックマーク MySQL5.0の環境構築 - FreeBSD初心者運用日記 のブックマークコメント

編集中^^;

adduserコマンドを実行。

http://dev.mysql.com/downloads/mysql/5.0.html

$ cd ~
$ tar xzvpf mysql-5.0.37-freebsd6.0-i386.tar.gz

※ ここは一般ユーザで、ホーム配下に展開すればよい

$ ls -asl | grep mysql
2 drwxr-xr-x  14 white  wheel       512  5  4 01:16 mysql-5.0.37-freebsd6.0-i386
43472 -rw-r--r--   1 white  wheel  44460396  5  4 00:51 mysql-5.0.37-freebsd6.0-i386.tar.gz
$ sudo mv mysql-5.0.37-freebsd6.0-i386/ /usr/mysql
$ sudo chown -R mysql:mysql /usr/mysql
# cd /usr
# mkdir -p data/mysql
# chown -R mysql:mysql data

ディスクの空き容量に余裕があればどこでもよい。

# vi /etc/my.cnf
[mysqld]
user=mysql
basedir=/usr/mysql
datadir=/usr/data/mysql
port=3306
socket=/usr/data/mysql/mysql.sock

basedirは、mysqlインストールディレクトリ。datadirは、データベース領域(先に作成したデータディレクトリを指定)。注意することとして、datadirやsocketで指定したファイル(又はディレクトリ)は、userで指定したOSユーザが書き込み権限をもっていないとだめ。

datadirで指定するディレクトリユーザが作成しないとだめだけど、socketで指定するファイルは、MySQLサーバ起動時に自動的に作成されるようだ。

$ whoami
mysql
$ cd /usr/mysql
$ ./scripts/mysql_install_db --datadir=/usr/data/mysql
Installing all prepared tables
Fill help tables

To start mysqld at boot time you have to copy support-files/mysql.server
to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/mysql/bin/mysqladmin -u root password 'new-password'
/usr/mysql/bin/mysqladmin -u root -h white.localhost password 'new-password'
See the manual for more instructions.

You can start the MySQL daemon with:
cd . ; /usr/mysql/bin/mysqld_safe &

You can test the MySQL daemon with the benchmarks in the 'sql-bench' directory:
cd sql-bench ; perl run-all-tests

Please report any problems with the ./bin/mysqlbug script!

The latest information about MySQL is available on the web at
http://www.mysql.com
Support MySQL by buying support/licenses at http://shop.mysql.com
$

データディレクトリ配下に、ディレクトリファイルが作成されていることを確認

$ cd /usr/data/mysql
$ ls
mysql test
$ cd mysql
[mysql@black /usr/data/mysql/mysql]$ ls
columns_priv.MYD                help_category.frm               host.MYI                        time_zone.MYD                   time_zone_transition.frm
columns_priv.MYI                help_keyword.MYD                host.frm                        time_zone.MYI                   time_zone_transition_type.MYD
columns_priv.frm                help_keyword.MYI                proc.MYD                        time_zone.frm                   time_zone_transition_type.MYI
db.MYD                          help_keyword.frm                proc.MYI                        time_zone_leap_second.MYD       time_zone_transition_type.frm
db.MYI                          help_relation.MYD               proc.frm                        time_zone_leap_second.MYI       user.MYD
db.frm                          help_relation.MYI               procs_priv.MYD                  time_zone_leap_second.frm       user.MYI
func.MYD                        help_relation.frm               procs_priv.MYI                  time_zone_name.MYD              user.frm
func.MYI                        help_topic.MYD                  procs_priv.frm                  time_zone_name.MYI
func.frm                        help_topic.MYI                  tables_priv.MYD                 time_zone_name.frm
help_category.MYD               help_topic.frm                  tables_priv.MYI                 time_zone_transition.MYD
help_category.MYI               host.MYD                        tables_priv.frm                 time_zone_transition.MYI
# whoami
root
# cd /usr/mysql
# ./bin/mysqld_safe --defaults-file=/etc/my.cnf &
[1] 876
Starting mysqld daemon with databases from /usr/data/mysql
# ps auxww | grep mysql
root      723  0.0  0.1  1668  1328  p2  S    12:06AM   0:00.01 /bin/sh ./bin/mysqld_safe --defaults-file=/etc/my.cnf
mysql     750  0.0  1.4 41772 21608  p2  S    12:06AM   0:00.10 /usr/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/mysql --datadir=/usr/data/mysql --user=mysql --pid-file=/usr/data/mysql/white.localhost.pid --port=3306 --socket=/usr/data/mysql/mysql.sock

※ ここはOSrootユーザで起動するのが望ましい。(内部的に、set_reuid()やset_regid()を行っている為)

※ mysqld_safeのプロセスオーナーがrootなのに対して、mysqldのプロセスオーナーがmysqlになっていることに注目。

$ cd /usr/data/mysql
[mysql@black /usr/data/mysql]$ cat `hostname`.err
070505 00:22:19  mysqld started
InnoDB: The first specified data file ./ibdata1 did not exist:
InnoDB: a new database to be created!
070505  0:22:19  InnoDB: Setting file ./ibdata1 size to 10 MB
InnoDB: Database physically writes the file full: wait...
070505  0:22:19  InnoDB: Log file ./ib_logfile0 did not exist: new to be created
InnoDB: Setting log file ./ib_logfile0 size to 5 MB
InnoDB: Database physically writes the file full: wait...
070505  0:22:19  InnoDB: Log file ./ib_logfile1 did not exist: new to be created
InnoDB: Setting log file ./ib_logfile1 size to 5 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: Doublewrite buffer not found: creating new
InnoDB: Doublewrite buffer created
InnoDB: Creating foreign key constraint system tables
InnoDB: Foreign key constraint system tables created
070505  0:22:20  InnoDB: Started; log sequence number 0 0
070505  0:22:20 [Note] /usr/mysql/bin/mysqld: ready for connections.
Version: '5.0.37'  socket: '/usr/data/mysql/mysql.sock'  port: 3306  MySQL Community Server (GPL)

問題なさそうかな。。

ちなみに、mysqldの起動時に何か問題があるとエラーログに理由を出力してくれるらしい。

$ /usr/mysql/bin/mysql --user=root --socket=/usr/data/mysql/mysql.sock

socketの場所が/tmp/mysql.sock以外の場合、毎回socket指定してあげる必要がある。mysqlクライアントだけじゃなく、mysqladminなども同様。

mysql> TRUNCATE TABLE mysql.user;
mysql> FLUSH PRIVILEGES;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

環境構築の参考にしている本によれば、デフォルトユーザは混乱をまねく恐れがあるので、全削除して作りなおしたほうがよいらしい。

passwordのところは、任意の文字列を入力してよい。

FLUSH PRIVILEGESは、変更した権限データベースの内容をMySQL内部キャッシュリロードする。

MySQLの権限設定に関するページを見付けた。後でよんでみよう。

http://itpro.nikkeibp.co.jp/article/COLUMN/20060510/237494/

mysql> create database hogedb;
mysql>  GRANT ALL PRIVILEGES ON hogedb.* TO user1 IDENTIFIED BY 'password'

環境構築はこれで完了!

ちなみに、mysqlサーバを止める場合は、以下のようにする。

$ /usr/mysql/bin/mysqladmin shutdown --user=root --password=password --socket=/usr/data/mysql/mysql.sock
STOPPING server from pid file /usr/data/mysql/black.localhost.pid
070505 02:24:58  mysqld ended

当初、ふりび5系のサーバMySQL環境を構築していたのだが、

mysql_install_dbを実行しようとしたら、「libcrypt.so.3が必要だよ」ってエラーが出た。そのサーバに入ってるのは、libcrypt.so.2だった。orz

しょうがないので、ふりび6系のサーバ環境構築したらうまくいった。時間があるときに、ふりび5系で依存関係を解消する方法を調べてみよう。

※1

このページにFreeBSD (TAR packages) downloadというところがある。そこに、FreeBSD 6.x (x86)とFreeBSD 6.x (x86_64)というのがあり、前者Intelcpuで、後者amdcpu関係するらしい。

とりあえず、CPUIntelのものを使っているので、前者ダウンロード

CressCress2007/05/04 15:09おとなりのくれすです。Portsじゃダメでしょか?
http://www.jp.freebsd.org/www.FreeBSD.org/ja/ports/index.html
依存関係の解決をしてくれるので楽です。
ユーザの作成とかも全部やってくれます。

py4s-tnkpy4s-tnk2007/05/04 16:26くれす様、コメントありがとうございますm(_ _)m

>依存関係の解決をしてくれるので楽です。
実は、その依存関係の解決の仕方を勉強しようと思って、わざとPortsを使わないようにしてたりします^^;

# 実は私がはてなでブログを始めようと思ったのが、くれすさんの「くれすのFreeBSD日記」を見たのがきっかけだったりします。FreeBSDの知識はまだまだ未熟ですが、よろしくお願い致します。m(_ _)m

2007-04-14

[][]phpMySQLデータベースアクセス 23:05 phpでMySQLデータベースにアクセス - FreeBSD初心者運用日記 を含むブックマーク はてなブックマーク - phpでMySQLデータベースにアクセス - FreeBSD初心者運用日記 phpでMySQLデータベースにアクセス - FreeBSD初心者運用日記 のブックマークコメント

phpMySQLアクセスするプログラムコード

<?php
$link = mysql_connect('localhost', 'root', '');
if ($link == false) {
    die('mysql_connect is failed.');
}
mysql_select_db('hoge_db');
$result = mysql_query('select * from hoge_tbl');
if ($result == false) {
    die('mysql_connect is failed.');
}
echo "<html>";
echo "<body>";
echo "<pre>";
while($arr = mysql_fetch_array($result)) {
    echo "id = {$arr['id']}\r\n";
    echo "name = {$arr['name']}\r\n";
    echo "memo = {$arr['memo']}\r\n";
}
echo "</pre>";
echo "</body>";
echo "</html>";
?>