"MySQL" の一覧

WindowsServerバックアップの問題点

WindowsServer2008以降に追加されたWindowsServerバックアップは便利なんだけど、

仮想サーバーでMySQLを運用している場合VSS(ボリュームシャドウコピー)に対応していないのでは?という点からバックアップイメージが正しく取れていないかも?という疑いが。

じゃあ、MySQLを停止させれば良いじゃん?⇒バックアップ開始と終了がゲストOSで検出できないorz

バックアップ製品が無いとダメかな…

MySQL .NET Connectorの検証(2)

前回のように、参照を追加。その後、こんな感じで。フォームにdataGridView1とbutton1が必要です。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using MySql.Data;
using MySql.Data.MySqlClient;

namespace MySqlTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            const string CN_STRING_MYSQL = "Persist Security Info=False;database=(インスタンス名);server=(サーバー);port=(ポート);user id=(ユーザー名);pwd=(パスワード)";

            System.Text.StringBuilder sqlbldr = new System.Text.StringBuilder();
            sqlbldr.AppendLine("select");
            sqlbldr.AppendLine("    COUNT(*)");
            sqlbldr.AppendLine("FROM");
            sqlbldr.AppendLine("    test");

            using (MySqlConnection cn = new MySqlConnection(CN_STRING_MYSQL))
            {
                cn.Open();
                MySqlCommand cmd = cn.CreateCommand();
                cmd.CommandText = sqlbldr.ToString();
                using (MySqlDataAdapter da = new MySqlDataAdapter(cmd))
                {
                    DataTable dt = new DataTable();
                    dt.Locale = System.Globalization.CultureInfo.InvariantCulture;
                    da.Fill(dt);

                    dataGridView1.DataSource = dt;
                }
            }

            
        }
    }
}

こんな感じで作成したアプリをClickOnceで配布すればMySQLに関する事前のセットアップは不要。

MySQL .NET Connectorの検証(1)

最近MySQLの.NET Connectorを見つけてから、接続用のモジュールやODBC設定無しにMySQLへ接続できるはずと思いつつようやく検証しできた。

image .Net ConnectorをこのあたりからDownloadする。
バージョンはサーバーに合わせた方がよいはず。

インストーラー無しのものが一番だと思う。良く分からなかったので、インストーラー付きでセットアップしたけど。

image セットアップが完了すると
C:\Program Files\MySQL\MySQL Connector Net 5.1.7\Binaries\.NET 2.0

配下にMySql.Data.dllがあるのでこれをコピー

image 参照設定の追加で、MySql.Data.dllを指定。
image こんな感じにする。

CEでMySQL

MySQLの調べものをしているうちにこんなページを発見。

http://dev.mysql.com/downloads/connector/net/5.1.html

Windows CEにMySQLの接続モジュールを組み込めるということか!

 

そんなことより、ODBC5.1を使ってODBC経由で接続する際にCHAR SETをUTF8→SJISへ変換する方法未だに解決しない。Read options from my.cnfも効かないし(※この方法はWindows上でMySQLが稼働していれば効果があるのかも)。やはりODBC3.51なのか。

MySQL Query Browserでは正常に表示されるのに。

MySQLで1366エラー(解決)

int型のauto_incrementのフィールドに”を指定すると自動でインクリメントされた値が生成されるはずなのに、MySQLの環境によっては

1366 – Incorrect integer value

というエラーが発生していた。Windows上のMySQL5.1.34にてmy.iniの87行目あたりの

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

という行をコメントにすると正常に動作するようになる事を確認した。

あとActiveWebでもいつのころからか上記の対応をしてくれたようで、正常にClipperzが動いてる!

CuteFlowの日本語化(DB内の格納データについて)

CuteFlowを試験稼働させているが、日本語を正常に表示する為の情報はネットで見つけられたが、MySQL内のデータをphpMyAdminで見るとNucleusと同じように相変わらず化けている。もちろん、フィールドの照合順序はutf8_general_ciとなっている。

Nucleusと同じようにDB接続後に’set names utf8’とすればいいかと思ったが、その過程でset namesは使用するべきではないという、情報を見かけたので調査。MySQLは内部でUCS2という文字コードを持っていると知り勉強になった。というかUCS2って??知らない事ばかりです。

で・・・知らないなりに問題解決してみました。

1. mysql_connect()関数のリプレース

# find /var/www/html/CuteFlow -type f -exec sed -i.bakxxx ‘s/mysql_connect/mysql_connectex/g’ ‘{}’ \;

このコマンドでmysql_connect()関数がmysql_connectex()関数へ置き換えられます。書き換え前のファイルが*.bakxxxとして残ります。

※/var/www/html/あたりは自分の環境に置き換えてください。

