たぬき君、廊下に立っとれ

忘れることなかれ。学んだことと感謝とあれこれ

MySQL 文字コードあれこれ

実家からたまに荷物が送られてくる。特に好きだって言ってないのに、うなぎボーンが毎回入ってる。

 

MySQLsqlファイルをEC2のmysqlにリストアしようとすると....

 

Unknown collation: 'utf8mb4_0900_ai_ci'

 

コイツコイツ。なかなか直らない。キレそう。

 

 

文字コード確認してmy.cnfを直してみる。

mysql> SHOW VARIABLES LIKE '%char%'; で文字コードを見てmy.cnfに

 

    [mysqld]
character_set_server=utf8mb4
collation_server=utf8mb4_unicode_ci

↑を追加。そして再び↓のコマンド

    mysql>  SHOW VARIABLES LIKE '%char%';
+--------------------------------------+----------------------------+
| Variable_name                        | Value                      |
+--------------------------------------+----------------------------+
| character_set_client                 | utf8                       |
| character_set_connection             | utf8                       |
| character_set_database               | utf8mb4                    |
| character_set_filesystem             | binary                     |
| character_set_results                | utf8                       |
| character_set_server                 | utf8mb4                    |
| character_set_system                 | utf8                       |
| character_sets_dir                   | /usr/share/mysql/charsets/ |
| validate_password_special_char_count | 1                          |
+--------------------------------------+----------------------------+

再びリストア

    mysql -u root -p リストアdb < dump.sql
Enter password:
ERROR 1273 (HY000) at line 25: Unknown collation: 'utf8mb4_0900_ai_ci'

またダメだった!

 

SQLファイルの中の

COLLATE=utf8mb4_0900_ai_ci; を

COLLATE=COLLATE=utf8mb4_general_ci に変更。

 

$ mysql -u root -p リストアdb < dump.sql
Enter password:パスワード入力
$ 

エラーなし!DB確認したらテーブル作られてた....とりあえずはよかった。

 

Collationってなんぞ。

MySQL文字コードのほかにソート順を持っていて、ソート順のことをCollationと呼ぶのだ。

比較するときには文字コードだけでなくてCollationが一致するかどうかを比較するらしい。

だから一致しないとjoinとかwhereでエラーが出たり、あいまい検索の結果が違ったりする。

今回のutf8mb4_general_ciは

アルファベットの大文字小文字は区別しない。他はすべて区別する....というCollation.

 

他にもCollationはある....けど、とりあえずはこれで。

久々に時間かかった。

 

 

MySQLのダンプ、リストア備忘録

MySQLのダンプ、リストア備忘録。最近東京03の公式YouTubeばっか見てる。

 

ダンプコマンド

mysqldump -u root DBname > dump.sql

 

Windowsの場合はMySQLコマンドラインクライアントからではなく、コマンドプロンプトからでなければエラーになる。

 

 

 

 

ダンプ先指定する場合

mysqldump -u root DBname > /mnt/sdd/tmp/dump.sql

リストアコマンド

mysql -u username -ppassword -D RestoreしたいDBname < dump.sql

 

 

 

 

 

 

 

 

【java】SpringBootアプリケーションをjarでデプロイする備忘録

SpringBootアプリケーションを仮想マシン(EC2)にjarでデプロイしてみます。

 

SpringBootはサーブレットコンテナ(tomcatなど)の構築が不要らしい。組み込まれているらしい。便利らしい。

 

1.STSでjarファイルを作成

まずはpom.xmlの記述追加

1.<packaging>jar</packaging>を追加。Mavanでビルドするときにゴールに指定するため。

 

2.実行可能なjarを生成するためにspring-boot-maven-pluginに

<plugin>

 <groupId>org.springframework.boot</groupId>

 <artifactId>spring-boot-maven-plugin</artifactId>

 <configuration> 

  <executable>true</executable> 

 </configuration>

</plugin>

を追加。

 jarファイルを作成

f:id:asagao13a:20191124231811p:plain

プロジェクト上で右クリック→実行→mavenbuild(二つあるうちの下を選択)

f:id:asagao13a:20191124232046p:plain

Goalに「package」と入力し、Run!

しばらくして、targetフォルダ下にjarファイルが作成されている。

2.仮想マシンに設置してみよう

仮想マシンで用意すること

  1. OpenJDK をインストールして、javaコマンドが実行できるようにする。
  2. アプリケーションを実行するユーザーを作成する。
  3. SpringBootアプリケーションを実行するサービスを作成する。

WinSCPなどでローカルで生成したjarファイルを仮想マシンに転送しておく

 

