PostgreSQL等と違ってテーブルクリエート時に指定できないのだろうか?/etc/my.cnfをいちいち書き換えないと駄目なのか?
mysql> status
SHOW VARIABLES LIKE 'character\_set\_%';
create database codezine default charset utf8;
show create database データベース名
通常のmysqlで実行される文字コードは初期設定だとlatin1。これで文字化けしないわけがないので適宜文字コードを設定しておく。
mysql> status; mysql> set character set utf8;
デフォルトのcharsetを設定ファイルに記載しておくと手間が省ける
[mysql] default-character-set=文字コード [mysqld] default-character-set=文字コード [client] default-character-set=文字コード
Windowsで出来るGUIツールを開発元が配布しているのが心強い。MySQL AdministratorやMySQL Query Browser等がある。
文字コードを指定しないと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 |
バッチ処理 on シェル | mysql> source ファイル名 |
TABLE一覧 | SHOW TABLES; |
プロセスの確認 | SHOW processlist |
DBダンプ | $ mysqldump -u root データベース名 > dump.sql |
列追加 | ALTER TABLE テーブル名 ADD フィールド名 varchar(200) not null [DEFAULT 0] [AFTER <カラム名>]; |
列削除 | ALTER TABLE テーブル名 DROP フィールド名 |
シーケンスを任意の値に | ALTER TABLE tbl AUTO_INCREMENT = 100; |
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の場合はその心配はない
WEBからDB管理ができてしまうというツール。日本語化されていて、解凍即実行可能。海外ではよく使われているのかphpmyadminへの不正アクセスが多数・・・・
PHP 4,5.1では2.9系、PHP 5.2では3.x系を利用できる。
CentOS5では5.1.6なので2.xを使う
LOAD DATA LOCAL INFILE 'car_import.csv' INTO TABLE テーブル名 FIELDS TERMINATED BY ',';
LOAD DATA LOCAL INFILE 'persondata.txt' INTO TABLE persondata (col1,col2,...);
LOAD DATA LOCAL INFILE 'test.txt' INTO TABLE test (col1);
mysqldump -u root -p --add-drop-table DB名 テーブル名 > /var/tmp/rooms.sql
mysql -u root -p DB名 < /var/tmp/rooms.sql
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;
[mysqld] skip-grant-tables
mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('mynewpassword') WHERE User='root'; mysql> flush-privileges;
しかしこれだと固まりやがる場合があり(超不安定DB) mysql> grant all on *.* to root@localhost identified by "パスワード";
これでパスワード認証を求められる mysql -u root -p xoops
/var/lib/mysql/mysql以下を全部消してinitする