20211129のMySQLに関する記事は7件です。

MAMPのインストールからホームディレクトリでMySQLを起動できるまで(Macを使用)

 はじめに  今回はMAMPのインストールとMySQLをホームディレクトリで実行できるまでを一連の流れとして説明していきます。  それぞれ単体は調べれば結構簡単ですが、これを一連の流れで説明している記事が見つからなかったので自分への備忘録的な要素が強いのでそこはご容赦ください。  MAMPとは  ここにたどり着いている時点でMAMPについては知っているよって方がほとんどだと思うので超省略していきます。  MySQL,Apache,PHPを一緒にしてこれらの動作環境が構築されるようにしているのがMAMPになります。  MAMPはMacintosh,Apache,MySQL,PHPの頭文字をとったものになります。Macintosh(Macの正式名称です)とはついていますが、MAMPはWindowsでもMacでも利用可能です。今回僕はMacで進めていきます。  MySQLとは  先ほどのMAMPは知らなくてもMySQLは聞いたことはあるでしょう。MySQLはオープンソースのデータベースソフトウェアです。  これはリレーショナルデータベースを管理するシステム(RDBMS)の一つです。  リレーショナルデータベースとは一つのデータをいくつかの項目の集まりで表します。例えば1人の従業員に対してその人の「名前」「性別」「年齢」「所属部署」「住所」といういくつかの項目を集めてそれを100人に対して行って作った表はリレーショナルデータベースになります。  ただし、こういったデータベースではエクセルのようにどこでも文字列でも数値でも入れられるというわけではなく列の役割(文字列を持つのか数値を持つのか)は先に決めておく必要があります。同じようにリレーショナルデータベースを管理するシステムとしては(RDBMS)有償ではOracleやMicrosoftSQLServer、無償であればPostgreSQLやMySQLがあります。 MAMPのインストール  まずはこちらに飛んでください。こちらがMAMPのインストール画面になります。今回僕はM1MacユーザーなのでMAMP&MAMPPRO 6.6 (M1)を選択します。(6.6部分はバージョンの部分なので時期によって異なります)    選択してあげるとパッケージがダウンロードされます。  ここからは他のパッケージにもよくあるパターンと同じです。MAMPは指定しなければならないものは特にないのでcontinueが出てる場合はcontinue,agreeが出てる時はagreeを脳死で選択してればいけます。一応流れをスクショしてあるので貼るだけ貼りますね。  はい。いけましたかね。引っ掛かるところはないかなあと。一応ですが、最後の画面はFinderからAppications(僕のMacは英語表記なので日本語表記の方はアプリケーションと表示されるはずです)に飛んで中身を参照してます。  ここで、なんですが、MAMP PROはいらないので消しちゃいましょう。もしかしたら使うかもって方は残しといても問題なしです。 では、MAMPを開いてみましょう。以下のような画面になるはずです。  ここから僕の画面では一番左下に表示されている「MAMP」をクリックします。そうすると次のように表示されます。  これの右上にある緑のボタンがMAMPの起動/停止ボタンになります。緑色の時は起動している時、白色の時は停止している証拠になります。つまり、今回は起動している形です。  次はポートのお話です。ポートとはなんじゃ行って方はlocalhostの中の箱のどこ使うの、ってイメージでいいです。ポートの確認の仕方は左上のprefrencesをクリックしてPortsってとこクリックすると表示できます。デフォルトは以下のような画面になっているはずです。  port8888を利用している方はここから変更してください。  ポートを使っているかどうかわからない、という方はweb上でlocalhost:8888と実行してみてください。 その結果以下のような画面が出ればちゃんとMAMPが動いています。表示されないという方はポート番号を変更してください。  では、MySQLをターミナル上で実行してみましょう。MySQLは最初/Applications/MAMP/Library/binでないと実行できないのでcdコマンドで移動をします。  ここでMySQLを動かせるか試してみましょう。  MySQLの動かし方はmysql -u root -prootをコマンドラインで打ち込むだけです。  この画面になればmysqlが動いています。が、一応一行目のWarningだけ確認しておきます。これはパスワードをコマンドラインで実行していることに対する警告文です。どこがパスワードなのかと思われると思いますが、-pより先のroot部分がパスワードです。ここで注意が必要ですが-uのあとのrootはパスワードではなくてユーザー名になります。パスワードの変更も可能ですが今回はパスします。警告文を出さないためにはmysql -u root -pと実行して この画面になったらrootと打ち込めばさっきと同じ画面になります。  毎回毎回cdコマンドを打つのは面倒くさいのでホームディレクトリからでも実行できるようにしましょう。 まずはホームディレクトリに戻ります。(cdって打てば一発です) そこから vi .bash_profileと打ち込みます。 人によって見える画面は変わると思いますが紫色の~が縦に並んでいると思います。諸事情によりここの写真はあげられません(申し訳ない) そうしたらoと入力します。すると空行が一行できると思いますので、他にも何か書いてある方は一番下に、何も書いてない方はそのまま export PATH=$PATH:/Applications/MAMP/Library/bin と打ち込みます。打ち込んだらesc→:→wqの順番で打ち込んでEnterキーを押してください。そうするとコマンドラインに戻るはずですのでそこでsource .bash_profileと打ち込んでEnter押せばホームディレクトリからでもmysqlを動かせるようになります。  さいごに  今回はMAMPのインストールとMySQLをホームディレクトリで実行するための準備を行いました。ほんと入らない操作っちゃ操作なんですけどまあ便利に越したことはないので。 みなさんのために少しでもなれば幸いです!!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

