&tag(MySQL/管理); *目次 [#c2811613] #contents *参考情報 [#seea8701] -[[MySQL]] *ユーザー操作 [#rf61dc5d] **rootパスワードの設定 [#ee7826fb] -rootのパスワードが設定されていない場合必ず設定しておく。 ***mysqladminコマンドで設定 [#k6ed0609] mysqladminコマンドを使って設定する方法。 mysqladmin -u root password <new_password> ***mysqlコマンドで設定 [#v582321e] mysqlテーブルを操作してパスワードを設定する方法。 #pre{{ $ mysql -u root -p; mysql> use mysql; mysql> set password for root@localhost=password('任意のpasswd'); }} **ユーザー登録 [#faf9e91b] -データベースの作成も可能なユーザーを登録するには、以下のように実行する。 -ON *.*のところの最初がテーブル名で、二つ目がデータベース名。 #pre{{ $ mysql -u root -p mysql> GRANT ALL PRIVILEGES ON *.* TO ユーザ名@localhost IDENTIFIED BY 'パスワード' }} -ホスト名のところはワイルドカード'%'が指定できる。 mysql> GRANT ALL PRIVILEGES ON *.* TO ユーザ名@'%' IDENTIFIED BY 'パスワード' -ホスト名の部分を省略しても同じ事になるらしい。 mysql> GRANT ALL PRIVILEGES ON *.* TO ユーザ名 IDENTIFIED BY 'パスワード' -確認はrootでuserテーブルを見れば良い。 #pre{{ $ mysql -uroot -p mysql> use mysql; mysql> select * from user; }} ***localhostから接続しようとしてもAccess Denied [#d02e1397] -Unix系のマシンでローカルホストから接続するときにホスト名のワイルドカード'%'がきかないことがある。その理由は[[MySQL :: MySQL 4.1 リファレンスマニュアル :: 4.3.12 Access denied エラーの原因:http://dev.mysql.com/doc/refman/4.1/ja/access-denied.html]]にある通りか? #pre{{ Access denied の原因がわからない場合は、user テーブルから Host 値にワイルドカードが含まれているエントリ(‘%’ または ‘_’ を含むエントリ)をすべて削除する。 よくある間違いは、Host='%' および User='some user' の新規エントリを挿入し、これで、同一マシンから接続する際には localhost を指定できると考えていることである。これがうまくいかない理由は、デフォルト権限として、Host='localhost' および User='' のエントリが含まれているためである。Host 値が 'localhost' の場合、'%' よりも具体的なため、localhost からの接続時に新しいエントリよりもデフォルト権限が優先される。正しい指定の方法は、Host='localhost' および User='some_user' の 2 つ目のエントリを挿入するか、Host='localhost' および User='' のエントリを削除することである。 }} -'%'とlocalhost二つを指定してgrantすればとりあえず良いっぽい。[[Allowing wildcard (%) access on MySQL db, getting error "access denied for '<user>'@'localhost'" - Server Fault:http://serverfault.com/questions/122472/allowing-wildcard-access-on-mysql-db-getting-error-access-denied-for-use]]なども参照のこと。 *データベース操作 [#y1bae0cc] **データベースの生成文を表示する [#l161761a] -show create database <データベース名> を使う。DEFAULT CHARACTER SETや、COLLATEを確認できる。 show create database testdb *テーブル操作 [#c88880b1] ** テーブルの生成文を表示する [#x7a007c3] -データベースに接続してコマンド実行 show create table xxxxx; -mysqldumpを使って一気に表示。テーブル名を省略すればデータベース内の全てのテーブルが対象になる。 mysqldump -d <データベース名> (<テーブル名>) ** カラムを追加する [#bf6a9791] -ALTER TABLEでOK。 ALTER TABLE item ADD COLUMN price char(100); ***NOT NULLの列を追加したらどうなるか [#v6afa6ab] -0とか空文字とかで勝手に初期化される。 -[[データが存在するテーブルに not null 制約の付いたカラムが追加できる - ぱんくず:http://d.hatena.ne.jp/pankuzu/20090220/1235121201]]によると、MySQL独特の挙動のようだ。 ** カラムの順番を変更する [#e90893b3] -[[MySQLのカラム順番変更 | 江島@システム開発:http://tech.eshima.info/?p=173]]より、 ALTER TABLE テーブル名 MODIFY カラム名 データ型 after 移動させる一つ上のカラム名; **主キーを複合キーに変更(主キーに列を追加) [#r95ac40f] -[[mysql - ALTER TABLE to add a composite primary key - Stack Overflow:http://stackoverflow.com/questions/8859353/alter-table-to-add-a-composite-primary-key]]より。 -最初に既存の主キーをDROPしてから再作成する。 ALTER TABLE provider DROP PRIMARY KEY, ADD PRIMARY KEY(person, place, thing); *Tips [#xb2f6a35] **アクセスするホストを制限したい [#yd88e7a5] -my.cnfなどでは指定できないのでgrantでアクセスできるホストを指定する。 **ssh経由の操作 [#edb68c2b] -[[MySQLでエクスポートとインポートを効率よく行う ついでに圧縮 | Hideki's blog:http://blog.deskportal.net/hideki/2012/05/21/mysql%E3%81%A7%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88%E3%81%A8%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88%E3%82%92%E5%8A%B9%E7%8E%87%E3%82%88%E3%81%8F%E8%A1%8C%E3%81%86%E3%80%80/?lang=ja]] -[[mysqldump の結果をそのまま圧縮したり転送したりするコマンド例 | バシャログ。:http://c-brains.jp/blog/wsg/10/09/30-183733.php]] mysqldump -udb_user db_name -pdb_pass | gzip | ssh example.com 'zcat | mysql -udb_user db_name -pdb_pass'