MySQLの最近のブログ記事

mysqldump -u ユーザ名 -pパスワード -x --all-databases > /tmp/mysql.dump

また、cronで設定したい場合、このままだと、mysql.dumpというファイル名で上書きされてしまうので、

mysqldump -u ユーザ名 -pパスワード -x --all-databases > "/var/db/backup/`date +%Y%m%d_%H%M%S`.sql"

のように、日毎(上記の場合は時間も指定)のファイルを作成するよう設定。

MYSQLで制限(特権)付きのユーザを作成するには、GRANTコマンドで行う。

GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO ユーザ名@localhost IDENTIFIED BY "パスワード";

上記のコマンドだと、ローカルホストで、SELECT, INSERT, UPDATE, DELETEが出来るユーザが作成出来る。

MYSQLのバージョンは4.1.20で確認

mysql> SET PASSWORD FOR root=PASSWORD('パスワード');
では

ERROR 1133 (42000): Can't find any matching row in the user table
なエラーが出てしまう。

ホスト名を設定する必要がある。

mysql> SET PASSWORD FOR root@localhost=PASSWORD('パスワード');

mysql> use mysql;
mysql> SELECT user, password, host FROM user;
で確認出来る。

初期の段階だと、
root localhost
root localhost.localdomain
匿名ユーザ
が設定されている。

匿名ユーザでアクセスできてしまうので、これを削除。

mysql> use mysql;
でmysqlデータベースに接続し、
mysql> DELETE FROM user WHERE user = '';
で削除出来る。

また、rootもlocalhost.localdomainも削除したいので、
mysql> DELETE FROM user WHERE host = 'localhost.localdomain';
で削除する。

・サーバのキャラセット
SQLを送信する時のデフォルトを設定
サーバのキャラセットを変更出来ない場合など、
//クライアントから送信される SQL ステートメントのキャラクタセット
SET NAMES character_set_name
//クライアントから送信される SQL ステートメントのキャラクタセットと、サーバからクライアントに返される結果セットのキャラクタセット
SET CHARACTER SET character_set_name

http://dev.mysql.com/doc/refman/4.1/ja/charset-connection.html

・データベースのキャラセット、テーブルのキャラセット、カラムのキャラセット
右に行くにつれて詳細な設定。
同じキャラセットであれば、データベースのキャラセットだけを指定すれば良い。

あっているのかな。。。

http://dev.mysql.com/doc/refman/4.1/ja/charset-defaults.html

日付データ型フィールド TEST
がある場合、

MySQLの場合、
年 YEAR(TEST)
月 MONTH(TEST)
日 DAYOFMONTH(TEST)
で取得可能。

PostgreSQLの場合
年 EXTRACT('year' from TEST)
月 EXTRACT('month' from TEST)
日 EXTRACT('day' from TEST)

で取得可能。

また、今日の日付を取得したい場合、PostgreSQL,MySQLともに、
Now()関数もあるが、CURRENT_DATE
も使える。

PostgreSQLの場合[random()]
select * from テーブル名 order by random() limit 3

MySQLの場合[rand()]
select * from テーブル名 order by rand() limit 3

で、情報を3件ランダムで取得可能。

エラー内容
Client does not support authentication protocol requested
by server; consider upgrading MySQL client

mysql4.1からパスワードが41バイトに変更されたため、
phpなどのmysqlクライアントで、バージョンが4.1以下のものは、
普通には接続出来ない。

色々方法はあるのだが、パスワードをもとの16バイトに戻してしまう方法もある。

mysqlにログインし、下記コマンドを実行。
FLUSH PRIVILEGESを実行しないと反映されないので注意。

mysql> UPDATE user SET Password = OLD_PASSWORD('mypass')
-> WHERE Host = 'some_host' AND User = 'some_user';
mysql> FLUSH PRIVILEGES;

http://dev.mysql.com/doc/refman/4.1/ja/password-hashing.html

文字化けする時は、mysql_connectの次に
SET NAMESを送信する必要がある。

例)
$dbi = mysql_connect("localhost", "root", "") or die("false1");
mysql_query("SET NAMES ujis", $dbi);
mysql_select_db("dbname") or die("false2");

このアーカイブについて

このページには、過去に書かれたブログ記事のうちMySQLカテゴリに属しているものが含まれています。

前のカテゴリはMT関連です。

次のカテゴリはperlです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。