- 投稿日:2020-06-02T23:41:46+09:00
マイグレーション実行時にmysqlでユーザーを作成していなかった為エラー
マイグレーション実行時エラー
laravel7で新しくプロジェクトを作成したので
とりあえずマイグレーションの実行ししてみたらエラー発生
SQLSTATE[HY000] [1045] Access denied for user 'user_name'@'172.20.0.4' (using password: YES) (SQL: select * from information_schema.tables where table_schema =table_name and table_name = migrations and table_type = 'BASE TABLE')原因
ただ単に.envに設定したユーザーとパスワードを登録していなかっただけ
解決方法
mysqlでユーザーを作成をする
create user 'user_name' identified by 'pass';権限の確認
新規作成したユーザには
何も権限がないことを意味するUSAGEが付いているmysql> show grants for user_name@'%'; +---------------------------------------+ | Grants for phper@% | +---------------------------------------+ | GRANT USAGE ON *.* TO `user_name`@`%` | +---------------------------------------+ 1 row in set (0.00 sec)全てのDBが対象となるグローバル権限【CREATE権限】の付与
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'user_name'@'%' WITH GRANT OPTION;実行後もう一度マイグレーションを実行したら成功
- 投稿日:2020-06-02T23:19:44+09:00
【Rails・MySQL】Mac環境構築
MacのRails・MySQL環境構築について
目次
- ログインシェルの設定
- Command Line Toolsのインストール
- Homebrewのインストール・設定
- Rubyのインストール・設定
- MySQLのインストール・設定
- Railsのインストール・設定
1.ログインシェルの設定
※ OSがCatalina以降の場合、zshを利用するため、設定の確認・変更を行います。
ターミナル
# zshをデフォルトに設定 $ chsh -s /bin/zsh # ログインシェルを表示 $ echo $SHELL # 以下のように表示されれば成功 /bin/zsh
echo $SHELL
コマンドで、/bin/zsh
と表示されない場合は、
一度ターミナルを閉じて、再度開いた上でもう一度echo $SHELL
コマンドを打ってください。2.Command Line Toolsのインストール
Command Line ToolsはWebアプリケーション開発に必要なソフトウェアをダウンロードするために必要な機能となります。(コマンドでプログラムを操作するもの)
Command Line Toolsのインストール
以下のコマンドを入力します。
ターミナル
$ xcode-select --installコマンド入力後にモーダルが表示されるので以下の順に操作します。
①「インストール」をクリック
②「同意する」をクリック
③Command Line Toolsのダウンロードが始まるので、完了まで待機
④ダウンロードが完了したら、「完了」をクリック以上でCommand Line Toolsのインストールは完了となります。
3.Homebrewのインストール・設定
3-1. Homebrewのインストール
Homebrewというソフトウェア管理ツールをインストールします。
以下のコマンドを入力します。ターミナル
$ cd # ホームディレクトリに移動 $ pwd # ホームディレクトリにいるかどうか確認 $ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" # コマンドを実行※ 処理に時間がかかるので、ゆっくり待ちましょう。
途中でエンターキーの入力を求められるので入力をしましょう。ターミナル
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" # コマンドを実行 ... ... ... Pres RETURN to continue or any other key to abortまた、途中でパスワードの入力を求められますので入力をしましよう。
(パスワードを入力しても文字は表示されませんが、間違いなく入力はされています)ターミナル
Pres RETURN to continue or any other key to abort ... ... ... Password:ダウンロードが完了し、再びコマンドを入力できるようになれば成功です。
2-2. Homebrewがインストールされているか確認
以下のコマンドを入力します。
ターミナル
$ brew -v Homebrew 2.2.12 # このバージョンはインストールのタイミングで異なります3-3. Homebrewをアップデート
Homebrewを最新の状態にアップデートします。
以下のコマンドを入力します。ターミナル
$ brew update3-4. Homebrewの権限を変更
Homebrewの権限を変更します。
以下のコマンドを入力します。ターミナル
$ sudo chown -R `whoami`:admin /usr/local/bin4.Rubyのインストール・設定
4-1. rbenvとruby-buildをインストール
rbenvとruby-buildを、Homebrewを用いてインストールします。
以下のコマンドを入力します。ターミナル
$ brew install rbenv ruby-build4-2. rbenvをどこからも使用できるように設定
PCにおけるどこのディレクトリからも使用できるようにするため、
以下のコマンドを入力します。ターミナル
$ echo 'eval "$(rbenv init -)"' >> ~/.zshrczshrcというのは、設定ファイルの名称です。
(CatalinaかMojave以前の方で、設定ファイルの場所が異なるのでご注意してください)4-3. zshrcの変更を反映
設定ファイルであるzshrcを修正したので、以下のコマンドでzshrcを再読み込みし、変更を反映させます。
以下のコマンドを入力します。ターミナル
$ source ~/.zshrc4-4. readlineをinstall
ターミナルのirb上で日本語入力を可能にする設定を行うためにインストールします。
以下のコマンドを入力します。ターミナル
$ brew install readlineこちらについてはコマンドを実行すると、すでにインストール済みと表示されることがあります。
(特に問題はありませんので、そのまま次に進みましょう。)4-5. readlineをどこからも使用できるように設定
readlineをどこからでも使用できるようにするため、
以下のコマンドを入力します。ターミナル
$ brew link readline --force4-6. rbenvを利用してRubyをインストール
Webアプリケーション開発用のRubyをインストールします。(Rubyのversionは任意のversionを設定して下さい)
以下のコマンドを入力します。ターミナル
$ RUBY_CONFIGURE_OPTS="--with-readline-dir=$(brew --prefix readline)" $ rbenv install 2.7.1※ 処理に時間がかかるので、ゆっくり待ちましょう。(約10分くらい)
4-7. 利用するRubyのバージョンを設定
インストールしたRuby 2.7.1を使用するために、
以下のコマンドを入力します。ターミナル
$ rbenv global 2.7.1これまで使用していた、デフォルトでPCに入っていたRubyから、先ほどインストールしたRubyを使用するように切り替えることができました。
4-8. rbenvを読み込んで変更を反映
Rubyのバージョンを切り替えたので、変更を反映させます。
以下のコマンドを入力します。ターミナル
$ rbenv rehash4-9. Rubyのバージョンを確認
バージョンを切り替えることができたか、確認をします。
以下のコマンドを入力します。ターミナル
$ ruby -vRubyのバージョンが、先ほどインストールした2.7.1であることが表示されれば完了です。
5. MySQLのインストール・設定
5-1. MySQLのインストール
MySQLをインストールします。(MySQLのversionは任意のversionを設定して下さい)
以下のコマンドを入力します。ターミナル
$ brew install mysql@5.7※ 処理に時間がかかるので、ゆっくり待ちましょう。
5-2. MySQLの自動起動設定
MySQLは本来であればPC再起動のたびに起動し直す必要がありますが、それでは面倒であるため、自動に起動するように設定します。
以下のコマンドを入力します。ターミナル
$ mkdir ~/Library/LaunchAgents $ ln -sfv /usr/local/opt/mysql\@5.7/*.plist ~/Library/LaunchAgents $ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql\@5.7.plist5-3. mysqlコマンドをどこからでも実行できるように設定
rbenvやreadlineの時と同様に、どこからでもMySQLを操作するためのコマンドmysqlを実行できるように設定します。
以下のコマンドを入力します。ターミナル
# mysqlのコマンドを実行できるようにする $ echo 'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"' >> ~/.zshrc $ source ~/.zshrc # mysqlのコマンドが打てるか確認する $ which mysql # 以下のように表示されれば成功 /usr/local/opt/mysql@5.7/bin/mysql6. Railsのインストール・設定
6-1. bundlerをインストール
Rubyの拡張機能(gem)を管理するためのbundler(バンドラー)をインストールします。
以下のコマンドを入力します。ターミナル
$ gem install bundler6-2. Railsをインストール
Railsをインストールします。(Railsのversionは任意のversionを設定して下さい)
以下のコマンドを入力します。ターミナル
$ gem install rails --version='6.0.3'※ 処理に時間がかかるので、ゆっくり待ちましょう。
6-3. rbenvを再読み込み
一通り開発に必要なものはインストールできたので、以下のコマンドでrbenvを読み込んで、変更を反映させましょう。
以下のコマンドを入力します。ターミナル
$ rbenv rehash6-4. Railsが導入できたか確認
以下のコマンドを実行して、Rails 6.0.3が表示されれば問題なくインストールが完了しています。
ターミナル
$ rails -v以上で、Macでの【Rails・MySQL】の環境構築は完了です。
- 投稿日:2020-06-02T23:05:12+09:00
ERROR 1267 (HY000): Illegal mix of collationsとなった時の対応方法
- 環境 : MySQL 8.0.20
事象:変数を条件に使ったSQLを書いたファイルを実行したら怒られた
hoge.sqlSET @no = "0531"; select * from person_table WHERE person_no = @no;mysql> source hoge.sql Query OK, 0 rows affected (0.01 sec) ERROR 1267 (HY000): Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT) for operation '='原因 : 照合順序がカラムと変数で不一致だから
- 参考
対応 : 変数をSETするときに照合順序も指定する
hoge.sqlSET @no = "0531" COLLATE utf8mb4_general_ci; select * from person_table WHERE person_no = @no;
- 投稿日:2020-06-02T21:24:52+09:00
【CREATE VIEW】条件によってVIEWの表示結果を分岐する ~ case when ~
条件によってVIEWの表示結果を分岐させる書き方のサンプル集です。
環境
- OS:Windows10
- RDBMS:MySQL5.7
case whenサンプル
1. 条件によって表示結果を分岐する
合計得点に応じて、成績表記を分岐します。
テーブルとその関係性は以下の通り。
※実際にはこんなテーブルはないと思いますが、サンプルのためご容赦を。
create view score_reports as select sr.*, case when sr.total_score >= 85 then '優' when sr.total_score >= 70 then '良' when sr.total_score >= 60 then '可' else '不可' end as grade from (select st.student_name, su.subject_name, sc.score, (select sum(score) from scores group by student_id and test_month) as total_score from students st left outer join scores sc on st.student_id = sc.student_id cross join subjects su) as sr;2. 結果の有無によって表示結果を分岐する
対象が存在すれば1、なければ0を表示させます。
以下は、とあるユーザーの対象店舗に対するブックマークの有無になります。
テーブルとその関係性は以下の通り。
create view shop_informations as select si.*, case when exists (select * from bookmarks b where b.shop_id = si.shop_id and b.user_id = si.user_id) then 1 else 0 end as is_bookmarked from (select s.shop_id, s.shop_name, u.user_id from shops s cross join users u) as si;終わりに
case式を使えば、アプリケーションの実装をシンプル&わかりやすくできそうですね。
DB負荷の考慮は必要ですが、うまく使っていきたいと思います。参考
- 投稿日:2020-06-02T20:43:29+09:00
mysql: VARCHARの列幅の差と TEXT型とでINSERT性能には殆ど違いない
なにこれ (tl;dr)
mysql5.7にて、VARCHAR(10)とVARCHAR(30000)ではINSERTなどで差が出る、という話を聞いたのと、よく言われている TEXT型は遅い、という話をベンチマークしてみたら少なくともINSERTは全然差がないことがわかった、という話
ただしTEXT型は検索する場合は当然差が出て来るが、割愛。
測定用スクリプト
con = ActiveRecord::Base.connection # utf8mb4が検証環境のため 65535/4=16383 length_set = [255, 4096, 16383, :text] string_set = [250, 4090, 16380] try_count = 10000 demostr = "123456789A" raw_con = con.raw_connection Benchmark.bm 40 do |bm| length_set.each do |length| column_type = length == :text ? "text" : "varchar(#{length})" con.execute("create table length_test (str #{column_type})") insert_sql = raw_con.prepare("insert into length_test values(?)") begin string_set.each do |strlen| next if length != :text && strlen > length insertstr = demostr * (strlen / 10) bm.report "#{column_type} <-- string(#{strlen})" do try_count.times do insert_sql.execute(insertstr) end end end ensure insert_sql.close con.execute('drop table length_test') end end end結果
INSERT10000回
文字列長250 文字列長4090 文字列長16380 varchar(255) 13.229861 varchar(4096) 13.623846 18.922998 varchar(16383) 13.380692 18.426866 45.27052 text 12.739086 18.534715 46.134611 考察
- varcharの列幅による有意な違いはない
- ただし、INSERTする文字列の長さには相関関係がある(正比例ではないのもやっかい)
- text型へのINSERT性能は悪くない (繰り返しになるが SELECT では別。WHEREの対象になるとさらに遅いかもしれない)
- 現状、1レコードの総バイト数が65535を超えることが出来ない? ようなので、こんな長さの文字列を複数持つことは出来ない
- utf8mb4 だと1文字表現するのに4bytes使うので、VARCHAR(65535)とは出来ない。4でdivすることになる
- 投稿日:2020-06-02T20:20:37+09:00
【MySQL】1分おきに取得したデータから1時間おきのデータを抽出
注意事項
- 自分用の簡単なまとめであり,説明はほとんどありません.
- 内容は時間があるときに補充します.
データ例
- 元データ:1分おきの date と value
date value 2020-01-01 00:00:00 0 2020-01-01 00:01:00 1 … … 2020-01-31 23:58:00 58 2020-01-31 23:59:00 59
- 抽出データ:1時間おきの date と value
date value 2020-01-01 00:00:00 0 2020-01-01 01:00:00 0 … … 2020-01-31 22:00:00 0 2020-01-31 23:00:00 0 ※ value 値は特に意味はありませんが, date 値 の [分] に対応していると思ってください.
使用コード
SELLECT date, value FROM hogehoge GROUP BY DATE_FORMAT(date,'%Y-%m-%d %H:00:00') ORDER BY date ASC;コメント
DATE_FORMAT
によって [分] や [秒] のデータを落とし,GROUP BY
でまとめています.- [分] を指定することはできず,毎時最初のデータが取得されます.
- 投稿日:2020-06-02T19:27:42+09:00
「失敗から学ぶRDBの正しい歩き方」を読んだ
0. はじめに
こんにちは。都内でエンジニアをしている、@gkzvoiceです。
今回は、ajitofm 44: RDB The Right Wayをきっかけに、以下の本↓を読みました。何度も読み返す一冊となりそうなので、本記事が道しるべとなればいいなと思い、記事を起こすことにしました。
※「書評」というほど
私のRDBの理解力がなく、考察まで含んだ内容にはできておりません。※お時間が無い方、本書がどんな本か、チラ見されたい方は、著者の登壇資料をご参照されることをオススメします。
ajitofm 44: RDB The Right Wayhttps://t.co/91XF02Dmry
— gakuji tamaki@July Tech Festa 2020運営スタッフ (@gkzvoice) March 10, 2020
>キャッシュ中毒(笑)
正しいデータは正しい設計に宿るhttps://t.co/g4Ku6vCrqf
失敗から学ぶRDBの正しい歩き方 その1 / learn-from-failure-1https://t.co/vajPmpDaFa#ajitofm1. 本書の目次
- 第1章 データベースの迷宮
- 第2章 失われた事実
- 第3章 やり過ぎたJOIN
- 第4章 効かないINDEX
- 第5章 フラグの闇
- 第6章 ソートの依存
- 第7章 隠された状態
- 第8章 JSONの甘い罠
- 第9章 強過ぎる制約
- 第10章 転んだ後のバックアップ
- 第11章 見られないエラーログ
- 第12章 監視されないデータベース
- 第13章 知らないロック
- 第14章 ロックの功罪
- 第15章 簡単過ぎる不整合
- 第16章 キャッシュ中毒
- 第17章 複雑なクエリ
- 第18章 ノーチェンジ・コンフィグ
- 第19章 塩漬けのバージョン
- 第20章 フレームワーク依存症
2. 本書のおすすめポイント
- RDSに関連するアンチパターンを学ぶことに重きを置いている。
- 「はじめに」ではアンチパターンを学ぶ意義についてこのように解説されています。
データベースは長く付き合っていかねばならない相手であり、開発者はその特性ゆえの問題にぶつかる
ことがあります。そういった、開発の現場で実際に起こっている、発生しやすいリレーショナルデータベース(RDB)全般の問題をアンチパターンとして紹介していきます。
- 各章ごとに、構成が同じでテンポよく読みやすい。
- 起きがちなアンチパターンの紹介
- 取り上げられたアンチパターンの問題点と再発防止策を解説
- 章末にて、アンチパターンのポイントが解説されている。
これにより、読み返す際、あるいは読み始める前に自分のなかにインデックスを設けることができた。
3. 読んだ感想
- トレードオフの関係となっている手段が多く、一様にポリシーを決めて対処できるものではない。
- Amazon RDSなどマネージドサービスを使った場合、本書で取り上げられているアンチパターンはどこまで未然に防ぐことが出来るのか、また別のアンチパターンが生まれるのか気になった。
- そのような資料などをご存知の方がいらっしゃれば、コメントにてご連絡いただけるとうれしいです。
4. 章ごとに気になったこと
「第2章 失われた事実」より
- ステータスの遷移など時系列で情報を追いたい場合、その情報を上書きすることは望ましくない。
- 情報を追うことを優先しすぎると、レコードの保存量は増え、ひいてはテーブルサイズの肥大化を招く。
履歴の保存とパフォーマンスの向上はトレードオフの関係。
「第3章 やり過ぎたJOIN」より
- MYSQLとPostgresqlとでサポートしているjsonのアルゴリズムが異なるので注意。
- JSONのアルゴリズムに注意して実装する以外の方法として、そもそも別テーブルに分けることでシンプルに出来ないか考えることも。
「第4章 効かないINDEX」より
- INDEXが有効的に活用されているか
- 本問題に関連するアンチパターンとして、『SQLアンチパターン』で取り上げられている
「インデックスショットガン」
も紹介- 本問題と「インデックスショットガン」いずれも
MENTORの原則
と呼ばれる対策が有効
- Measure(測定)
- Explain(解析)
- Nominate(指名)
- Test(テスト)
- Optimize(最適化)
- Rebuild(再構築)
「第5章 フラグの闇」より
- 基本的にテーブルには状態を持たせることは避けたい。
- 削除済データが増えるとパフォーマンスが低下する。
- 削除フラグを利用したくなるケースとして、
削除したデータを検索したい
などいくつか紹介しているるが、できるだけテーブルに状態を持たせないことを推奨。「第6章 ソートの依存」より
- ORDER BY区狙い v.s. WHERE句狙い
WHERE句がINDEXを活用でき、データを十分に小さく
出来るか- INDEXから高速にデータを取得する手段としてのORDER BY句は、Redisと似ている
- Redisはデータの永続化が苦手と棲み分けが必要。
「第7章 隠された状態」より
- 1つのデータに複数の属性を付与すると、コード上、実態が見えづらくなる。
- 交差テーブルが使えないか
「第8章 JSONの甘い罠」より
- JSONデータ型のメリットとデメリット
「第9章 強過ぎる制約」より
- 制約はRDBMSとアプリケーションのうち、どちらが担うか
- アプリケーションが担うメリットはデプロイも含めて変更が容易な点
「第10章 転んだ後のバックアップ」より
- バックアップとリストアは自動化出来ないか
- Amazon RDSはそれらのアウトソース先の候補
- リストアの定期化は、チーム全体でシステムへの理解を深めることに寄与
「第11章 見られないエラーログ」より
- ログの吐き出しすぎは、「見られなくなる」一因に
「第12章 監視されないデータベース」より
- ミドルウェアの監視項目として、以下の3つを紹介
- サービスの死活監視
- 特定条件のチェック監視
- 時系列データでのメトリックス監視
「第13章 知らないロック」より
- MYSQLとPostgresqlとでロックの仕様が異なる
「第14章 ロックの功罪」より
- 4つのトランザクション分離レベル
READ UNCOMMITTED(並列度が高い)
- READ COMMITTED
- REPEATABLE READ
SERIALIZABLE(並列度が低い)
serializableは完全な直列処理になるためIsolationを担保していると言えますが、その分並列処理はできなくなります。逆に、read uncommittedはIsolationを犠牲にする代わりに並列度を高めています。
- 左記のトランザクション分離レベルと現象との関係性
出所:こわくない同時実行制御
「第15章 簡単過ぎる不整合」より
- 外部キー制約のせいでデッドロックに悩まされても安易に非正規化にしない
- 非正規化の代替案
CHECK制約
ENUM型
「第16章 キャッシュ中毒」より
- キャッシュを使うと以下の面倒なトラブルを招くことも。
- エラーの原因の切り分け
キャッシュはいつ、どのデータを参照したのかの特定が難しい
「第17章 複雑なクエリ」より
- 構文やサブクエリ、JOINなどを分け、不要なものがあれば排除
「第18章 ノーチェンジ・コンフィグ」より
- パフォーマンスが出ない原因は、
コンフィグがデフォルト
のまま?「第19章 塩漬けのバージョン」より
- マイナーバージョンアップをサボらず
「第20章 フレームワーク依存症」より
- ライブラリを選定する際、それがテーブルに悪影響を与えないか確認
- インプリシットカラム
- キーレスエントリー
P.S. Twitterもやってるのでフォローしていただけると泣いて喜びます:)
- 投稿日:2020-06-02T19:15:09+09:00
あともう少し…MySQLサービス起動後、Railsサーバが起動しない3
発生した背景
MySQLサービスが復旧したところで、Railsを起動すると以下のエラーが発生した。
/Users/ichikawadaisuke/projects/krown/vendor/ruby/2.5.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require': dlopen(/Users/ichikawadaisuke/projects/krown/vendor/ruby/2.5.0/gems/mysql2-0.5.2/lib/mysql2/mysql2.bundle, 9): Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.21.dylib (LoadError) Referenced from: /Users/ichikawadaisuke/projects/krown/vendor/ruby/2.5.0/gems/mysql2-0.5.2/lib/mysql2/mysql2.bundle Reason: image not found - /Users/ichikawadaisuke/projects/krown/vendor/ruby/2.5.0/gems/mysql2-0.5.2/lib/mysql2/mysql2.bundle対応手順
MySQLサービスを再インストールしたため、既存のGemが動作しなくなったと判断。
Gemの再セッティングを実施する。
①以下コマンドにて原因を多角的に調査する$ bundle update $ rails s (これで復旧するかを試してみるも、Railsサーバは起動しなかった) $ bundle doctor (MySQLに紐つくような目立ったエラーは発生していない)②以下のコマンドでGemを入れ替える
$ bundle exec gem uninstall mysql2 Successfully uninstalled mysql2-0.5.2 $ bundle install --path vendor (同コマンドで改めてGemを入れなおす)③やっと…Railsが起動した…
Use Ctrl-C to stop Started GET "/" for ::1 at 2020-06-02 18:46:42 +0900 ActiveRecord::NoDatabaseError (Unknown database 'krown_development'):④あとはお決まりのコマンドを実行して、無事終了しました?
$ bundle exec rake db:create $ bundle exec rake db:migrate
- 投稿日:2020-06-02T18:32:12+09:00
道のりは長い…( ´Д`)y━・~~ MySQLが起動しない事象への対応
Railsを起動するため、Gem、bundleの再設定を行いました。ようやくアプリケーションを起動することができたのですが、アプリケーションにアクセスするとエラー出力され、アプリが動きません。
非常に道のりが長いですが、1つ1つ対応を進めていきます。エラー内容:
* Listening on tcp://localhost:3000 Use Ctrl-C to stop Started GET "/" for ::1 at 2020-06-02 11:31:07 +0900 Mysql2::Error::ConnectionError (Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)): (省略)①そもそもサービスが起動していなかった。(mysql.server statusで確認)
②ログを確認すると、プロセスを起動する際にファイルのオープンに失敗している
(ichikawadaisukenoMacBook-Air.local.err )200602 11:51:16 mysqld_safe mysqld from pid file /usr/local/var/mysql/ichikawadaisukenoMacBook-Air.local.pid ended③そういえば、先日Mysqlが稼働しなかったため、homebrewコマンドでインストールしなおした経緯がある。/usr/local/Cellar配下をみると、v5.6系とv8.0が存在していた。
競合している可能性もあるので、先日追加したv8.0系はアンインストールした。④さらにリンクも再設定すれば復旧するかもしれないと考え、以下を試した。
CMD> brew unlink mysql@5.6 Unlinking /usr/local/Cellar/mysql@5.6/5.6.42... 0 symlinks removed CMD> brew link --force mysql56 Linking /usr/local/Cellar/mysql@5.6/5.6.42... 99 symlinks created⑤この後、以下のファイルで直接5.6系のサービスを起動しようとするも
/usr/local/Cellar/mysql@5.6/5.6.42/support-files/mysql.server startERROR! The server quit without updating PID file (/usr/local/var/mysql/ichikawadaisukenoMacBook-Air.local.pid).⑥出来るだけ、mysqlの再インストールは選択したくなかったのですが、時間を消耗してしまうので、以下のコマンドからまず環境をクリーンにしました。
※ファイルが存在している場合はバックアップを取得する brew uninstall mysql56 $ sudo rm -rf /usr/local/mysql $ sudo rm -rf /Library/StartupItems/MYSQL $ sudo rm -rf /Library/PreferencePanes/MySQL.prefPane $ sudo rm -rf /Library/Receipts/mysql-.pkg $ sudo rm -rf /usr/local/Cellar/mysql* $ sudo rm -rf /usr/local/bin/mysql* $ sudo rm -rf /usr/local/var/mysql* ※ここにはファイルが存在したため、bk取得 $ sudo rm -rf /usr/local/etc/my.cnf $ sudo rm -rf /usr/local/share/mysql* $ sudo rm -rf /usr/local/opt/mysql*⑦最後にインストールを実行し、希望のサービスが稼働していることを確認しました。
[\W staff@term]brew install mysql56 Updating Homebrew... ==> Downloading https://homebrew.bintray.com/bottles/mysql%405.6-5.6.47.catalina.bottle.tar.gz Already downloaded: /Users/ichikawadaisuke/Library/Caches/Homebrew/downloads/c270819d76ed326059143e1b4c6c6c0ab672e4259c328c140ec71d917babc348--mysql@5.6-5.6.47.catalina.bottle.tar.gz ==> Pouring mysql@5.6-5.6.47.catalina.bottle.tar.gz ==> /usr/local/Cellar/mysql@5.6/5.6.47/bin/mysql_install_db --verbose --user=ichikawadaisuke --basedir=/usr/local/Ce ==> Caveats A "/etc/my.cnf" from another install may interfere with a Homebrew-built server starting up correctly. MySQL is configured to only allow connections from localhost by default To connect: mysql -uroot mysql@5.6 is keg-only, which means it was not symlinked into /usr/local, because this is an alternate version of another formula. If you need to have mysql@5.6 first in your PATH run: echo 'export PATH="/usr/local/opt/mysql@5.6/bin:$PATH"' >> ~/.zshrc For compilers to find mysql@5.6 you may need to set: export LDFLAGS="-L/usr/local/opt/mysql@5.6/lib" export CPPFLAGS="-I/usr/local/opt/mysql@5.6/include" To restart mysql@5.6 after an upgrade: brew services restart mysql@5.6 Or, if you don't want/need a background service you can just run: /usr/local/opt/mysql@5.6/bin/mysql.server start ==> Summary ? /usr/local/Cellar/mysql@5.6/5.6.47: 344 files, 155.2MB [\W staff@term]/usr/local/opt/mysql@5.6/bin/mysql.server status SUCCESS! MySQL running (37799)次はまたRailsが動かなくなりました…?
- 投稿日:2020-06-02T18:23:02+09:00
トランザクションの中にエラーとなるSQLがあると自動的にロールバックされる?
はじめに
SQL勉強中です。MySQLとPostgreSQLにおけるトランザクションの挙動が大きく違うということを学んだのでアウトプットします。
MySQL
MySQLにおいてトランザクションの中でエラーとなるSQL文があった場合はどうなるでしょうか?
create table test (id int, name varchar(10)); -- => Query OK, 0 rows affected begin; insert into test values (1,'hoge'); -- => Query OK, 1 row affected (0.00 sec) insert into test values (2,'huga'); -- => Query OK, 1 row affected (0.00 sec) insert into test values ('three',3); -- => ERROR 1366 (HY000): Incorrect integer value: 'three' for column 'id' at row 1 insert into test values (4,'bar'); -- => Query OK, 1 row affected (0.00 sec) commit; -- => Query OK, 0 rows affected (0.00 sec) select * from test; +------+------+ | id | name | +------+------+ | 1 | hoge | | 2 | huga | | 4 | bar | +------+------+ -- => 3 rows in set (0.00 sec)結果はご覧の通り、エラーとなるSQL文だけが実行されず、他のSQL文はデータベースに反映されています。
つまりデータベースの原子性(トランザクションが終わった時、そこに含まれている更新処理は全て実行されるか、全て実行されない状態で終わることを保証する性質)が守られていません。かなり注意が必要です。
PostgreSQLでは?
ではPostgreSQLではどうなるのでしょうか。
create table test (id int, name varchar(10)); begin transaction; insert into test values (1,'hoge'); insert into test values (2,'huga'); insert into test values ('three',3); -- => invalid input syntax for type integer: "three" -- => LINE 1: insert into test values ('three',3) insert into test values (4,'bar'); -- =>current transaction is aborted, commands ignored until end of transaction block commit; -- => ROLLBACK select * from test; +------+--------+ | id | name | |------+--------| +------+--------+ロールバックされました!MySQLと全く違います。PostgreSQLは親切ですね。
- 投稿日:2020-06-02T17:07:36+09:00
アリババクラウドデータベースバックアップサービスを利用したデータベースのバックアップと復元
アリババクラウドデータベースバックアップサービス(DBS)は、継続的なデータ保護のための安全でコスト効率の高いソリューションです。このサービスは、企業のデータセンター、ハイブリッドクラウド、パブリッククラウド、サードパーティのクラウドベンダーなど、複数の環境に保存されたデータを強力に保護します。
この記事では、新しいデータベースバックアップサービスを活用して、データベースのバックアップと復元処理を行う方法をご紹介します。
本ブログは英語版からの翻訳です。オリジナルはこちらからご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。
前提条件
DBSを使用するには、実行可能なデータベースインスタンスが必要です。データベースインスタンスは、Elastic Compute Service (ECS) ベースのデータベース、ApsaraDB for RDSインスタンス、またはオンプレミスやパブリックアクセス可能なデータベースインスタンスのいずれかになります。DBSは現在、MySQL、MongoDB、Oracle、SQL Serverデータベース管理システムをサポートしています。
バックアップタスクの設定
Alibaba CloudコンソールでDatabase Backup Serviceを探します。
DBSコンソールで、[スケジュールの作成]をクリックします。
ご希望のDBS地域、データベースタイプ、仕様、期間を選択してください。
選択内容を確認したら、[今すぐ購入]をクリックします。データベース・バックアップ・コンソールに戻り、[バックアップ・スケ ジュール]をクリックします。構成されていないDBSインスタンスが表示されます。
[バックアップの構成]をクリックすると、DBSの構成ページが表示されます。
データベースの場所、データベースの種類、アドレス、ポート、データベースアカウント、パスワード、SSL暗号化の設定など、必要な情報をすべて入力します。オプションで、接続をテストして、入力したデータが正しいことを確認することができます。データベースがファイアウォールの背後に設定されている場合は、[ホワイトリストの設定]をクリックして、DBSがデータベースにアクセスできるようにするために必要なIP範囲のリストをホワイトリストにする必要があります。
この例では、ECSで動作するMySQLサーバを用意したので、データベースの場所としてECS-Hosted Databaseを選択し、ドロップダウンリストでECSインスタンスIDを検索します。
香港のOSSバケットにバックアップ先として設定されました。
[すべて選択] をクリックして、すべてのテーブルを選択したリストに移動します。
[次へ]をクリックして、バックアップ時間の設定画面に移動します。
DBSは、シングルバックアップまたは定期的なバックアップモードをサポートしています。この例では、Single Backupを選択しています。
[次へ]をクリックして続行します。最後に、バックアップの保持ポリシーを設定する必要があります。
構成を保存し、[バックアップ スケジュール]ページに戻ります。バックアッププロセスを開始するには、[開始]をクリックしてプロセスを開始します。
DBSはバックアップ処理を開始すると、まず事前チェックを行います。
エラーがなければ、[Start Task]をクリックしてバックアップを実行します。タスクはコンソール上で「起動していない」から「実行中」の状態に切り替わります。選択した実行中のタスクの概要は、[管理] をクリックすることで確認できます。
[フルデータのバックアップ]をクリックすると、実行中のタスクプロセスが表示されます。
ステータスが「完了」に変わるまで待ちます。「完了」のステータスが表示されたら、バックアップは完了です。
View Backup Setをクリックすると、OSSバケットにバックアップされていたデータが表示されます。
データベースの復元を実行する
データベースの復元を実行するには、使用するバックアップデータを選択し、[データベースの復元]を選択します。
[復元タスクの作成] ページが表示されます。このページでは、どの復元ポイントにロールバックするか、および保存先のデータベース情報を定義する必要があります。
「復元するオブジェクト」ステップでは、まず競合解決オプションを選択する必要があります。既存のデータベースの名前を変更するようにDBSに依頼するか、データベーステーブルがすでに存在する場合に失敗するかを選択できます。この例では、バックアップをソースデータベースに復元しようとしているので、同じ名前のオブジェクトの名前を変更することを選択しています。
次に、復元するテーブルを選択します。完了したら、[事前チェック]をクリックして、データベース接続が正常に行われているかどうかを確認します。
DBS は、復元タスクの依存関係が満たされているかどうかを確認します。すべてのステータスが「成功」と表示された場合は、[Start Task] をクリックしてデータベースの復元を開始します。
タスクのステータスが「初期化中」から「実行中」、「完了」に変わります。タスクが完了するまで待ちます。
データベースの復元タスクの詳細を表示するには、タスクIDをクリックして、「Restore Schema」をクリックします。実行したテーブルの作成 DDL が表示されます。復元された行数を表示するには、[Restore Full Data] をクリックします。
以上がDBSを使用してデータベースをバックアップ、復元する方法となります。
アリババクラウドデータベースバックアップサービスの詳細については、以下を参照してください。
https://www.alibabacloud.com/products/database-backupアリババクラウドは日本に2つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
アリババクラウドジャパン公式ページ
- 投稿日:2020-06-02T14:28:55+09:00
事務員として入社したのにCentOSにLAMPをインストールすることになったときの備忘録
前提:未経験初心者事務入射なのに社内唯一のバックエンドエンジニアになってしまった
わたし「やってらんね~~~~!!!事務として入ったんですけどどうしてこうなった??」
ある日
上司「新しいVPSサーバにLAMP入れといて…えっ、LAMP知らない?ハ~~~~~~マジで?(クソデカため息)」
上司「これ読んでインストールよろしく」
わたし「ぴえん…webなんて何も知らないよう、そもそも私は事務で入ったはず……。いやそんなこと言ってても誰も助けてくれんからね…調べるか…。」LAMPとは
LAMP(ランプ)とは、OSであるLinux、WebサーバであるApache HTTP Server、データベースであるMySQL、スクリプト言語であるPerl、PHP、Pythonを総称した頭文字から成る造語である。※1
わたし「上司オジはアパッチアパッチ言ってたな。これ入れればいいんですね」
インストールしていく
Apache httpd のインストール
# yum -y install httpd # httpd -vわたし「うまくいくじゃん、余裕だわ。」
MySQL Community Server のインストール
# yum -y install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm # httpd -vわたし「なんで…?さっき上司が渡してきた資料どおりやったけどコマンドが通らないよぅ。
これってもしかして、令和対応じゃないのかも…。」
わたし「コマンドよくわかんないけど壊してもいいって言ってたしいろんなの試してこ。当たったらラッキーや。」# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm # rpm -Uvh mysql-community-release-el7-5.noarch.rpm # yum -y install mysql-community-server # mysqld --versionわたし「通った!なんでだろ。知らんけど、パッケージがyumのリポジトリに登録されていないまたはバージョンが古いためwgetによってパッケージをダウンロードして何らかのコマンドでインストールされたんかな。」2
PHPのインストール
# yum -y install php php-mysql # php --versionサーバーの起動
# systemctl start httpd.service # systemctl start mysqld.service上司「サーバの再起動でサーバが自動的に起動するようにしておいてね。」
わたし「(ふつう再起動したら起動するんじゃないんか?再起動とは?)はい。」↑サーバ(=CentOS)の再起動でサーバ(=httpd・MySQL)が自動的に起動するようにしておいてね。
わたし「分かるか。」
サーバーを再起動しても起動時に自動的にサーバーが起動するように設定 # systemctl enable httpd.service # systemctl enable mysqld.serviceわたし「インストールおわりました!」
上司「遅いね。どれどれ…。」
わたし「(事務なのでね。じゃあご自分でやれ)すみません。」
上司「Apacheが起動してないんだけど?httpdはあるの?」
わたし「アパッチが起動してないんですか…?」httpdがないとダメらしいので調べる
# yum info httpdわたし「(は~?あるやんけ)httpdあります。」
上司「起動して。」# systemctl start httpd.service # systemctl status httpd.serviceわたし「この後にhttp ://IPアドレスで検索すると、初期画面が表示されるんやね。OK。…あれ?真っ白やね…。」
わたし「もしかしてファイアウォールの設定がかかってるのかもしれへん。いっつもとなりの席のフロントエンドの人がワフワフ言ってるしたぶんそれや。」一時的にファイアウォールを無効にする # systemctl stop firewalldわたし「『Failed to issue method call: Unit firewalld.service not loaded.』…?じゃあこれはどや。」
firewalld に httpd (80番ポート)への通信を許可 # firewall-cmd --add-service=http --zone=public --permanent # firewall-cmd --reloadわたし「『-bash: firewall-cmd: command not found』…。詰んだ…。」
上司「まだ?」
わたし「自分でやってくださ~~い!(まだです。)」コマンド実行ファイルがないっぽいので、インストールする
わたし「sudoも効かないし、なんか色々なんも入ってないんやな。FW入れればいいんしょ。」
わたし「iptablesとfirewalldは共存できない…だと…。」3わたし「デフォルトがFWならFWでいいか…?iptablesのメリット調べるか。」
わたし「FWでよくない?」firewalldをインストールする
IPTABLES停止 # systemctl stop iptables # systemctl disable iptables # systemctl is-enabled iptables firewalldインストール # yum -y install firewalld # systemctl start firewalld # systemctl enable firewalld # systemctl is-enabled firewalld →enabledと出力される # firewall-cmd --list-all #設定確認再度firewallにhttpdの通信許可に挑戦
# firewall-cmd --permanent --add-service=http # firewall-cmd --reloadわたし「できた~~~~!!!!!!!!!!!!!!!!!!!」
わたし「上司~~!できたよ~~!」
上司「遅かったな。じゃあこれからそのVPSサーバの構成について説明していくで。」
わたし「ぴえん…。」まとめ(ここだけ読めばいい)
Apacheインストール # yum -y install httpd # httpd -vMySQLインストール # wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm # rpm -Uvh mysql-community-release-el7-5.noarch.rpm # yum -y install mysql-community-server # mysqld --versionPHPインストール # yum -y install php php-mysql # php --versionサーバーの起動 # systemctl start httpd.service # systemctl start mysqld.serviceサーバーを再起動しても起動時に自動的にサーバーが起動するように設定 # systemctl enable httpd.service # systemctl enable mysqld.serviceIPTABLES停止 # systemctl stop iptables # systemctl disable iptables # systemctl is-enabled iptablesfirewalldインストール # yum -y install firewalld # systemctl start firewalld # systemctl enable firewalld # systemctl is-enabled firewalld →enabledと出力される # firewall-cmd --list-all #設定確認Firewallにhttpdの通信許可 # firewall-cmd --permanent --add-service=http # firewall-cmd --reload以上
次はphpmyadminのインストール
ゲーーーーーーーーーー吐きそう!!!!!!!!!
- 投稿日:2020-06-02T14:28:55+09:00
未経験初心者がCentOSにLAMPをインストールしたときの忘備録
前提:未経験初心者なのに社内唯一のバックエンドエンジニアになってしまった
わたし「やってらんね~~~~!!!事務として入ったんですけどどうしてこうなった??」
ある日
上司「新しいVPSサーバにLAMP入れといて…えっ、LAMP知らない?ハ~~~~~~マジで?(クソデカため息)」
上司「これ読んでインストールよろしく」
わたし「ぴえん…webなんて何も知らないよう、そもそも私は事務で入ったはず……。いやそんなこと言ってても誰も助けてくれんからね…調べるか…。」LAMPとは
LAMP(ランプ)とは、OSであるLinux、WebサーバであるApache HTTP Server、データベースであるMySQL、スクリプト言語であるPerl、PHP、Pythonを総称した頭文字から成る造語である。※1
わたし「上司オジはアパッチアパッチ言ってたな。これ入れればいいんですね」
インストールしていく
Apache httpd のインストール
# yum -y install httpd # httpd -vわたし「うまくいくじゃん、余裕だわ。」
MySQL Community Server のインストール
# yum -y install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm # httpd -vわたし「なんで…?さっき上司が渡してきた資料どおりやったけどコマンドが通らないよぅ。
これってもしかして、令和対応じゃないのかも…。」
わたし「コマンドよくわかんないけど壊してもいいって言ってたしいろんなの試してこ。当たったらラッキーや。」# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm # rpm -Uvh mysql-community-release-el7-5.noarch.rpm # yum -y install mysql-community-server # mysqld --versionわたし「通った!なんでだろ。知らんけど、パッケージがyumのリポジトリに登録されていないまたはバージョンが古いためwgetによってパッケージをダウンロードして何らかのコマンドでインストールされたんかな。」2
PHPのインストール
# yum -y install php php-mysql # php --versionサーバーの起動
# systemctl start httpd.service # systemctl start mysqld.service上司「サーバの再起動でサーバが自動的に起動するようにしておいてね。」
わたし「(ふつう再起動したら起動するんじゃないんか?再起動とは?)はい。」↑サーバ(=CentOS)の再起動でサーバ(=httpd・MySQL)が自動的に起動するようにしておいてね。
わたし「分かるか。」
サーバーを再起動しても起動時に自動的にサーバーが起動するように設定 # systemctl enable httpd.service # systemctl enable mysqld.serviceわたし「インストールおわりました!」
上司「遅いね。どれどれ…。」
わたし「(事務なのでね。じゃあご自分でやれ)すみません。」
上司「Apacheが起動してないんだけど?httpdはあるの?」
わたし「アパッチが起動してないんですか…?」httpdがないとダメらしいので調べる
# yum info httpdわたし「(は~?あるやんけ)httpdあります。」
上司「起動して。」# systemctl start httpd.service # systemctl status httpd.serviceわたし「この後にhttp ://IPアドレスで検索すると、初期画面が表示されるんやね。OK。…あれ?真っ白やね…。」
わたし「もしかしてファイアウォールの設定がかかってるのかもしれへん。いっつもとなりの席のフロントエンドの人がワフワフ言ってるしたぶんそれや。」一時的にファイアウォールを無効にする # systemctl stop firewalldわたし「『Failed to issue method call: Unit firewalld.service not loaded.』…?じゃあこれはどや。」
firewalld に httpd (80番ポート)への通信を許可 # firewall-cmd --add-service=http --zone=public --permanent # firewall-cmd --reloadわたし「『-bash: firewall-cmd: command not found』…。詰んだ…。」
上司「まだ?」
わたし「自分でやってくださ~~い!(まだです。)」コマンド実行ファイルがないっぽいので、インストールする
わたし「sudoも効かないし、なんか色々なんも入ってないんやな。FW入れればいいんしょ。」
わたし「iptablesとfirewalldは共存できない…だと…。」3わたし「デフォルトがFWならFWでいいか…?iptablesのメリット調べるか。」
わたし「FWでよくない?」firewalldをインストールする
IPTABLES停止 # systemctl stop iptables # systemctl disable iptables # systemctl is-enabled iptables firewalldインストール # yum -y install firewalld # systemctl start firewalld # systemctl enable firewalld # systemctl is-enabled firewalld →enabledと出力される # firewall-cmd --list-all #設定確認再度firewallにhttpdの通信許可に挑戦
# firewall-cmd --permanent --add-service=http # firewall-cmd --reloadわたし「できた~~~~!!!!!!!!!!!!!!!!!!!」
わたし「上司~~!できたよ~~!」
上司「遅かったな。じゃあこれからそのVPSサーバの構成について説明していくで。」
わたし「ぴえん…。」まとめ(ここだけ読めばいい)
Apacheインストール # yum -y install httpd # httpd -vMySQLインストール # wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm # rpm -Uvh mysql-community-release-el7-5.noarch.rpm # yum -y install mysql-community-server # mysqld --versionPHPインストール # yum -y install php php-mysql # php --versionサーバーの起動 # systemctl start httpd.service # systemctl start mysqld.serviceサーバーを再起動しても起動時に自動的にサーバーが起動するように設定 # systemctl enable httpd.service # systemctl enable mysqld.serviceIPTABLES停止 # systemctl stop iptables # systemctl disable iptables # systemctl is-enabled iptablesfirewalldインストール # yum -y install firewalld # systemctl start firewalld # systemctl enable firewalld # systemctl is-enabled firewalld →enabledと出力される # firewall-cmd --list-all #設定確認Firewallにhttpdの通信許可 # firewall-cmd --permanent --add-service=http # firewall-cmd --reload最後に
自分用にログ残しておいてって言われたからQiitaに書いたんですけど書いたことないので雑雑で本当にすみません。
※あくまでも自分用の忘備録です。
怒らないでください。間違ってるところと事務の転職先は教えてください。以上
- 投稿日:2020-06-02T14:28:55+09:00
事務員として入社したのにCentOSにLAMPをインストールすることになったときの忘備録
前提:未経験初心者事務入射なのに社内唯一のバックエンドエンジニアになってしまった
わたし「やってらんね~~~~!!!事務として入ったんですけどどうしてこうなった??」
ある日
上司「新しいVPSサーバにLAMP入れといて…えっ、LAMP知らない?ハ~~~~~~マジで?(クソデカため息)」
上司「これ読んでインストールよろしく」
わたし「ぴえん…webなんて何も知らないよう、そもそも私は事務で入ったはず……。いやそんなこと言ってても誰も助けてくれんからね…調べるか…。」LAMPとは
LAMP(ランプ)とは、OSであるLinux、WebサーバであるApache HTTP Server、データベースであるMySQL、スクリプト言語であるPerl、PHP、Pythonを総称した頭文字から成る造語である。※1
わたし「上司オジはアパッチアパッチ言ってたな。これ入れればいいんですね」
インストールしていく
Apache httpd のインストール
# yum -y install httpd # httpd -vわたし「うまくいくじゃん、余裕だわ。」
MySQL Community Server のインストール
# yum -y install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm # httpd -vわたし「なんで…?さっき上司が渡してきた資料どおりやったけどコマンドが通らないよぅ。
これってもしかして、令和対応じゃないのかも…。」
わたし「コマンドよくわかんないけど壊してもいいって言ってたしいろんなの試してこ。当たったらラッキーや。」# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm # rpm -Uvh mysql-community-release-el7-5.noarch.rpm # yum -y install mysql-community-server # mysqld --versionわたし「通った!なんでだろ。知らんけど、パッケージがyumのリポジトリに登録されていないまたはバージョンが古いためwgetによってパッケージをダウンロードして何らかのコマンドでインストールされたんかな。」2
PHPのインストール
# yum -y install php php-mysql # php --versionサーバーの起動
# systemctl start httpd.service # systemctl start mysqld.service上司「サーバの再起動でサーバが自動的に起動するようにしておいてね。」
わたし「(ふつう再起動したら起動するんじゃないんか?再起動とは?)はい。」↑サーバ(=CentOS)の再起動でサーバ(=httpd・MySQL)が自動的に起動するようにしておいてね。
わたし「分かるか。」
サーバーを再起動しても起動時に自動的にサーバーが起動するように設定 # systemctl enable httpd.service # systemctl enable mysqld.serviceわたし「インストールおわりました!」
上司「遅いね。どれどれ…。」
わたし「(事務なのでね。じゃあご自分でやれ)すみません。」
上司「Apacheが起動してないんだけど?httpdはあるの?」
わたし「アパッチが起動してないんですか…?」httpdがないとダメらしいので調べる
# yum info httpdわたし「(は~?あるやんけ)httpdあります。」
上司「起動して。」# systemctl start httpd.service # systemctl status httpd.serviceわたし「この後にhttp ://IPアドレスで検索すると、初期画面が表示されるんやね。OK。…あれ?真っ白やね…。」
わたし「もしかしてファイアウォールの設定がかかってるのかもしれへん。いっつもとなりの席のフロントエンドの人がワフワフ言ってるしたぶんそれや。」一時的にファイアウォールを無効にする # systemctl stop firewalldわたし「『Failed to issue method call: Unit firewalld.service not loaded.』…?じゃあこれはどや。」
firewalld に httpd (80番ポート)への通信を許可 # firewall-cmd --add-service=http --zone=public --permanent # firewall-cmd --reloadわたし「『-bash: firewall-cmd: command not found』…。詰んだ…。」
上司「まだ?」
わたし「自分でやってくださ~~い!(まだです。)」コマンド実行ファイルがないっぽいので、インストールする
わたし「sudoも効かないし、なんか色々なんも入ってないんやな。FW入れればいいんしょ。」
わたし「iptablesとfirewalldは共存できない…だと…。」3わたし「デフォルトがFWならFWでいいか…?iptablesのメリット調べるか。」
わたし「FWでよくない?」firewalldをインストールする
IPTABLES停止 # systemctl stop iptables # systemctl disable iptables # systemctl is-enabled iptables firewalldインストール # yum -y install firewalld # systemctl start firewalld # systemctl enable firewalld # systemctl is-enabled firewalld →enabledと出力される # firewall-cmd --list-all #設定確認再度firewallにhttpdの通信許可に挑戦
# firewall-cmd --permanent --add-service=http # firewall-cmd --reloadわたし「できた~~~~!!!!!!!!!!!!!!!!!!!」
わたし「上司~~!できたよ~~!」
上司「遅かったな。じゃあこれからそのVPSサーバの構成について説明していくで。」
わたし「ぴえん…。」まとめ(ここだけ読めばいい)
Apacheインストール # yum -y install httpd # httpd -vMySQLインストール # wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm # rpm -Uvh mysql-community-release-el7-5.noarch.rpm # yum -y install mysql-community-server # mysqld --versionPHPインストール # yum -y install php php-mysql # php --versionサーバーの起動 # systemctl start httpd.service # systemctl start mysqld.serviceサーバーを再起動しても起動時に自動的にサーバーが起動するように設定 # systemctl enable httpd.service # systemctl enable mysqld.serviceIPTABLES停止 # systemctl stop iptables # systemctl disable iptables # systemctl is-enabled iptablesfirewalldインストール # yum -y install firewalld # systemctl start firewalld # systemctl enable firewalld # systemctl is-enabled firewalld →enabledと出力される # firewall-cmd --list-all #設定確認Firewallにhttpdの通信許可 # firewall-cmd --permanent --add-service=http # firewall-cmd --reload以上
- 投稿日:2020-06-02T12:39:27+09:00
MySQL ↔︎ MongoDB 早見表
Terminology
用語です。
MySQL MongoDB databases database table collection row document column field Commands
MySQL MongoDB show databases; show dbs create database new_db; use new_db use new_db; use new_db create table users (name varchar(20)); db.createCollection("users") drop table users db.users.drop() desc users; なし insert into users (name) values ("taro"); db.users.insertOne( { name: "hoge" } ) update users
set name = "maro"
where name = "taro";db.users.updateMany(
{ name: "taro" },
{ $set: { name: "maro" } }
)select * from users; db.users.find() select * from users order by name asc; db.users.find().sort( { name: 1 } ) select * from users order by name desc; db.users.find().sort( { name: -1 } ) select * from users limit 1; db.users.find().limit(1) select count(*) from users; db.users.count() select name from users where age = 90; db.users.find(
{ age: 90 },
{ name: 1 }
)Null and Missing field
MySQL の場合はシンプル
MySQL select * from users where age is null; select * from users where age is not null; MongoDB の場合は null と missing があるので少し複雑
users { name: "100", age: 100 }
{ name: "null", age: null }
{ name: "missing" }
MongDB users.name db.users.find( { age: null } ) null, missing db.users.find( { age: { $ne: null } } ) 100 db.users.find( { age: { $exists: true } } ) 100, null db.users.find( { age: { $exists: false } } ) missing db.users.find( { \$and: [
{ age: { $exists: true } },
{ age: null }
] } )null db.users.find({ age: { $type: 10 } }) null db.users.find( { age: { \$not: { $type: 10 } } } ) 100, missing Docker
Docker のおかげで、それぞれの環境がすぐ使えます。
MySQL$ docker run --name study-mysql --rm -e MYSQL_ALLOW_EMPTY_PASSWORD=yes mysql:8.0 $ docker exec -it study-mysql bash root@51c68a47680f:/# mysql mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec)MongoDB$ docker run --name study-mongo --rm mongo:4.2 $ docker exec -it study-mongo bash root@c2ab8e8878c3:/# mongo > show dbs admin 0.000GB config 0.000GB local 0.000GBGUI
この辺が王道かと。MongoDB Compass 使いやすいです。