記事内に広告が含まれています

【ワレコDBプログラミング】C#でMySQLコマンド実行、パケット上限変更

この記事は約7分で読めます。
スポンサーリンク

ワテの場合、マニュアルも本も読まずにMySQLを勉強中なのだが、何かMySQLでの作業が必要になるたびにネットで情報を仕入れて対処している。

その場しのぎ的に対処しているので、その時には良いのだが、すぐに忘れる。

と言う事で、ワテのMySQL備忘録としてブログ記事にしておく事にした。
忘れたら、ここに来れば思い出せる。

まあ、ワテにしか役に立たないかもしれない。

スポンサーリンク
スポンサーリンク

MySQLにログオンする方法 – 二種類

以下では、MySQLにログオンする方法を二種類紹介したい。

Windows 10のDOSの画面からMySQLにログオンする

この場合は、例えば自宅パソコンからMySQLが稼働中のWinsows VPSなどにリモートデスクトップ接続している時に行う方法だ。

目的のWindows VPSに無事にリモートデスクトップ接続が出来たとして、そのWindows VPSでDOS画面を開く。

そして、以下のコマンドを実行する。

mysql -u root -p [ENTER]
Enter password:  ここにパスワードをコピペで貼り付ける。[ENTER]

これで無事にMySQLにログイン出来る。

ネット経由でリモートサーバー上のMySQLにログオン

こちらは上のコマンドと同じだが、以下に示すオプションパラメータを使ってリモート接続する。

-h  でホスト名(example.com)あるいはIPアドレス(10.10.10.10)を指定する。

-P でポートを指定しても良い。省略するとデフォルト値の 3306が使われる。

例えば自宅Windows 10パソコン上で下のコマンドを打って、IPアドレスが10.10.10.10のWindows VPS上のMySQLにログオンする。

mysql -h 10.10.10.10 -u UserName -P 3306 -p [ENTER]
Enter password:  ここにパスワードをコピペで貼り付ける。[ENTER]

これで無事にMySQLにログイン出来る。

ただし、ネット経由でのログインは事前にユーザーごとにセキュリティ設定をしておく必要がある。

そのコマンドは、思い出したらここに追加したい。

追記(2017/2/4)

【ワレコのデータベース講座】Windows VPS上のMySQLに自宅のWindows10から接続する設定

MySQLにリモート接続する設定を備忘録としてまとめた。

 

上で示したどちらの方法でも良いので、MySQLに管理者としてログオン出来れば、後は、下で紹介する各種のコマンドを実行出来る。

データベース一覧を表示

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| wordpress          |
+--------------------+
5 rows in set (0.00 sec)
mysql>

 

ユーザー名、ホストの情報を表示する

mysql> select user,host from mysql.user;
+-----------------+----------------+
| user            | host           |
+-----------------+----------------+
| myuser          | %              |
| root            | %              |
| mysql           | 10.10.10.10    |
| root            | 127.0.0.1      |
| root            | ::1            |
| root            | localhost      |
+-----------------+----------------+
6 rows in set (0.00 sec)

mysql>

表示結果の見方が良く分からん。

%    何?
::1  何?
localhostと127.0.0.1の違いはあるのか?

などの疑問があるが、別の機会に調査したい。

 

MySQLで一度に沢山のデータを書き込む

まずは、三つのカラムとその値を与えて一つのデータを書き込む。

INSERT INTO db_name.table_name
 (`column1`, `column2`, `column3`)
VALUES ("value1", "value2", "value3");

C#プログラムで試してみたが、確かにうまく言った。あるいはMySQLのWorkBenchでクエリを作成して実行しても良い。

 

では、一度に大量のデータを書き込みたい場合には、以下のようにすると行ける。

INSERT INTO db_name.table_name
 (`column1`, `column2`, `column3`)
VALUES
 ('value11' , 'value12', 'value13'),
 ('value21' , 'value22', 'value23'),
 ('value31' , 'value32', 'value33');

この例では、三つのカラムを指定して、そのカラムデータを三組与えている。

もっと沢山のデータを書き込みたい場合には、VALUESの後ろに (value, value, value) をずらずらとカンマで区切って並べれば良い。

 

では、一体全体どれくらいの長さのデータを一気に書き込めるのだろうか?

気になったので試してみた。

ワテが借りているVPSで実験した限りでは、このSQL文の文字列の長さが1Mバイトくらいの長さになると例外が出た。

パケットの上限を超えるとエラーが出る場合の対策

具体的には、C#プログラムからの書き込みで以下のエラーメッセージが出た。

Packets larger than max_allowed_packet are not allowed. 
MySql.Data.MySqlClient.MySqlException

つまりまあ、MySQLが一度に実行出来るパケットサイズの上限を超えたと言うエラーのようだ。

それなら、何らかの設定を変更すればパケット上限を変更出来るのではないのかな?と思って調べてみた。

パケット上限エラー対策1

ネット情報を調べてみたところ、my.ini あるいは ~/.my.cnf で、[mysqld]の部分に

[mysqld]
max_allowed_packet=16M

このように記述すると、サイズを増やせるらしい。

MySQL 5.5 Reference Manual

B.5.2.10 Packet Too Large

 

パケット上限エラー対策2

あるいは、この情報によるとプログラムの中でサイズを増やせるらしい。

MySqlBackup.NET – MySQL Backup Solution for C#, VB.NET, ASP.NET

Frequently Asked Questions (FAQ) – Commonly … – MySqlBackup.NET

 

using (MySqlConnection conn = new MySqlConnection(connectionString))
{
    using (MySqlCommand cmd = new MySqlCommand())
    {
        cmd.Connection = conn;
        conn.Open();

        cmd.CommandText = "SET GLOBAL max_allowed_packet=32*1024*1024;";
        cmd.ExecuteNonQuery();

        // Close and Reopen the Connection
        conn.Close();
        conn.Open();

        // Start to take effect here...
        // Do something....

        conn.Close();
    }
}

このように cmd.CommandText に、”SET GLOBAL … ” などと言う設定の文字列を与える事が出来るようだ。

今度試してみたい。

 

今日はこれくらいにしておこう。

続く。

 

アマゾンでSQL関連本を読む

何だか難しそうな本だ。ワテにはハードルが高い感じ。

スポンサーリンク
コメント募集

この記事に関して何か質問とか補足など有りましたら、このページ下部にあるコメント欄からお知らせ下さい。

C#MySQL
スポンサーリンク
シェアする
warekoをフォローする
スポンサーリンク

コメント