2. mysql_connectex()関数の追加

/config/config.inc.php へ下記の関数を追加。

	function mysql_connectex($host, $username, $pwd)
	{
		$connection = mysql_connect($host, $username, $pwd);
		mysql_set_charset('utf8');
		return $connection;
	}

3. CuteFlowへログイン

ログインできるか確認してください。真っ白になる場合は/etc/httpd/logs/error_logあたりにエラーが出てました。

4. バックアップファイルの削除

# find /var/www/html/CuteFlow -type f -name ‘*.bakxxx’ -exec rm -f {} \;

後始末として*.bakxxxを削除します。

 

この処理を実施すると、phpMyAdminから見ても、ODBCで接続しても正しく日本語が表示されるようになります。この作業を本番稼働させた後から移行する事になると冷や汗が出そうです。もしもっと良い方法があれば教えて頂けると幸いです。

 

参考サイト

Nucleusの移行

NucleusをWindowsのZendCore上で稼働させていたが、CentOS5.2へ移行してみた。するとNucleusのDB保存と復元で正常に動作したかのように見えるがphpMyAdmin上ではUTF8の日本語が文字化けしていた。

DBバックアップを圧縮しないようにし、文字コードがUTF8である事を確認した上で、CentOS5.2へインポートしたら正常に復元された。

すると今度は、Nucleus上で日本語が表示できなくなるという・・・

で、結局ここを参考にglobalfunctions.phpに手を入れる事で解決。

以下引用:

globalfunctions.php で sql_connect();
という行を探し,その後ろに
sql_query(‘set names utf8’);
と入れてみてください。

MySQLにODBCで接続できない?

Windows上でPHP+MySQL環境を作るZendCoreでは意識していなかったが、CentOS5.2上でMySQLを立ち上げてWindows端末からODBC経由で接続しようとしたら接続できない。

/etc/my.confにそれらしい設定も無い。で、調べたところMySQLのユーザーのHOST欄についてまったく理解していない事に気付く。

このHOST欄に該当しないと拒否されるという事らしい。ZendCoreの方を確認したらDefaultでroot@%というユーザーが作られていた。

MySQL5.0.27の文字コードではまる

MySQL5.0.27に格納されたNucleusのデータを抽出しようとしたら、もう何をどう触っても文字化けが直らない。本家サイトのマニュアルに今の文字コードを確認するSQL文を発見。
[SQL] SELECT character_set_name, collation_name FROM information_schema.columns WHERE table_schema = your_database_name AND table_name = your_table_name AND column_name = your_column_name; [/SQL]

character_set_name collation_name
latin1 latin1_swedish_ci

って帰ってくるじゃないですか。DBを作り直すしかない???

結局、

  • [1]Nucleusの管理画面からDBを『nucleus.dat』として保存(UTF8で保存のこと)
  • [2]Nucleus用のDBをmysqldumpでエクスポート『dbexp.dat』
  • [3]『dbexp.dat』内のlatin1をutf8へ置換
  • [4]『dbexp.dat』をDB名”Nucleus2″としてインポート
  • [5]phpAdminからNucleus2から全テーブルのデータをTruncate
  • [6]phpAdmin上で Nucleus2に対して『nucleus.dat』のファイルを実行する
  • [7]一部テーブルのCREATEが出来ない
  • [8]『nucleus.dat』のファイルからDROP TABLEとCREATE文を削除
  • [9]phpAdmin上で Nucleus2に対して『nucleus.dat』のファイルを実行する
  • [10]phpAdminから日本語が正常に表示できるか確認
  • [11]my.iniの見直し(skip-character-set-client-handshakesの設定)
  • [12]Nucleus2のDM名を今の元の差し替える

で無事復帰。MySQL5の文字コードはいろいろトラブルが多いみたいで見事に巻き込まれ。

DotNetNukeのReportモジュールでエラー

社内向けポータルサイトをDotNetNukeで構築したいと思わせるもっとも魅力的なモジュールがReportモジュールだと思います。

DBを自由に指定する事ができ、クエリ内容を出力する事ができます。ただ、SQL Serverとの接続は全く問題ないが、MySQLでは内部エラーが発生してしまう。クエリに”SELECT 1”と指定すると、正常に繋がるのに。

※MySQLのODBC Driverは5.1を使用

image

Connection Stringの欄には下記を指定。

Provider=MSDASQL;dsn={ODBC設定名};uid=user;pwd=password;

試しにMySQLを3.51にしてみると正常に処理できた。違う点といえば明示的なCHAR SETが5.1ではする場所が無い事か?
ということで、MySQL3.51を使えばDotNetNukeのReportモジュールで使用できる事が判明!