2009年07月30日 MySQL-5.x 儂(わし)的解釈によるメモ(運用編) [長年日記]
_ MySQL-5.x 儂(わし)的解釈によるメモ(運用編)
Slackware-12.xに標準でインストールされるMySQL-5.xをそのまま運用する際に 最低限必要と思われる知識に関するメモ。いろんなページの切り貼り。
Java儂(わし)的解釈によるメモ(JDBC + MySQL編)と若干かぶってるのは御勘弁を。
前提条件
- MySQLの管理者 root
- MySQLの一般ユーザ兼管理者 m-ito
データベース領域の初期化
mysqldを起動するに当たって、一度だけ実行する必要がある。
# mysql_install_db --user=mysql
mysqld起動スクリプトの修正
ネットワーク越しにアクセス(JDBC経由も含む)するために起動オプションを修正する (/etc/rc.d/rc.mysqld)。
#SKIP="--skip-networking" <-- コメントアウト
MySQLコンフィグファイル設定
デフォルト文字コード、デフォルトストレージエンジンの設定。
標準のストレージエンジンであるMyISAMは速度は早いが、トランザクションが サポートされていない。非標準のストレージエンジンであるInnoDBはMyISAMに 比べると速度が劣るがトランザクションをサポートする。
汎用機畑で育った私としてはトランザクションが無い(すなわちcommit、 rollbackが無い)のは信じられないので、デフォルトのストレージエンジンを InnoDBに変更する。また、クライアント、サーバともにデフォルトの文字コー ドをujisとする。最近はutf8が主流になりつつあるそうですが...。
# cp /etc/my-small.conf /etc/my.cnf # vi /etc/my.cnf
[client] ##default-character-set = utf8 default-character-set = ujis [mysqld] ##default-character-set = utf8 default-character-set = ujis default-storage-engine=innodb
mysqld起動
# chmod +x /etc/rc.d/rc.mysqld; reboot
MySQL管理者(root)のパスワード設定
$ mysqladmin -u root password ROOT-PASSWORD
データベース(testdb)の作成
$ mysql -u root -p Enter password: XXXXXXXXXXXXX <-- ROOT-PASSWORDを入力する mysql> create database testdb character set ujis; mysql> quit
一般ユーザ(m-ito)を作成
$ mysql -u root -p Enter password: XXXXXXXXXXXXX <-- ROOT-PASSWORDを入力する mysql> create user 'm-ito'@'localhost' identified by 'USER-PASSWORD'; mysql> quit
一般ユーザ(m-ito)にデータベースへのアクセス権を設定
$ mysql -u root -p testdb Enter password: XXXXXXXXXXXXX <-- ROOT-PASSWORDを入力する mysql> grant all on testdb.* to 'm-ito'@'localhost' identified by 'USER-PASSWORD'; mysql> quit
一般ユーザ用MySQLコンフィグファイル設定
パスワードの設定とデフォルト文字コードの設定。このあたりは必要に応じ て...。
$ cp /etc/my-small.conf ~m-ito/.my.cnf $ chmod 600 ~m-ito/.my.cnf $ vi ~m-ito/.my.cnf
[client] password = USER-PASSWORD ##default-character-set = utf8 default-character-set = ujis
データベース、テーブル情報表示
$ mysqlshow -u m-ito -p testdb HogeTable
データベースのダンプ出力
$ msql -u root -p testdb LOCK TABLES HogeTable READ; CTRL-Z
$ mysqldump -u m-ito -p testdb HogeTable $ mysqldump -u m-ito -p --databases testdb $ mysqldump -u m-ito -p --all-databases
$ fg UNLOCK TABLES;
ユーザ管理
$ mysql -u root -p
権限の種類
- ALL : すべての権限。
- ALTER : ALTER TABLE構文が実行できる権限。
- CREATE : データベースとテーブルの作成が行える権限。
- DROP : データベースとテーブルの削除が行える権限。
- FILE : LOAD DATA構文とSELECT 〜 INTO OUTFILE構文を実行できる権限。
- PROCESS : mysqladminコマンドのprocesslistとkill命令を実行できる権限。
- RELOAD : mysqladminコマンドのreload, refresh, flush-privileges, flush-hosts, flush-logs, flush-tables命令を実行できる権限。
- SHUTDOWN : mysqladminコマンドのshutdown命令を実行できる権限。
- DELETE : DELETE構文を実行できる権限。
- INSERT : INSERT構文を実行できる権限。
- SELECT : SELECT構文を実行できる権限。
- UPDATE : UPDATE構文を実行できる権限。
- INDEX : インデックスの作成と削除が行える権限。
- REFERENCES : テーブルのリファレンスが参照できる権限。
- USAGE : すべての権限がない。
管理者の追加
GRANT ALL ON *.* TO 'm-ito'@'%' IDENTIFIED BY 'USER-PASSWORD' WITH GRANT OPTION; GRANT ALL ON *.* TO 'm-ito'@'localhost' IDENTIFIED BY 'USER-PASSWORD' WITH GRANT OPTION; FLUSH PRIVILEGES;
一般ユーザの追加
GRANT SELECT,INSERT,UPDATE,DELETE ON testdb.* TO 'm-ito'@'localhost' IDENTIFIED BY 'USER-PASSWORD'; FLUSH PRIVILEGES;
ユーザ権限の削除
REVOKE ALL ON testdb.* FROM 'm-ito'; FLUSH PRIVILEGES;
ユーザの削除
REVOKEにて全ての権限を削除後
DROP USER 'm-ito'; FLUSH PRIVILEGES;
ユーザの権限確認
SELECT * FROM mysql.user WHERE User='m-ito';
データベースの削除
mysql -u root -p DROP DATABASE testdb;
パスワードの設定
mysql -u root -p SET PASSWORD FOR 'm-ito'@'%' = PASSWORD('USER-PASSWORD');
CSVファイルの取り込み
mysql -u root -p LOCK TABLES HogeTable WRITE; LOAD DATA INFILE "Hoge.csv" INTO TABLE HogeTable FIELDS TERMINATED BY ',' ENCLOSED BY '"'; UNLOCK TABLES;
- フィールド区切り文字のデフォルトは「タブ」。
- 文字列囲み文字のデフォルトは「無し」。
CSVファイルへの書き出し
mysql -u root -p LOCK TABLES HogeTable READ; SELECT * FROM HogeTable INTO OUTFILE "Hoge.csv" FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'; UNLOCK TABLES;
- フィールド区切り文字のデフォルトは「タブ」。
- 文字列囲み文字のデフォルトは「無し」。
_ BIND 9の脆弱性について
BIND 9にてDynamic DNS機能に関して脆弱性が報告されている。DoSの対称になってしまうとのこと。
JVNVU#725188 ISC BIND 9 におけるサービス運用妨害 (DoS) の脆弱性
早速、libretto100(myh.no-ip.org)のbindもバージョンアップ。