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"
のように、日毎(上記の場合は時間も指定)のファイルを作成するよう設定。
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");