mysqlclientインストール時のエラー

EC2とMySQLを接続させるときに出会ったエラー pip install mysqlclient 上記をしているのに,runserverすると django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module. Did you install mysqlclient? と怒られる。 解決策 sudo yum install python-devel mysql-devel sudo yum install gcc してから pip install mysqlclient するとうまくいった。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

TypeOrmでカラム単位またはテーブル単位で大文字小文字の区別をさせる方法

前提 MySQLはデフォルトだとカラムで大文字と小文字を区別しません。なので、passwordなどのカラムを作った場合 password PASSOWRD PassWord のようなものが select * from passwords where password = "PaSsWoRd" などのクエリですべてマッチしてしまいます。これを回避するには、Collationに `utf8mb4_bin'や'ascii_bin'の設定が必要です。これをTypeOrmのEntityで設定する方法を紹介します。 カラム単位で設定 ColumnOptionsにcharsetとcollationがあるので、そちらを設定します。 import { Column, Entity } from "typeorm" @Entity() export class User { @Column({ charset: "utf8mb4", collation: "utf8mb4_bin" }) username!: string @Column({ charset: "ascii", collation: "ascii_bin" }) password!: string } collationに、{charset}_binの設定をしてやると良いです。 テーブル単位(Entity単位)で設定 EntityOptionsにはcollationの設定が無いのでEngineで代用します。 import { Column, Entity } from "typeorm" @Entity({ engine: "InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin" }) export class User { @Column() username!: string // DefaultのCharset以外にする場合は、collationの設定必要 @Column({ charset: "ascii", collation: "ascii_bin" }) password!: string }
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravelでポケモン図鑑をつくってAWSでデプロイまでしてみた

※まだ執筆途中です 株式会社やどかりのカイノと申します。 アドベントカレンダーを作ってみんなに書いてください〜って言ってやってもらってる張本人です。 今年もう少しで終わりだー今年もクソお世話になりましたー! やどかり&ネッコス Advent Calendar 2021の1日目を担当させていただきます。 明日は圭ちゃんです はじめに 2020年8月に入社して2021年6月までWeb開発をやってました。 2021年の7月からAndroid開発とWeb開発の2足のワラジでやってます。 今年はエンジニアとしてだけでなくマネジメント系の仕事もかなり増えててそっちもめちゃくちゃ面白いのですがやっぱりコード書いている時間は楽しいなとこの開発をしている時に改めて思いました。 去年も似たような記事を書いたのですが以前よりはレベルアップしているなー 、というか分かったこと増えたなーと感じました。 とはいえまだまだわからないところは多いので精進していきます。 ということで学んだことの棚卸しもしながらつくりました。 使用言語 Laravel 6.20 php 7.4 ポケモン図鑑つくりました 作ったことなかったので一度作りたかったんですよね。 仕事の合間に結構急ぎで作ったので色々と雑になってます。ドメインもまだ設定してないです。 csv配布 ポケモン各種情報が入ったDBです。 これ使ってぜひみなさんもポケモンの何かアプリ作ってみてください。 クリックしたらダウンロードできます サイトはこんな感じです 一覧画面 レイアウトはテキトーです。 詳細画面 フシギダネは最初に仲間にしたポケモンなのでめちゃめちゃ覚えてるし好きですね。 種族値も取れることを知ったので徹底攻略みたいに表示してみました。 やったこと ・Laravelでコマンド作成 ・ポケモンAPIを叩く ・取得したAPIを各パラメータに入れる ・DB設計&作成 ・ポケモンごとにDBにインサート ・画面に表示 ・種族値も表示してみた ・AWSでサーバ構築してデプロイ Laravelでコマンド作成 app/Console/Commands/GetPokemonInfo.php
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

RDS ストレージの自動スケーリングの注意点

ストレージの自動スケーリング RDSのストレージ量の管理は自動スケーリングに任せっぱなしでした。 自動スケーリングの条件は 使用可能な空き領域は、割り当てられたストレージの 10% 未満です。 低ストレージ状態は 5 分以上続きます。 最後のストレージ変更、あるいはインスタンスでストレージの最適化が完了してから少なくとも 6 時間経過しています。 参考:Amazon RDS ストレージの自動スケーリングによる容量の自動管理 となっており、「最後のインスタンスでストレージの最適化が完了してから少なくとも 6 時間経過しています」が落とし穴になり得ます。 ストレージを新たに割り当てた直後に再度大量にストレージを消費した場合、スケーリングできずに"STORAGE_FULL"の状態になってしまい、動作しなくなります。 その際はこちらのドキュメントを参考に対応するしかなさそうです
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MySQL: sql_mode=only_full_group_byについて

まずはエラー文章をご覧ください。 Error: SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘dbnam.tablename.columnname’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by ローカル環境で、上記のようなエラーが出ることがあります。 これはselect文の書き方が間違っている、というようなエラーです。 SQL文に、 group by (色々) という書き方で書いてしまうと、そんな書き方は許可されてないそうです。 MySQL5.7以降は、そういうのを許可してないみたいです。 sql_mode=only_full_group_by このような機能がデフォルトでオンになっています。 なので、どうするかというとsql_modeを空っぽにしておけば良いです。 #docker-compose.yml ~~(中略)〜〜 ### MySQL ################################## mysql: image: mysql:5.7 command: --max_allowed_packet=32505856 # Set max_allowed_packet to 256M (or any other value) environment: MYSQL_ROOT_PASSWORD: xxxx MYSQL_DATABASE: xxxxxxdb MYSQL_USER: xxuser MYSQL_PASSWORD: xxxxxxxxxxxx volumes: - mysql-database:/var/lib/mysql ports: - 43306:3306 networks: - backend command: --sql_mode="" ←コレ ドッカーを落として上げてみたいなことをします。 $ docker-compose down $ docker-compose up -d コレでこのエラーは回避できます。 参考リンク: http://muchag.undo.jp/archives/3487
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MySQLで変数を便利に使ってみる

この記事はスタンバイ Advent Calendar 2021の1日目の記事です。 MySQLで変数を使用して便利だと感じた機能を書きます。 TL;DR MySQL上で変数を使用できる selectの結果を変数に使用できる MySQL上の変数とは MySQLをコンソールから操作をする際、MySQL変数を使用して、決まった作業、複雑なデータのとり方を簡単に行う事ができるようになります。 特にMySQLはWith句を使用できないので、簡易なものは変数で代替することも可能であります。 MySQL変数で出来ること・出来ないこと 出来ること 変数に任意の文字列、数字を格納することが出来る select文の結果を使って変数を格納することが出来る 出来ないこと DBセッションをまたいだ変数は宣言できない テーブルデータを配列的に持つことは出来ない 変数の使い方 最も簡単な変数宣言方法、呼び出し方です。 ### 変数の設定 mysql> set @user = "scott"; ### 変数の使い方 mysql> select @user; +-------+ | @user | +-------+ | scott | +-------+ 設定した変数は検索キーワードにも使用できます。 mysql> select * from user where name = @user; +-------+----------+ | name | password | +-------+----------+ | scott | tiger | +-------+----------+ select 文で変数を定義する 返り値が1個の場合に限り、select文の返り値を変数に指定することができます。宣言方法は2通りありますが、どちらでも同じ宣言が出来ます。 ### select文で変数の宣言。into @[変数名]で変数定義できます mysql> select password into @password from user where name = @user; (or) mysql> select @password := password from user where name = @user; mysql> select @password; +-----------+ | @password | +-----------+ | tiger | +-----------+ 日時の取り扱い(15分前、1日前、1ヶ月前など)にも便利です。時系列の履歴データを扱うときには必須と言ってもいいかもしれません。 ### 15分前、1日前、1ヶ月前を変数に追加 mysql> select @now := now() , @15min_ago := now() - interval 15 minute, @1day_age := now() - interval 1 day, @1month_ago := now() - interval 1 month; ###参照する mysql> select @15min_ago, @1day_ago, @1month_ago; +---------------------+---------------------+---------------------+ | @15min_ago | @1day_ago | @1month_ago | +---------------------+---------------------+---------------------+ | 2021-11-28 00:43:22 | 2021-11-27 00:58:22 | 2021-10-28 00:58:22 | +---------------------+---------------------+---------------------+ 上記で宣言した変数を使用することで、「現在から1日前までに修正されたレコード一覧。複数のテーブルから取得する」みたいなことが楽にできるようになります。 mysql> select * from user_data where updated_at between @now and @1day_ago; mysql> select * from user_history where updated_at between @now and @1day_ago; mysql> select * from event_history where updated_at between @now and @1day_ago; 感想 変数を使用することで実行するSQLが簡単になるので、ミスの要素が少なくなる 定型的な手順を作成しやすくなる procedureや他の言語に置き換えがやりやすくなる
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む