MySQL 文字コードあれこれ
実家からたまに荷物が送られてくる。特に好きだって言ってないのに、うなぎボーンが毎回入ってる。
MySQLのsqlファイルを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はある....けど、とりあえずはこれで。
久々に時間かかった。
【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ファイルを作成
プロジェクト上で右クリック→実行→mavenbuild(二つあるうちの下を選択)
Goalに「package」と入力し、Run!
しばらくして、targetフォルダ下にjarファイルが作成されている。
2.仮想マシンに設置してみよう
仮想マシンで用意すること
- OpenJDK をインストールして、javaコマンドが実行できるようにする。
- アプリケーションを実行するユーザーを作成する。
- 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
これでアクセスしてみる。
出た~。
おまけに、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
Docker
・プログラム言語
サーバーサイド
フロントエンド
html
SpringMVC , Boot
CakePHPかララベル
データベース
ポスグレ(できれば)
Azure,Java,Spring,mySQL,javascriptは重点的に学びたい。まずこの区分があってるかどうかもわからなくて不安です。自分の立ち位置も不明瞭.....