さて、MySQL Workbench から SSH ポートフォワーディングでラズパイの MySQL へ接続できることが分かったが、じゃあ独自の C# プログラムから接続する場合はどうするのか?という問題がある。
この場合、workbench が立ててくれていた ssh を自前で建てることになる。いくつか方法があるのだけど(Putty や Tera Term で建てることもできる)、今だと Ubuntu on Windows を使って ssh を立ててしまったほうが早いみたい。
左にある緑色の SSH を自前で建てることになる。
1 | ssh -L 19000:localhost:3306 pi@raspi3.local |
ちょっと順番がややこしいのだけど、MySQL Workbench の設定に合わせると、
- SSH Hostname: raspi3.local
- SSH Username: pi
- MySQL Hostname: localhost
となる、自前で建てる SSH のポート番号は 19000 番になるので、localhost:19000 に接続すると、raspi3.local:3306 へ接続したのと同じことになる。
この 19000番に使って MySQL workbench から接続することもできる。当然、Ubuntu on Windows の画面を閉じると SSH が止まるので、このウィンドウは立ち上げっぱなしにする。
ポートフォワードを使って MySQL へ接続する
LINQを使ってMySQLにアクセスする | Moonmile Solutions Blog http://www.moonmile.net/blog/archives/9093
.NET Core上でLINQを使ってMySQLにアクセスする | Moonmile Solutions Blog http://www.moonmile.net/blog/archives/9102
ローカルな MySQL に接続する場合のプログラムで接続文字列を変えればよい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public partial class RedmineEntities : DbContext { public RedmineEntities() { } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { base .OnConfiguring(optionsBuilder); optionsBuilder.UseMySQL( @"server=localhost;user id=redmine;password=redmine;database=redmine;port=19000;sslmode=None" ); } public DbSet<projects> projects { get ; set ; } public DbSet<issues> issues { get ; set ; } } |
ポート番号をフォワードしている 19000 に変える。
.NET Core 版だとこんな感じに実行ができる。
WPF 版の場合は、app.config に接続文字列が書いてあるだろうから、そこを直接書き替える。EF のデザイナも使えるので便利だろう。
1 2 3 | < connectionStrings > < add name = "RedmineEntities" connectionString = "server=localhost;user id=redmine;password=redmine;database=redmine;port=19000;sslmode=None" providerName = "MySql.Data.MySqlClient" /> </ connectionStrings > |