MySQL

共用レンタルサーバーや自サーバーで利用するデータベースとして、MySQLは非常に多いと思います。ここでは、最初に利用するにあたって必要となるユーザ設定や些細な情報を残します。古い情報にそのまま追加していますので、新しいバージョンとは異なる場合があります。詳細は、MySQLドキュメントを確認して下さい。

初期設定ファイル「my.ini」の設定

MySQLシステムを利用するためのいろいろな設定が、「C:\WINDOWS\my.ini」ファイルで可能である。以下の設定を行った。設定が終了したらタスクバーのアイコンを右クリックして「コントロールパネル」から「管理ツール」-「サービス」を実行し、MySQLデータベースを停止、再起動する

  • データベースの場所[mysqld] datadir=D:/MySQLData
    「C:\Program Files\MySQL\data」フォルダにある「mysql」と「test」のフォルダを「D:\MySQLData」フォルダにコピー。
  • データベースの文字コード[mysqld]
    default-character-set=sjis
    ※MySQL5からは、Webで利用するならUTF-8の方が都合が良い(071002)。
  • クライアントの文字コードの設定[mysql]
    default-character-set=sjis
    その他、mysqldumpコマンドも同じように設定できるようである。
    ※XPやVistaならクライアントもUTF-8でも良い(071002)。
    ※5.0.67では「utf8」だと文字化け、「sjis」も一部文字化け、「cp932」でOK。
    (081015)
  • クライアントのプロンプト文字列設定[mysql]
    prompt=”\d-\u> ”
    プロンプトを「DB名-ユーザー名> 」とした。
    プロンプトに指定できるパラメータは、MySQLドキュメントの下方参照(080918)。
  • 英大文字使用の有効化[mysqld]
    set-variable=lower_case_table_names=0
    テーブルなどの名称に、大文字を使用できるようにする(phpMyAdminのFAQでハケーン)。確認は、「mysql」で
    show variables like ‘lower_case_table_names’;
    実のところあまり気にしてなかった(^_^); (050220)
  • 英大文字使用の有効化2[mysqld] 4.0.18以降
    4.0.25をインストール後、XPの管理ツールからイベントビューアを起動しアプリケーションを見たところ、MySQLのエラーが発生していた。調べたところ、テーブル名の大小文字の区別をする指定は、
    set-variable=lower_case_table_names=2
    のように、「2」を指定しなければならないらしい。これは、ファイル名の大小文字を区別しないシステムでテーブル名の大小文字を区別する際の指定との事だった。(050721)

補足:「my.ini」の編集は、行末がLF(0x0a)なのでXPやVistaのメモ帳で開くと、データが一続きで表示される(テキストエディタを利用した方が良い)。

ルートのパスワード設定・変更

インストール時rootユーザーには、パスワードは設定されていない。また、rootユーザーのlocalhost(MySQLをインストールした PC)以外のログオンは禁止されている。ここでは、localhostからもパスワードを入力しないと利用できないように、パスワード設定を行う。

shell>mysql -u root mysql
mysql> set password for root@localhost=password('XXXXXXXX');

次からコマンドを実行するときは、

shell>mysql -u root -p DB名 または、
shell>mysql -u root -pPASSWORD DB名

とする。上は、パスワードを聞いてくる。また、パスワードの変更は次のようにする。

mysql> update user set password=password('NEW PASSWORD') where user='root';

ユーザの登録

  • root以外のスーパーユーザーを登録するには、
    shell>mysql -u root -p mysql
    mysql> grant all on *.* to USER名@localhost identified by 'PASSWORD';
    mysql> grant all on *.* to USER名@'%' identified by 'PASSWORD';
  • 権限なしのユーザーを登録するには、
    mysql>grant usage on DB名.TBL名 to USER名@localhost identified by 'PASSWORD';
  • 登録ユーザーの一覧は、
    mysql> select user,host from user;
  • データベース「mydb」を利用するユーザーで、利用権限を付けて登録は、
    mysql> grant select,insert,update,delete,create,drop,index
        -> on mydb.* to USER名@localhost identified by 'PASSWORD';
  • データベースユーザの権限の表示は、
    mysql> show grants for USER名@'%';
  • 権限の追加は、
    mysql> grant alter on mydb.* to USER名@localhost;
  • 権限の削除は、
    mysql> revoke alter on mydb.* from USER名@localhost;

ユーザの削除

shell>mysql -u root -p mysql
mysql> select user,host from user;
mysql> delete from user where user='USER名' and host='HOST名';
mysql> flush privileges;

テーブルのコピー

テーブル更新プログラムを作ったので実行しようかと思ったが、プログラムミスで取り返しのつかない惨状は見たくないと思い、バックアップ代わりにテーブルを簡単にコピーできないものか考えた。

検索したところ、コマンドラインからの実行を除いて、以下の2つの方法があるようだ。

  1. create table new_table_name select * from copy_table_name
  2. create table new_table_name like copy_table_name
    insert into new_table_name select * from copy_table_name

1を実行すると、auto_increment指定したカラムのauto_increment指定が外されたり、varchar型がchar型のカラムになることがあるようだ。

2の方法であれば、一旦スキーマをコピーしてからデータを挿入するので、1のようなことはなかった(MySQL version 4.1.22で確認)。また、auto_increment属性を持つカラムデータは、歯抜けであっても前詰めされずにその値で挿入されていた。

(081221)

テーブル名の変更

テーブル名の変更は、

mysql> alter table 変更前のテーブル名 rename to 新しいテーブル名

と実行すればよい。Ver.5.1.34 で実行確認済み。

(090801)

MySQLアップグレードの際のテーブルチェック

開発作業で利用しているMySQLのバージョンを、たまたま5.0.67から5.1.31にバージョンアップする際、MySQLのドキュメントサイトで「mysql_upgrade MySQLアップグレードのテーブルチェック」を見つけたので、利用してみました。

テーブルの構造とか新しくなったとき、このプログラムを実行すると自動でチェックして修正してくれるようで、実際使ってみたところ、何やらエラーメッセージと修復メッセージが出てきました。

バックアップも取らずにイキナリ実行、いやはや冷や汗ものでありますね(^_^;)。

(090212)

5.1.52のアップグレードでインストール後のMySQL Start でエラー

それまで5.1.41を動作させていた。アップグレードの手順は以下の通り。

1.MySQLのサービス停止
2.MySQLをアンインストール
3.5.1.41をインストールしていたディレクトリへ、5.1.52をインストール

インストール後、iniの設定を行なってサービス起動の所でエラーが発生。アンインストール後再度試みるも同じ所で停止。

設定プログラムをキャンセル終了し、my.iniを現在の環境に書き直ししてPCを再起動した所、サービスも無事に起動されて動作確認できた。なお起動後、mysql_upgradeを実行した。

my.iniの変更は、データベースエンジンをInnoDBからMYISAMにした。これが原因かは不明。

(101107)

  1. コメントはまだありません。

  1. トラックバックはまだありません。