※途中でmyapp.jarにリネームしてます。

   
openjdkをインストール
# sudo yum install java-1.8.0-openjdk
アプリ起動ユーザーを作成
# useradd myappuser
アプリ用に任意のディレクトリを作成する。
# mkdir /usr/local/bin/myapp
ファイルの所有者を変更
# chown myappusr.myappusr /usr/local/bin/myapp
アプリ用ディレクトリにjarファイルを移動
# mv /tmp/myapp.jar /usr/local/bin/myapp/
権限を変更(ここがよくわからなかった)
# chmod 500 /usr/local/bin/myapp/myapp.jar
deamon起動のため/etc/init.d/に登録
# ln -s /usr/local/bin/myapp/myapp.jar /etc/init.d/myapp
自動起動のためchkconfigに登録
# chkconfig --add myapp
起動
# service myapp start

ここまできたら、とりあえず一回画面にアクセスしてみる。いろいろなサイトを参考にさせてもらって非常にありがたいが、画面アクセスまで画像で解説してくれているトコがあまりないような気がする....ワガママですな。

http://仮想マシンのパブリックIP:8080 

これでアクセスしてみる。

f:id:asagao13a:20191124231128p:plain

出た~。

おまけに、javaコマンドでも起動してみよう。

    jarファイルのあるディレクトリで下記コマンド
    #java -jar myapp.jar
     .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.8.RELEASE)

2019-11-24 13:38:54.968  INFO 6104 --- [           main] com.example.demo.DemoAp                                                                                                             plication         : Starting DemoApplication v0.0.1-SNAPSHOT on ip-172-31-10-233                                                                                                             .us-east-2.compute.internal with PID 6104 (/usr/local/bin/myapp/myapp.jar starte                                                                                                             d by myappusr in /usr/local/bin/myapp)
2019-11-24 13:38:54.977  INFO 6104 --- [           main] com.example.demo.DemoAp                                                                                                             plication         : No active profile set, falling back to default profiles: def                                                                                                             ault
2019-11-24 13:38:58.177  INFO 6104 --- [           main] o.s.b.w.embedded.tomcat                                                                                                             .TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2019-11-24 13:38:58.253  INFO 6104 --- [           main] o.apache.catalina.core.                                                                                                             StandardService   : Starting service [Tomcat]
2019-11-24 13:38:58.261  INFO 6104 --- [           main] org.apache.catalina.cor                                                                                                             e.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.24]
2019-11-24 13:38:58.562  INFO 6104 --- [           main] o.a.c.c.C.[Tomcat].[loc                                                                                                             alhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-11-24 13:38:58.562  INFO 6104 --- [           main] o.s.web.context.Context                                                                                                             Loader            : Root WebApplicationContext: initialization completed in 3403                                                                                                              ms
2019-11-24 13:38:59.133  INFO 6104 --- [           main] o.s.s.concurrent.Thread                                                                                                             PoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2019-11-24 13:38:59.306  INFO 6104 --- [           main] o.s.b.a.w.s.WelcomePage                                                                                                             HandlerMapping    : Adding welcome page template: index
2019-11-24 13:38:59.701  INFO 6104 --- [           main] o.s.b.w.embedded.tomcat                                                                                                             .TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2019-11-24 13:38:59.705  INFO 6104 --- [           main] com.example.demo.DemoAp                                                                                                             plication         : Started DemoApplication in 5.899 seconds (JVM running for 6.                                                                                                             735)

Springおなじみの画面!...のあとに上記URLでアクセス。とりあえずここまで。

セキュリティの強化、コンフィグファイルの作成など、またやります。

【java】今更ながらMavenをインストールして使ってみる~プロジェクト作成~

 Springフレームワークを勉強するにあたってSTSを使っているが、便利すぎてどんな仕組みでプロジェクトが動いているのかわからなくなるため、備忘録としてMavenを使ってみる。

 

1.インストール

https://maven.apache.org/download.cgi

ここからダウンロードしてインストール

Mavenはインストールプログラムを実行してインストールする形ではなく、ファイルが保存されるだけ。(apache-maven-{バージョン名}という名前)

2.環境変数設定

Mavenはコマンドプログラムであるため、環境変数を設定する。

システム→詳細設定→環境変数→システム環境変数の「Path」を「編集」し、「新規」でmavenの「bin」フォルダのパスを指定してOKクリック

JAVA_HOMEの環境変数でbinのパスを指定していると起動しない。

Java\jdkまでのパスを指定する。ここで躓いたの俺だけかな?

 

コマンドプロンプトで mvn -version と入力し、バージョン情報が表示されればOK!

 

俺、これからの人生であと何回環境変数を設定するんだろうな....

 

3.プロジェクトを作る

下記コマンドでプロジェクト作成

mvn archetype:generate 

 

いろんな文字が滝のように流れた後、

Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 整数:

となるので、そのままエンター。

 

    Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
1: 1.0-alpha-1
2: 1.0-alpha-2
3: 1.0-alpha-3
4: 1.0-alpha-4
5: 1.0
6: 1.1
7: 1.3
8: 1.4
Choose a number: 8:
    

次にクイックスタートのバージョン選択。デフォルトで最新版が選択されているので、大体そのままエンター。

 

次はグループIDを決める。ここはjavaのパッケージ名をイメージして決定するといい。

 

次にアーティファクトID。これはアプリケーション名に相当するもの。

 

次にwarファイルを生成するときに付随するバージョン情報。続いてプログラムに設定されるパッケージ名の決定。

最後にエンターを入力して、下記のようになればプロジェクト生成完了!

    Define value for property 'groupId': com.myproject
Define value for property 'artifactId': myapp
Define value for property 'version' 1.0-SNAPSHOT: :
Define value for property 'package' com.myproject: :
Confirm properties configuration:
groupId: com.myproject
artifactId: myapp
version: 1.0-SNAPSHOT
package: com.myproject
 Y: :
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: maven-archetype-quickstart:1.4
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.myproject
[INFO] Parameter: artifactId, Value: myapp
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: com.myproject
[INFO] Parameter: packageInPathFormat, Value: com/myproject
[INFO] Parameter: package, Value: com.myproject
[INFO] Parameter: groupId, Value: com.myproject
[INFO] Parameter: artifactId, Value: myapp
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Project created from Archetype in dir: C:\Users\ユーザー名\Desktop\myapp
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  13:30 min
[INFO] Finished at: 2019-11-22T23:49:18+09:00
[INFO] ------------------------------------------------------------------------

 これでコマンドを実行した際のカレントディレクトリに、最も基本的なjavaプロジェクトが作成される!

 

4.コンパイル、実行

 プロジェクトのあるフォルダで

mvn compile コマンドを実行でコンパイル

これでソースコード類がコンパイルされ、クラスファイル類をまとめた[target]フォルダが作成される。

 

mvn package コマンドで....

プログラムのコンパイル、プログラム全体をパッケージにまとめる「ビルド」、関数やメソッドが機能するかをテストする「ユニットテスト」を一括実行し、targetフォルダにjarファイルが作成される!

 

 ただし、このままだとメインクラスの設定がされてないため、jarファイルが使えないらしい....

 

中途半端だけど、ここまで....

 

 

 

 

 

 

フリーランスエンジニアをなんとなく目指し始めたたぬきです。

こんばんは。今年の3月からIT業界に裸一貫で飛び込んだたぬきです。

 

文系学部卒、数学苦手、おっさん化が深刻の25歳です。最近電車で夕日を見るとわけもなく涙が出てきます。

 

どうしてIT業界に入ったのか。

 

近年(だいぶ前から?)、インターネットのそこかしこでフリーランスエンジニアになって自由を手に入れよう!....みたいな情報が増えましたね。

 

・IT未経験の飲食店社畜が1年でエンジニアになり年収~アップ!

・32歳でIT業界に未経験で入った文系卒が2年でフリーランスになって自由を手に入れた話

 

こんなこと書いてるブログが多いですよね。

 

普通の人間なら「んな甘い話ないでしょ!こんな安っぽいキャッチコピーに従うヤツ頭たぬきなんじゃねぇか?」

 

と思うことでしょう。そんな中、僕は思いました。

 

マジで!?超いいじゃんIT万歳行くしかない最高人生オッペケペー!!

 

と息巻いて未経験歓迎の会社に応募しまくりました。

 

結果、小っちゃなSESに内定もらって働いてます。

幸いなことに環境がすっごく良くて、毎日楽しく学ばせてもらってます。

 

でもね、

 

やっぱ1年でフリーランスなるとか無理だって。

 

スクールに通ってたとしても厳しくないか....?

覚えること多すぎ。楽しいけど、終わりが見えない。マジで膨大すぎてめまいがする。

 

html,javascriptとか、フロントエンド系の知識だけなら1年でもなんとかなるのか?

っても実務経験とかは?DBとかは?

 

いろいろなことに浅く手を出しすぎてるのかな?深く潜っていく必要があるのに、広~い海を漂ってる感じ....?

 

とりあえず、挫折するかもしれませんが、フリーランスエンジニアを目指します。

このブログは、学んだことを覚える&忘れないためのものです。

 

もし熟練engineerさんがこのブログを見て「全然理解してねえじゃんたぬき君」と思ったら、どうか指摘してください。キツイ口調で。

 

とりあえず、

 

クラウド・インフラ

Azure

AWS

Docker

 

・プログラム言語

サーバーサイド

java

PHP

フロントエンド

html

javascript

jQuery

 

フレームワーク

SpringMVC , Boot

CakePHPかララベル

 

データベース

MySQL

ポスグレ(できれば)

 

Azure,Java,Spring,mySQL,javascriptは重点的に学びたい。まずこの区分があってるかどうかもわからなくて不安です。自分の立ち位置も不明瞭.....