文字コード

PostgreSQL等と違ってテーブルクリエート時に指定できないのだろうか?/etc/my.cnfをいちいち書き換えないと駄目なのか?

mysql> status

SHOW VARIABLES LIKE 'character\_set\_%';
create database codezine default charset utf8;

クライアント側の設定

通常のmysqlで実行される文字コードは初期設定だとlatin1。これで文字化けしないわけがないので適宜文字コードを設定しておく。

mysql> status;
mysql> set character set utf8;

管理ツール

Windowsで出来るGUIツールを開発元が配布しているのが心強い。MySQL AdministratorやMySQL Query Browser等がある。

データベース作成、ユーザ作成などの主に管理系タスク

データベース

mysqlのコマンドラインから

文字コードを指定しないとlatin1になってしまう。

DB作成mysql> create database wordpress default character set utf8;

コマンドラインから

DB一覧mysqlshow
DB作成mysqladmin -u root create TEST
DB削除mysqladmin -u root drop TEST

ユーザ作成、権限付与

ユーザの考え方が特殊でなれないとハマる。ユーザ名+アクセス元ホスト名分だけユーザが存在すると考えておいた方がよい。ワイルドカードで指定する事も出来るが、localhostとその他のホストは分けることが出来ない。自宅サーバなら殆どlocalhostのユーザだけで事足りるのだろうが、他の場所からアクセスさせるなら要注意。

コマンド集

インポートload data infile 'c:/ken_all.csv' into table テーブル名
エクスポートselect * from テーブル名 into outfile '絶対パスでファイル名'
DB接続mysql -u root -p DB_NAME
ユーザ作成mysql> grant select,insert,delete,update,create,drop,file,alter,index on *.* to ユーザ名 identified by 'パスワード';
バッチ処理mysql -u root -p DB_NAME < sql.txt
TABLE一覧SHOW TABLES;
プロセスの確認SHOW processlist
DBダンプ$ mysqldump -u root データベース名 > dump.sql

テーブル構造やデータ型

Tableの形式

CREATE TABLE animals (
            id MEDIUMINT NOT NULL AUTO_INCREMENT,
            name CHAR(30) NOT NULL,
            PRIMARY KEY (id)
            ) engine=InnoDB;

データ型

順序型

順序に任意の値を設定

alter table table_name auto_increment=12345;

注意点

データベース名やテーブル名は大文字小文字を区別する。

これはOSが大文字小文字区別するならば、DBとdbは別のデータベースとして取扱われる。テーブルに付いても同様である。WINDOWSのように区別しないOSの場合はその心配はない

GUI管理ツール

phpMyAdmin

WEBからDB管理ができてしまうというツール。日本語化されていて、解凍即実行可能。海外ではよく使われているのかphpmyadminへの不正アクセスが多数・・・・

PHP 4,5.1では2.9系、PHP 5.2では3.x系を利用できる。

CentOS5では5.1.6なので2.xを使う

  1. 解凍する。3.x系ならアクセスすれば自動で設定画面に飛ぶと思った。

インポート、エクスポート

CSVインポート

LOAD DATA LOCAL INFILE 'car_import.csv' INTO TABLE テーブル名 FIELDS TERMINATED BY ',';

バックアップ&リカバリー

テーブル単位

データベース単位

mysqldump -u root -p データベース名 > mysql.sql
mysqldump -u root --password=パスワード データベース名 > mysql.sql
mysql> create database mysql2;
mysql> exit
mysql -u root -p mysql2 < mysql.sql

全部のデータベース

mysqldump -u root -x --all-databases > dump.sql 
mysql -u root -p < dump.sql 

トラブルシューティング

パスワードを忘れて再設定したい

起動引数に--skip-grant-tablesをつける。 centos4.8なら以下のようにする。

/usr/bin/mysqld_safe --skip-grant-tables
mysql -u root
mysql> use mysql
mysql>  UPDATE user SET Password=PASSWORD('') WHERE User='root';
mysql> flush privileges;

FAQ

パスワード忘れた
mysqldの引数に
--skip-grant-tablesをつける
しかしこれだと固まりやがる場合があり(超不安定DB)
mysql> grant all on *.* to root@localhost identified by "パスワード";
これでパスワード認証を求められる
mysql -u root -p xoops
/var/lib/mysql/mysql以下を全部消してinitする
Counter: 18979, today: 1, yesterday: 3

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS