MySQLの最近のブログ記事
CentOS5にphpMyAdminをインストールしてみた。インストール手順は以下が参考になります。
http://centossrv.com/phpmyadmin.shtml
ログイン後にいくつかエラーがでたのでその対処方法について。
「mcrypt 拡張をロードできません。PHP の設定を確認してください。」というエラーは、
以下のコマンドでmcryptをインストールします。
「rootのパスワードが設定されていません」は、rootでログインしてメニューの特権→rootユーザを
選択して、パスワードを設定します。
「PHP の mbstring 拡張が見つかりませんでした。マルチバイト文字セットを使用しているようですが、mbstring拡張がないと phpMyAdmin は文字列を正しく分割できないため予期しない結果になることがあります」
これは、以下のコマンドmbstringをインストールします。
http://centossrv.com/phpmyadmin.shtml
ログイン後にいくつかエラーがでたのでその対処方法について。
「mcrypt 拡張をロードできません。PHP の設定を確認してください。」というエラーは、
以下のコマンドでmcryptをインストールします。
# yum install php-mcrypt
「rootのパスワードが設定されていません」は、rootでログインしてメニューの特権→rootユーザを
選択して、パスワードを設定します。
「PHP の mbstring 拡張が見つかりませんでした。マルチバイト文字セットを使用しているようですが、mbstring拡張がないと phpMyAdmin は文字列を正しく分割できないため予期しない結果になることがあります」
これは、以下のコマンドmbstringをインストールします。
# yum install php-mbstring
XServer(エックスサーバ)でのMySQLの操作はphpMyAdminを利用することになります。
現在のバージョンは、2.10.0.2 です。
ここではテーブルに外部キーを設定してみます。SQLを流さなくても画面から行うことができます。
まず外部キーを設定するには、各テーブルがInnoDB 型である必要があります。
すでにMyISAM等で作成している場合でも以下の手順で変更できます。
1. 画面左のテーブル一覧から、変更したいテーブルを選択します
2. 画面上メニューの「操作」をクリック
3. テーブルオプションの「ストレージエンジン」を「InnoDB」に変更
4. 変更したら、外部キーを設定したいテーブルを選択します
5. 画面中央辺りにある「リレーションビュー」をクリックします

6. 設定したいテーブルとフィールドが表示されるので選択すれば設定完了です。
ON DELETEとON UPDATEについては、親テーブルの削除・更新時に子テーブルを
どのように動作させるかというものです。詳細は以下より。
MySQL 4.1 リファレンスマニュアル :: 7.5.5.2 FOREIGN KEY 制約
http://dev.mysql.com/doc/refman/4.1/ja/innodb-foreign-key-constraints.html
現在のバージョンは、2.10.0.2 です。
ここではテーブルに外部キーを設定してみます。SQLを流さなくても画面から行うことができます。
まず外部キーを設定するには、各テーブルがInnoDB 型である必要があります。
すでにMyISAM等で作成している場合でも以下の手順で変更できます。
1. 画面左のテーブル一覧から、変更したいテーブルを選択します
2. 画面上メニューの「操作」をクリック
3. テーブルオプションの「ストレージエンジン」を「InnoDB」に変更
4. 変更したら、外部キーを設定したいテーブルを選択します
5. 画面中央辺りにある「リレーションビュー」をクリックします

6. 設定したいテーブルとフィールドが表示されるので選択すれば設定完了です。
ON DELETEとON UPDATEについては、親テーブルの削除・更新時に子テーブルを
どのように動作させるかというものです。詳細は以下より。
MySQL 4.1 リファレンスマニュアル :: 7.5.5.2 FOREIGN KEY 制約
http://dev.mysql.com/doc/refman/4.1/ja/innodb-foreign-key-constraints.html
MySQLの基本ですが、すべての文字列比較は、デフォルト設定で大文字と小文字の区別はありません。
ユーザIDをチェックするのに、テーブルには、'AAA'と入っていても、'AAa'でも'aaa'でもマッチすることに
なります。
ユーザIDをチェックするのに、テーブルには、'AAA'と入っていても、'AAa'でも'aaa'でもマッチすることに
なります。
すべての文字列比較は、デフォルトでは大文字と小文字を区別せず、現在のキャラクタセット照合順序 で決められたソート順で行われます。このキャラクタセット照合順序は、デフォルトではlatin1(cp1252 West European)です。これを変更するには、BINARY属性を指定してカラムを宣言するか、BINARY キャストを使用して、字句順序よりもキャラクタコード値を使用して比較が行われるようにする必要があります。
MySQL 5.1 リファレンスマニュアル :: 1.8.4 SQL標準に対するMySQL拡張機能
http://dev.mysql.com/doc/refman/5.1/ja/extensions-to-ansi.html
大文字小文字の区別をつけるためには、テーブルのフィールドの「属性」にbinaryを指定します。MySQL 5.1 リファレンスマニュアル :: 1.8.4 SQL標準に対するMySQL拡張機能
http://dev.mysql.com/doc/refman/5.1/ja/extensions-to-ansi.html
XServerのphpMyAdminのパスワードを忘れてしまった。
サーバパネルを見ると、[MySQL設定]→[MySQLユーザの一覧]からパスワードが変更できるではないか!
旧パスワードが不要なので、さくっと変更完了!
これでphpMyAdminも使えるようになりました。
が、よく考えたら(今ごろ・・・)MovableTypeはMySQLを使用している。
接続できないのでは?と思ったら、MTの管理者画面に入れません。。
アホすぎですね。
全く忘れてしまって、configファイルに書いたようなと思ったらありました。
MTのインストールフォルダの直下に、mt-config.cgi というファイルが。
この中のDBPasswordという項目を変更すればOK。
最初からこのファイルをみればよかったんですね。。
サーバパネルを見ると、[MySQL設定]→[MySQLユーザの一覧]からパスワードが変更できるではないか!
旧パスワードが不要なので、さくっと変更完了!
これでphpMyAdminも使えるようになりました。
が、よく考えたら(今ごろ・・・)MovableTypeはMySQLを使用している。
接続できないのでは?と思ったら、MTの管理者画面に入れません。。
アホすぎですね。
全く忘れてしまって、configファイルに書いたようなと思ったらありました。
MTのインストールフォルダの直下に、mt-config.cgi というファイルが。
この中のDBPasswordという項目を変更すればOK。
最初からこのファイルをみればよかったんですね。。
前回はODBCでの接続でしたが、今回はパフォーマンスがより良いとされている、Connector/Netでの接続を行います。
まずはConnector/Net 5.1をこちらからダウンロードしてインストールします。
次にVS2005のプロジェクトに参照の設定をします。
メニュー→Webサイト→参照の追加→.NETタブの中の、MySQL.Dataを選択してOKボタンをクリックします。
これでvbファイルでImportの記述が行えます。
これでMySQLからデータを取得してGridViewに表示されます。
まずはConnector/Net 5.1をこちらからダウンロードしてインストールします。
次にVS2005のプロジェクトに参照の設定をします。
メニュー→Webサイト→参照の追加→.NETタブの中の、MySQL.Dataを選択してOKボタンをクリックします。
これでvbファイルでImportの記述が行えます。
Dim conn As
MySqlConnection
Dim ds As New
DataSet()
Dim da As New MySqlDataAdapter()
'接続文字列
Dim connStr As String =
"Database=bookmark;Data Source=localhost; _
User
Id=user;Password=pass"
da.SelectCommand = New MySqlCommand("SELECT * FROM items", conn)
'DataSetに格納
da.Fill(ds)
'GridViewへバインド
GridView1.DataSource = ds
GridView1.DataBind()
GridViewの更新はCommandFieldを追加するだけで簡単にできますが、MySQLだとそうはいきません。データソース構成ウィザードでUpdateCommandをうまく作れないためです。
ということでここでは、コードからGridViewを更新する方法をご紹介します。SQLServerであればこんなことは不要なんですけどね。
ここで紹介する画面イメージは以下のようになっています。

更新したい項目をTemplateFieldにしておきます。GridViewの列の編集から開くダイアログでフィールドを選択して「このフィールドを TemplateField に変換します。」リンクをクリックします。

これで基本的には準備完了です。あとはコードを書きます。どのイベントに書くかというと、GridViewのRowUpdaingに記述します。
ということでここでは、コードからGridViewを更新する方法をご紹介します。SQLServerであればこんなことは不要なんですけどね。
ここで紹介する画面イメージは以下のようになっています。

更新したい項目をTemplateFieldにしておきます。GridViewの列の編集から開くダイアログでフィールドを選択して「このフィールドを TemplateField に変換します。」リンクをクリックします。

これで基本的には準備完了です。あとはコードを書きます。どのイベントに書くかというと、GridViewのRowUpdaingに記述します。
Protected Sub GridView1_RowUpdating(ByVal sender As Object, ByVal e As _
System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridView1.RowUpdating
'更新対象の行をGridViewRowオブジェクトとして取得
Dim row As GridViewRow = GridView1.Rows(e.RowIndex)
'TemplateFieldのTextBoxのIDを指定して取得
Dim url As TextBox = CType(row.FindControl("TextBox1"), TextBox)
Dim title As TextBox = CType(row.FindControl("TextBox2"), TextBox)
Dim desc As TextBox = CType(row.FindControl("TextBox3"), TextBox)
'UpdateCommand設定
SqlDataSource1.UpdateCommand = "UPDATE bookmark.items SET url = ?, title = ?, _
description = ? WHERE (id = ?)"
'各パラメータを設定
SqlDataSource1.UpdateParameters.Add("param1", CStr(url.Text))
SqlDataSource1.UpdateParameters.Add("param2", CStr(title.Text))
SqlDataSource1.UpdateParameters.Add("param3", CStr(desc.Text))
SqlDataSource1.UpdateParameters.Add("param4", CStr(row.Cells(0).Text))
End Sub
これで更新が可能になります。
System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridView1.RowUpdating
'更新対象の行をGridViewRowオブジェクトとして取得
Dim row As GridViewRow = GridView1.Rows(e.RowIndex)
'TemplateFieldのTextBoxのIDを指定して取得
Dim url As TextBox = CType(row.FindControl("TextBox1"), TextBox)
Dim title As TextBox = CType(row.FindControl("TextBox2"), TextBox)
Dim desc As TextBox = CType(row.FindControl("TextBox3"), TextBox)
'UpdateCommand設定
SqlDataSource1.UpdateCommand = "UPDATE bookmark.items SET url = ?, title = ?, _
description = ? WHERE (id = ?)"
'各パラメータを設定
SqlDataSource1.UpdateParameters.Add("param1", CStr(url.Text))
SqlDataSource1.UpdateParameters.Add("param2", CStr(title.Text))
SqlDataSource1.UpdateParameters.Add("param3", CStr(desc.Text))
SqlDataSource1.UpdateParameters.Add("param4", CStr(row.Cells(0).Text))
End Sub
MySQLへの接続をODBCで試してみたところ、文字化けした。。DBの文字コードはUTF-8にしてあるのにだめでした。
環境:XP Pro, VS2005, MySQL5.0, ODBC3.51(MySQLはWin, Linux両方試した)
ただODBCを5.1にしたらWin,Linuxどちらも文字化けせず。。
ちなみにSqlDataSourceの構成ウィザードでもSQLServerのように単純にはいきません。
Selectステートメントの構成では”カスタム”を選ばないとエラーになる。

SQLは直接記述するか、クエリビルダを使います。UPDATE, INSERT, DELETEはウィザードではうまくいきません。コードに記述することになります。

最後にクエリのテストをクリックして結果を確認します。文字化けする場合はここで文字化けします。

これで設定完了です。
環境:XP Pro, VS2005, MySQL5.0, ODBC3.51(MySQLはWin, Linux両方試した)
ただODBCを5.1にしたらWin,Linuxどちらも文字化けせず。。
ちなみにSqlDataSourceの構成ウィザードでもSQLServerのように単純にはいきません。
Selectステートメントの構成では”カスタム”を選ばないとエラーになる。

SQLは直接記述するか、クエリビルダを使います。UPDATE, INSERT, DELETEはウィザードではうまくいきません。コードに記述することになります。

最後にクエリのテストをクリックして結果を確認します。文字化けする場合はここで文字化けします。

これで設定完了です。
MySQLではデフォルトはlocalhostからの接続のみ許可されています。ここではWindowsマシンのMySQL AdministratorからMySQL(Linux)に接続を行います。
まずはuserテーブルに接続するHost(IPアドレス指定)とユーザ(test)を登録します。
まずはuserテーブルに接続するHost(IPアドレス指定)とユーザ(test)を登録します。
mysql> use mysql;
mysql> INSERT INTO user (host, User) VALUES('192.168.xxx.xxx', 'test');
次にパスワードを設定します。mysql> INSERT INTO user (host, User) VALUES('192.168.xxx.xxx', 'test');
mysql> UPDATE user SET Password=PASSWORD('パスワード') WHERE User='test';
mysql> flush privileges;
これでWindowsのMySQL Administratorでログインできます。ただしこれだけではスキーマやテーブル、ユーザの作成などが行えません。今作成したtestユーザに権限を設定する必要があります。ここではすべての権限を付与しています。mysql> flush privileges;
mysql> GRANT ALL PRIVILEGES ON *.* TO root@192.168.xxx.xxx IDENTIFIED BY 'パスワード' WITH GRANT OPTION;
これでめでたくWindowsからすべての操作が可能になります。
インストール直後のMySQLはrootにパスワードが設定されていませんので、以下のコマンドでログインできます。
ユーザ情報はmysqlデータベースのuserテーブルに入っているのでこのテーブルを更新すればよいです。ただしパスワードの項目は暗号化して入れる必要があります。
$ mysql -u root
パスワード設定がないのはまずいので設定を行いましょう。ユーザ情報はmysqlデータベースのuserテーブルに入っているのでこのテーブルを更新すればよいです。ただしパスワードの項目は暗号化して入れる必要があります。
mysql> use mysql
mysql> UPDATE user SET Password=PASSWORD('パスワード') WHERE User='root';
mysql> flush privileges;
確認してみましょう。
mysql> UPDATE user SET Password=PASSWORD('パスワード') WHERE User='root';
mysql> flush privileges;
mysql> select Host, User, Password from user;
+-----------------+--------+------------------+
| Host | User | Password |
+-----------------+--------+------------------+
| localhost | root | a3db40316b5948b2 |
+-----------------+--------+------------------+
パスワードが設定されました。次回ログイン時は-pをつけるとパスワードの入力を求められます。+-----------------+--------+------------------+
| Host | User | Password |
+-----------------+--------+------------------+
| localhost | root | a3db40316b5948b2 |
+-----------------+--------+------------------+
$ mysql -u root -p
Enter password:
パスワードを入力するとログインできます。Enter password:
Linux(CentOS5)にMySQLをインストールしてみた。
文字コードはUTF-8にする。文字化け対応として/etc/my.conf を開きmysqldに以下の2行を追加。
サービスを再起動すると反映されます。 確認は、mysqlに入り以下のコマンドを入力。
うーん、すっきりとutf8に揃いました。
文字コードはUTF-8にする。文字化け対応として/etc/my.conf を開きmysqldに以下の2行を追加。
[mysqld]
default-character-set=utf8
skip-character-set-client-handshake
default-character-set=utf8
skip-character-set-client-handshake
サービスを再起動すると反映されます。 確認は、mysqlに入り以下のコマンドを入力。
mysql> show variables like "char%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
うーん、すっきりとutf8に揃いました。
