20210227のMySQLに関する記事は6件です。

C#とMySQLを接続してCRUD操作をしてみる

環境

Windous10 HOME
Visual Studio 2019 Community
MySQL 8.0

やったこと

学習のためにVisual Studio C#でMySQLのCRUD操作ができるコンソールアプリを作成する。
※CRUD → CREATE、READ、UPDATE、DELETE

参考

https://qiita.com/yuzooho/items/5d608f3b84a2037cada0
https://qiita.com/kazumi75kitty/items/9953bb84edd7717bc90a
https://mikeda.hatenablog.com/entry/20090419/1240123566

上記を参考にさせていただきました。
ありがとうございます。

環境設定

  1. 「新しいプロジェクトの作成」からコンソールアプリ(.NET Framework)を選択して作成します。
    ※この時「C#」「Windows」「コンソール」と書かれている方選ばないと後々MySQLと接続できなくなります。

スクリーンショット (4).png

  1. 「参照」を右クリックして「参照の追加」を選択します。

スクリーンショット (8).png

参照マネージャーの検索でMySQLと入力して「MySql.data」にチェックして「OK」を選択する。

スクリーンショット (9).png

  1. MySQLのコマンドを起動してデータベース「test_database」を作成します。
MySQL
CREATE DATABASE test_database;

「test_database」が作成されているか確認します。

MySQL
SHOW DATABASES;

スクリーンショット (7).png

「test_database」が作成されました。

コードを記述

  1. CRUD操作を行うコードを記述していきます。
Program.cs
using System;
using MySql.Data.MySqlClient;// MySQLを使用


namespace MySQLテスト
{
    class Program
    {

        // MySQLへの接続情報
        private static readonly string server = "localhost";
        private static readonly string database = "test_database";//使用するデータベース
        private static readonly string user = "root";//ユーザー名
        private static readonly string pass = "password";//インストール時に設定したパスワード
        private static readonly string charset = "utf8";

        // MySQLへの接続
        private static readonly string connectionString = string.Format("Server={0};Database={1};Uid={2};Pwd={3};Charset={4}", server, database, user, pass, charset);

        // テーブル作成SQL
        private static readonly string MysqlTable = "test_table";//テーブル名
        private static readonly string CreateTableSql = "CREATE TABLE IF NOT EXISTS " + database + "." + MysqlTable + "(id int, name varchar(32), address varchar(32))";

        //データ挿入SQL
        private static readonly string InsertData = "(1, 'Tarou', 'Shinjuku'), (2, 'Hiroshi', 'Shibuya'), (3, 'Yumi', 'Setagaya'), (4, 'miku', 'Chiyoda')";//挿入するデータ
        private static readonly string InsertTableSql = "INSERT INTO " + MysqlTable + " (id, name, address) VALUES " + InsertData;

        //データ抽出用SQL
        private static readonly string SelectSql = "SELECT * FROM " + MysqlTable;//全てのカラムのデータを出力

        //データ更新用SQL
        private static readonly string UpdateSql = "UPDATE " + MysqlTable + " SET address = 'Meguro' WHERE name = 'Hiroshi'";//「Hiroshi」のaddressを「Meguro」に変更

        //データ削除用SQL
        private static readonly string DeleteSql = "DELETE FROM " + MysqlTable + " WHERE id = 4";//「id」が4のレコードを削除


        static void Main(string[] args)
        {
            try
            {
                // コネクションオブジェクトとコマンドオブジェクトの生成
                using (var connection = new MySqlConnection(connectionString))
                using (var command = new MySqlCommand())
                {
                    // コネクションオープン
                    connection.Open();


                    // テーブル作成SQLを実行
                    command.Connection = connection;
                    command.CommandText = CreateTableSql;
                    Console.WriteLine("テーブル「" + MysqlTable + "」を作成しました");
                    command.ExecuteNonQuery();
                    Console.WriteLine("続行するには何かキーを押してください");
                    Console.ReadKey();


                    // データ挿入用SQLを実行
                    command.Connection = connection;
                    command.CommandText = InsertTableSql;
                    Console.WriteLine("テーブル「" + MysqlTable + "」にデータ「" + InsertData + "」を挿入しました");
                    command.ExecuteNonQuery();
                    Console.WriteLine("続行するには何かキーを押してください");
                    Console.ReadKey();


                    // データ抽出SQLを実行
                    command.Connection = connection;
                    command.CommandText = SelectSql;
                    Console.WriteLine("テーブル「" + MysqlTable + "」のデータを出力します");

                    //カラム名を出力
                    MySqlDataReader reader = command.ExecuteReader();

                    string[] column = new string[reader.FieldCount];
                    for (int i = 0; i < reader.FieldCount; i++)
                        column[i] = reader.GetName(i);
                    Console.WriteLine(string.Join("\t", column));

                    //テーブルのデータを出力
                    while (reader.Read())
                    {
                        string[] row = new string[reader.FieldCount];
                        for (int i = 0; i < reader.FieldCount; i++)
                            row[i] = reader.GetString(i);
                        Console.WriteLine(string.Join("\t", row));
                    }
                    reader.Close();
                    Console.WriteLine("続行するには何かキーを押してください");
                    Console.ReadKey();


                    //データ更新SQL
                    command.Connection = connection;
                    command.CommandText = UpdateSql;
                    Console.WriteLine("ひろしの住所を目黒に変更しました");
                    command.ExecuteNonQuery();
                    Console.WriteLine("続行するには何かキーを押してください");
                    Console.ReadKey();


                    //データ削除SQL
                    command.Connection = connection;
                    command.CommandText = DeleteSql;
                    Console.WriteLine("idが4のデータを削除しました");
                    command.ExecuteNonQuery();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            Console.ReadKey();
        }
    }
}

テーブル作成、データ挿入・抽出・更新・削除をキー入力で進めるプログラムです。

MySQLを確認しながら実行していく

MySQLのコマンドで確認しながら実行していきます。
Visual Studioで「デバッグ」から「デバッグなしで開始」を選択します。

無題.png

実行するとテーブル「test_table」が作成されます。
MySQLで確認します。

MySQL
USE test_database;

「test_database」にデータベースを切り替えます。

MySQL
SHOW TABLES;

スクリーンショット (11).png

「test_table」が作成されました。
コンソールに戻って進めます。

スクリーンショット (15).png

データが挿入されます。
MySQLで確認します。

MySQL
SELECT * FROM test_table;

スクリーンショット (16).png

挿入されました。
コンソールに戻って進めます。

スクリーンショット (12).png

テーブルのデータを出力しました。
先ほどMySQLで確認したデータと同じです。
このまま進めます。

スクリーンショット (13).png

「Hiroshi」の「address」が「Meguro」に変更されているか確認します

スクリーンショット (17).png

変更されました。
コンソールに戻って進めます。

スクリーンショット (14).png

id = 4のレコードが削除されているか確認します。

スクリーンショット (18).png

削除されてます。

感想

今回はC#でMySQLを操作する基本を学びました。
確認しながら操作することで直感的に理解できたと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

phpMyAdmin�にアクセス拒否された時の対処法(を探してます)

phpMyAdminアクセスエラーに苦戦

プログラミング初心者なので、Udemyでphp/MySQL講座を学習中にphpMyAdminにアクセスを試みたところ、アクセス拒否、色々と対策を探した道のりをメモせず場当たり的になってしまっていたので、再度メモしながらやりたいと思います。

なお、本日時点(2021年2月27日)で対処方法が分からないので、実況中継的に更新していきます。

これ何?(HY000/1045) : Access denied

対処法を探しているところなので、タイムリーにメモをアップロードしていきます。
同じ処理を繰り返して無限ループしないように、ログとして。
早く解決したい。

あまり関係ないですが、Udemyで「PHP+MySQL(MariaDB) Webサーバーサイドプログラミング入門」を学習中に躓き、解決できない状態ですでに2日かけてしまってます。
(「39.MySQLを使ってみよう」の中でphpMyAdminにアクセスが必要になりました。)

環境

MacBook Pro (13-inch, 2017)
macOS Big Sur (Version11.1)
Homebrew 3.0.2
MySQL 8.0.23
MAMP6.3 ※アプリはProではなく無料版を使用
VScode 1.53.2

エラー発生の順序

一連のアプリはインストール済みです。

1.MAMPアプリを起動し、「WebStart」からMAMP公式サイトに移動
2.MAMP公式サイト MySQLを展開
3.You can administer your MySQL databases with phpMyAdmin(リンク)からphpMyAdminを開く
4.エラー発生

エラー@phpMyAdminリンク先ページ.
Error
MySQL said:Documentation

Cannot connect: invalid settings.
mysqli_real_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: YES)
phpMyAdmin tried to connect to the MySQL server, and the server rejected the connection. You should check the host, username and password in your configuration and make sure that they correspond to the information given by the administrator of the MySQL server.

学習が全く進まなくて困ったので、ググりながら一つ一つ原因っぽいものを確認し、潰していきます。

原因と対策

原因候補1.MySQLが起動していない?もしくは起動できない?

ターミナルからMySQLを起動してみます。

terminal.
-> % mysql -u root -p
Enter password: 

問題なく起動できた。

結果.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 42
Server version: 8.0.23 

原因候補2.パスワードが間違ってる?

一つ一つ手順を追っていきます。

①MySQLユーザーを確認

MySQL.terminal
>mysql SELECT Host, User FROM mysql.user;
+-----------+------------------+
| Host      | User             |
+-----------+------------------+
| localhost | ***              |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | root             |
+-----------+------------------+
5 rows in set (0.00 sec)

②パスワードかけてたかな、、mysql.userのパスワードハッシュを取得

MySQL.terminal
mysql> SELECT Host, User, authentication_string FROM mysql.user;

結果にauthentication_stringカラムが追加され、
パスワードがしっかりかかってル事がわかりました。
パスワード変更などしていないので、phpMyAdminにはまだログインできず。

③権限がどうなってるのか、一応確認してみる

MySQL.terminal
SHOW GRANTS FOR root@localhost;

全権限がroot@localhostにありそうなことはわかりました。たぶん。
ただ、これも設定を何も変更していないのでログインできず。

*パスワードハッシュ:ユーザーごとに設定してあるパスワードにハッシュ関数を適用してハッシュ値にしたものになります。

原因候補3.なぜかMAMP記載のパスワードがrootになってる

root@localhostには別のパスワードを設定しているはずだけど、MAMP公式サイトではパスワードがrootになっている。これは何かおかしそうなのでとにかく変更してみる。

パスワードを変更するにはconfig.inc.phpというファイルにアクセスする必要があるようです。

①config.inc.phpを探す

このパス/Applications/MAMP/bin/phpMyAdmin/config.inc.phpで辿り着けました。

②パスワード変更

ファイルを開いて、パスワードの記載箇所を検索(Command+F)passwordと入力すると、ありました、僕の場合は中身を何もいじっていないファイルの92行目に見つかりました。

config.inc.php
$cfg['Servers'][$i]['password']      = 'root';   

やっぱrootになっとるやんけ・・・
ということで早速変更してみよう。アクセスできるかな。
上記のrootをroot@localhostのパスワードに変更します。

③MAMPサイトからphpMyAdminにリトライ

あれ?
MAMPサイトから↓が消えて、
”You can administer your MySQL databases with phpMyAdmin(リンク)"

代わりに↓が表示され、リンクすらなくなってしまった。MySQLは確かに動いてるのになぜ?
"You can administer your MySQL databases with phpMyAdmin (MySQL server not running)."

④一旦MySQLを停止して、phpMyAdminに再アクセスしてみる

パスワードをrootに戻し、

config.inc.php
$cfg['Servers'][$i]['password']      = 'root';   

ターミナルからbrewコマンドでMySQLを停止

terminal.
% brew services stop mysql@5.7

この状態では、MAMPページにリンク表示されるものの、リンク先は変わらず(HY000/1045) : Access deniedが表示されている。

⑤試しにMySQLを停止したまま、パスワードだけを変えてトライしてみる

再度↓のパスワード('root')をroot@localhostのパスワードに変更し、

config.inc.php
$cfg['Servers'][$i]['password']      = 'root';   

MAMPサイトをみてみると、↓のリンクがちゃんと出ている!!
You can administer your MySQL databases with phpMyAdmin(リンク)
ということで、無事にphpMyAdminにアクセスできました!!

無事、アクセスできました。

phpMyAdminの使い方はまだわかりませんが、ようやく進められます!
原因は分からず、、、ですが、対策はMySQL停止→パスワード変更→アクセスという手順を踏んで、アクセスできました。
根本的な原因解決ができていないので心配ですが、とりあえず進められそうで・・・
ほんとよかったわ。

↑では、解決してませんでした。

原因候補③の対策後、設定を変えずにMAMPサイトに戻ったところ、アクセスリンクが消えていて再アクセスできない状態になっていました。

これ↓が、
You can administer your MySQL databases with phpMyAdmin(リンク)
こう。↓
"You can administer your MySQL databases with phpMyAdmin (MySQL server not running)."

また原因と対策探しをしていきたいと思います。

続・原因と対策

原因候補4。また追記します。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

データベースのリネーム

現在、userテーブルとmessageテーブルの二つのテーブルがあるdatabase_oneというデータベースがあるとする。
このデータベースの名前を、database_newに変更したい。

1.新しいデータベースを作る

create database database_new;

2.テーブルごとに改名する

今回はuserとmessageテーブルのみなので二回行う。

rename table database_one.user to database_new.user;
rename table database_one.message to database_new.message;
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【AWS】EC2インスタンスで作成したLaravelとRDS(MySQL)を連携させる方法

今回はAWSのRDS(MySQL)についてい書いていきます。

AWSにもDockerにも段々慣れてきたのですが、まだまだ知らない機能の方が多いですね。

さて、早速説明していきましょう。

はじめに

まず初めに前提条件として以下の条件を満たしている前提で話を進めめていきます。

・ECSで既にLaravelに関するコンテナの環境が構築済み
・EC2インスタンスへのSSH接続が可能

上記2つの条件を満たしていな場合は下記の記事にすべてやり方が書いてあるので是非ご覧ください!

【AWS】AWS超初心者が、頑張ってDockerで作ったLaravelプロジェクトをECR、ECS、EC2を使ってAWS上で動かしてみた

RDSでMySQLのデータベースを作成

サービス検索欄から「RDS」と検索してください。

そして、「データベースの作成」をクリック。

するとこのような画面になると思います。

image.png

そしたら以下の条件を元にデータベースを作成してください。

データベースの作成方法 標準作成
エンジンのオプション MySQL
バージョン 任意(大体8.*か5.7)
テンプレート 本番稼働用
DBクラスター識別子 database-1
マスターユーザー名・マスターパスワード 任意
Virtual Private Cloud (VPC) 利用するEC2インスタンスと同じVPCを選択
パブリックアクセス可能 あり
VPCセキュリティグループ 既存の選択
追加設定 最初のデータベース名(ローカル環境で使っていたデータベース名を入れるところ)

注意すべきポイントを2つ解説します。

1つ目は「Virtual Private Cloud (VPC)」です。
これは、書いてる通りEC2インスタンスと同じVPCを必ず選択してください。選択しないとEC2インスタンスへSSH接続したときにMySQLへアクセスできないのでくれぐれもご注意を。

2つ目は追加設定の「最初のデータベース名」です。
「DBクラスター識別子」ではdatabase-1と設定しましたが、これとは全く別物です。
例えばローカル環境でexample_databaseという名前のデータベースを利用していた場合は、example_databaseを「DBクラスター識別子」ではなく、「最初のデータベース名」に書いて下さい。

また、ローカルでのデータベース名と本番環境用のデータベース名を分けたい場合でも「最初のデータベース名」に入力してください。

「データベースの作成」をクリックし、しばらくするとデータベースが作成されます。

SSH接続でMySQLのアクセス確認

次に、EC2インスタンスにSSH接続を行いMySQLへアクセスしてみます。

その前に先ほど作成したデータベースの画面へ行ってください。

image.png

「セキュリティ」の「VPCセキュリティグループ」をクリックしてください(sg-から始まるもの)

※注意 「ネットワーク」のVPCではございませんのでご注意を。

そしたらインバウンドルールの編集を行います。

SSH接続でMySQLにアクセスするために、利用するEC2インスタンスの「プライベート IPv4 アドレス」をコピーして、「すべてのトラフィック」で「IPv4アドレス/32」として追加してください。

例:10.0.0.0/32

また、LaravelからもMySQLのデータベースにアクセスできるようにタイプで「MYSQL/Aurora」を選んで「0.0.0.0/0」もしくはALBのセキュリティグループを選んでください。

そしてルールを保存してください。

これでSSH接続でMySQLにアクセスが可能になり、Laravelからもデータベースにアクセスすることができます。

試しにSSH接続でMySQLにアクセスしてみましょう!

ssh -i "C:~\zaemonia-ec2-key.pem" ec2-user@ec2-xxx.ap-northeast-1.compute.amazonaws.com
mysql -u{マスターユーザー名} -p -h{MySQLのエンドポイント}
Enter password:{マスターパスワード}
#パスワード入力は文字が出力されないのでコピペするのが良いかと

無事MySQLにアクセス出来たら成功です!

これでアクセスできない場合は以下の事項を再確認してください。

・マスターユーザー名、マスターパスワード
・セキュリティグループのインバウンドルール

これら2つがしっかりと合っていれば必ずアクセスできます。

諦めずに頑張りましょう!!

以上、「【AWS】EC2インスタンスで作成したLaravelとRDS(MySQL)を連携させる方法」でした!

良ければ、LGTM、コメントお願いします。

また、何か間違っていることがあればご指摘頂けると幸いです。

他にも初心者さん向けに記事を投稿しているので、時間があれば他の記事も見て下さい!!

あと、最近「ココナラ」で環境構築のお手伝いをするサービスを始めました。

気になる方はぜひ一度ご相談ください!

Thank you for reading

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ローカル 環境開発 Ruby on Railsの環境構築方法

はじめに

ローカル環境でRailsの環境構築ができるようになり、http://localhost:3000/で以下の表示がされるとゴールです。
初めて、ローカル環境で構築しましたので、その方法を記載します。
スクリーンショット 2021-02-27 11.08.49.png

到達点

以下の1点を達成する
・http://localhost:3000/ で上記の図を表示する

仕様

初期仕様
・mac
・Ruby(2.6.3)

今回インストールするバージョン
・Ruby on Rails (6.1.1)
・MySQL (8.0.23)
・Homebrew (2.7.6)

流れ

① Homebrewインストール
② bundlerインストール
③ MySQLインストール
④ railsインストール
⑤ アプリケーションの新規作成
⑥ サーバー立ち上げ

① Homebrewインストール

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

ターミナルで上記のコマンドでHomebrewインストールをします.

brew -v

インストールされたか確認します

② bundlerインストール

gem install bundler

ターミナルで上記のコマンドでbundlerをインストールします

③ MySQLインストール

brew install mysql

ターミナルで上記のコマンドでMySQLをインストールします

brew info mysql

インストールされたか、バージョンも含め確認します

MySQLの自動起動設定

brew services start mysql

このコマンドでmacが再起動すると、自動的にSQLが再起動されます

MySQLパスワード設定

MySQLはHomebrewでインストールすると、パスワードなしでしようできるため、
パスワードありにしたい場合、下記のコマンドをします

mysql_secure_installation


④ railsインストール

gem install rails

ターミナルで上記のコマンドでRailsをインストールします

rails -v

インストールされたか、バージョンも含め確認します

⑤ アプリケーションの新規作成

rails new app -d mysql

rails new app  *これでもできるかも

railsはmysqlがデフォルトでないため、-d mysqlを使いましたが必要ないかもしれません。
このコマンドで、アプリケーションの新規フォルダを作成します。
数分かかります。

⑥ サーバー立ち上げ

cd app

rails db:create  *データベースがないとエラーになりました

rails s

appフォルダに移動し,サーバーを立ち上げます。
http://localhost:3000/に以下の画面が表示されれば、成功です!!
スクリーンショット 2021-02-27 11.08.49.png

参考記事

VS codeの初期設定とRuby on Railsの環境設定 環境構築
ActiveRecord::NoDatabaseError: Unknown database 'アプリ名_development' 解決策

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ローカル環境開発 Ruby on Railsの環境構築方法

はじめに

ローカル環境で、Railsの環境構築ができるようになり、http://localhost:3000/のurlから以下の表示がされるとゴールです。
初めて、ローカル環境で構築しましたので、その方法を記載します。
スクリーンショット 2021-02-27 11.08.49.png

到達点

以下の1点を達成する
・http://localhost:3000/ で上記の図を表示する

仕様

初期仕様
・mac
・Ruby(2.6.3)

今回インストールするバージョン
・Ruby on Rails (6.1.1)
・MySQL (8.0.23)
・Homebrew (2.7.6)

流れ

① Homebrewインストール
② bundlerインストール
③ MySQLインストール
④ railsインストール
⑤ アプリケーションの新規作成
⑥ サーバー立ち上げ

① Homebrewインストール

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

ターミナルで上記のコマンドでHomebrewインストールをします.

$ brew -v

インストールされたか確認します

② bundlerインストール

$ gem install bundler

ターミナルで上記のコマンドでbundlerをインストールします

③ MySQLインストール

$ brew install mysql

ターミナルで上記のコマンドでMySQLをインストールします

$ brew info mysql

インストールされたか、バージョンも含め確認します

MySQLの自動起動設定

$ brew services start mysql

このコマンドでmacが再起動すると、自動的にSQLが再起動されます

MySQLパスワード設定

MySQLはHomebrewでインストールすると、パスワードなしでしようできるため、
パスワードありにしたい場合、下記のコマンドをします

$ mysql_secure_installation


④ railsインストール

$ gem install rails

ターミナルで上記のコマンドでRailsをインストールします

$ rails -v

インストールされたか、バージョンも含め確認します

⑤ アプリケーションの新規作成

$ rails new app -d mysql

$ rails new app  *これでもできるかも

railsはmysqlがデフォルトでないため、-d mysqlを使いましたが必要ないかもしれません。
このコマンドで、アプリケーションの新規フォルダを作成します。
数分かかります。

⑥ サーバー立ち上げ

$ cd app

$ rails db:create  *データベースがないとエラーになりました

$ rails s

appフォルダに移動し,サーバーを立ち上げます。
http://localhost:3000/に以下の画面が表示されれば、成功です!!
スクリーンショット 2021-02-27 11.08.49.png

参考記事

VS codeの初期設定とRuby on Railsの環境設定 環境構築
ActiveRecord::NoDatabaseError: Unknown database 'アプリ名_development' 解決策

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む