- 投稿日:2020-09-13T22:13:53+09:00
MySQLのibdファイルはどこにあるだろう[macOS]
表題の通り。
下のコマンドを打ちます。
ps aux | grep mysql--datadir=/usr/local/var/mysql
ls -l /usr/local/var/mysql/データベース名
- 投稿日:2020-09-13T21:41:01+09:00
ECCUBEのMySQLでmtbテーブルを削除してしまった場合の対処法
ことのはじまり
配送方法のひとつを削除しようと思い、マスタデータ管理から削除しようとしたがなぜか消せない。ならばPHPMyAdminから直接消そう!と思い削除ボタンを押したものの、間違えてテーブルごと消去してしまった。配送方法のデータが丸々消えたせいで商品ページも管理画面もエラーが出るし、MySQLのバックアップはとっていないし...
対処法
EC-CUBEのマスタデータは外部キー制約というものに基づいて作られています。例えば配送方法のテーブルであるmtb_sale_typeでであれば、それを参照して商品データであるdtb_productsにmtb_sale_type_idというカラムが存在していると思います。このような状態で、GUIから存在しない(僕の場合は消してしまったので)mtb_sale_typeテーブルを作成しようとしても
「外部キー制約を追加できません。」
と出てしまい作成できないのです。この場合、「外部キー制約を無視」してクエリから制作する必要があります。
外部キー制約を無視するためには以下のクエリを使用します。SET FOREIGN_KEY_CHECKS=0;最終的に書いたクエリは以下の通りです。
SET FOREIGN_KEY_CHECKS=0; create table 'mtb_sale_type' ( 'id' smallint(5) UNSIGNED NOT NULL, 'name' varchar(255) NOT NULL, 'sort_no' smallint(5) UNSIGNED NOT NULL, 'discriminator_type' varchar(255) NOT NULL PRIMARY KEY(id); ) DEFAULT CHARSET=utf8mb4_general_ciこれで元通りのテーブルを作ることができます。あとは「挿入」からもとあったデータを追加していくだけです。
総括
MySQLのバックアップは、ちゃんととっておこう!
- 投稿日:2020-09-13T21:10:16+09:00
mysqldumpでデータベースを指定してdumpする
dumpコマンド
- dbname = test
mysqldump -uroot -p -h<hostname> -B <dbname> > test.sqldumpfileの中身
- データベースが指定される
20 -- 21 -- GTID state at the beginning of the backup 22 -- 23 24 SET @@GLOBAL.GTID_PURGED=''; 25 26 -- 27 -- Current Database: `test` 28 -- 29 30 CREATE DATABASE /*!32312 IF NOT EXISTS*/ `test` /*!40100 DEFAULT CHARACTER SET utf8 */; 31 32 USE `test`; 33 34 --あ、
- docker-composeで初期データを入れる場合、データベースの指定がないと流し込めないので、こちらのやり方でdumpを取得する必要があるみたいです
1 db: 2 image: mysql:latest 3 volumes: 4 - ./initdb.d:/docker-entrypoint-initdb.d 5 environment: 6 - MYSQL_ROOT_PASSWORD=root
- 投稿日:2020-09-13T20:22:29+09:00
[heroku] run rails db:migrateがうまくいかない
環境
・Rails 6.0.3.2
・mysql Ver 14.14 Distrib 5.6.47
・osx10.15
・herokuへデプロイはじめに
Rails
でアプリを作成しheroku
へアップロードするときにうまくいかなかった時の対応です。
開発環境ではMySQL
でheroku
ではDBがPostgreSQL
のためその対応が必要。
その途中段階でエラーが生じた。
順番に書いていきます。PostgreSQLへの対応
まずは
Gemfile
へ以下を記述。本番環境でPostgreSQL
を使うというものです。自分は一番下に書きました。group :production do gem 'pg' endGemfileを変更したので忘れずにbundle installをします。
まずここで一つ目のエラーでました。そのままbundle install
すると自分の開発環境にはPostgreSQL
がないのでエラー発生。対応は
group :produciton end
のところを飛ばすコマンドをターミナルで実行します。$ bundle install --without productionデータベースへ接続する記述をconfigフォルダの中にある
database.yml
へします。
一番下へ追記しました。production: <<: *default adapter: postgresql encoding: unicode pool: 5自分の場合は記述は以上でした。
参考になった記事はコチラです!
【初心者向け】railsアプリをherokuを使って確実にデプロイする方法【決定版】
・https://qiita.com/kazukimatsumoto/items/a0daa7281a3948701c39herokuへデプロイ
今回ここは割愛します。
デプロイ完了まで進みます。ここでdb:migrate
heroku run rails db:migrate
をしますがエラー発生!
いろいろ見ているうちにこのエラーにやっと出会う。。。ターミナルには中ほどに以下のような記述が。
Caused by: PG::ConnectionBad: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?原因
調べてみると単純なことで
heroku
にはデフォルトではPostgreSQL
が入ってないので、追加してあげる必要があるということです!
なんと!!!!
まだまだ慣れてないのでこの単純なことに気づけませんでした。。。。対応
ターミナルで
PostgreSQL
を追加するコマンド$ heroku addons:create heroku-postgresqlその後に
$ heroku run rails db:migrateそうするとマイグレーションが完了しました!
別のところが誤っていると思い全然違うことをして数時間を費やしてしまいましたが、単純なことでした!
無事アプリが動作し完了しました!参照
【初心者向け】railsアプリをherokuを使って確実にデプロイする方法【決定版】
・https://qiita.com/kazukimatsumoto/items/a0daa7281a3948701c39【Rails】「heroku run rake db:migrate」を実行しようとすると発生するエラーについて
・https://qiita.com/suzuki-x/items/b878723080aea1a673ed
- 投稿日:2020-09-13T18:50:48+09:00
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
環境
mysql 8.0
Catalina 10.15.6遭遇したエラー
~ ❯❯❯ mysql -u user(ユーザー名) -p Enter password: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)当然、ルートでも入ることできず。
~ ❯❯❯ mysql -u root -p ✘ 1 Enter password: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)内容的にはpidファイルがアクセス拒否で削除できないと怒ってる模様。
サイトを参考にしながら下記の手順で行ってみました。~ ❯❯❯ mysql.server restart ✘ 1 touch: /usr/local/var/mysql/ユーザー名.pid.shutdown: Permission denied cat: /usr/local/var/mysql/ユーザー名.pid: Permission denied ERROR! MySQL server process # is not running! override rw-r----- _mysql/_mysql for /usr/local/var/mysql/ユーザー名.pid? Starting MySQL SUCCESS! ~ ❯❯❯ /usr/local/Cellar/mysql/8.0.21_1/bin/mysqld_safe: line 144: /usr/local/var/mysql/ユーザー名.err: Permission denied cat: /usr/local/var/mysql/ユーザー名.pid: Permission denied rm: /usr/local/var/mysql/ユーザー名.pid: Permission denied 2020-09-13T09:14:24.6NZ mysqld_safe Fatal error: Can't remove the pid file: /usr/local/var/mysql/ユーザー名.pid. Please remove the file manually and start /usr/local/Cellar/mysql/8.0.21_1/bin/mysqld_safe again; mysqld daemon not started /usr/local/Cellar/mysql/8.0.21_1/bin/mysqld_safe: line 144: /usr/local/var/mysql/ユーザー名.err: Permission denied自らの手で削除してあげる。
~ ❯❯❯ sudo rm /usr/local/var/mysql/ユーザー名.pid. ✘ 1 Password: rm: /usr/local/var/mysql/ユーザー名.pid.: No such file or directory ~ ❯❯❯ sudo rm /usr/local/var/mysql/ユーザー名.pid ✘ 1サーバーの立ち上げをしてみましたが、エラーが出ました。
~ ❯❯❯ mysql.server restart ERROR! MySQL server PID file could not be found! Starting MySQL ./usr/local/Cellar/mysql/8.0.21_1/bin/mysqld_safe: line 144: /usr/local/var/mysql/ユーザー名.err: Permission denied /usr/local/Cellar/mysql/8.0.21_1/bin/mysqld_safe: line 144: /usr/local/var/mysql/ユーザー名.err: Permission denied /usr/local/Cellar/mysql/8.0.21_1/bin/mysqld_safe: line 199: /usr/local/var/mysql/ユーザー名.err: Permission denied /usr/local/Cellar/mysql/8.0.21_1/bin/mysqld_safe: line 144: /usr/local/var/mysql/ユーザー名.err: Permission denied ERROR! The server quit without updating PID file (/usr/local/var/mysql/ユーザー名.pid).今度はpidファイルがないと怒ってるので作成してあげる。
その上でchmodコマンドで権限も弄りましたが、これは考えなしにやってるので必要なければ必要はないと思います。~ ❯❯❯ sudo touch /usr/local/var/mysql/ユーザー名.pid ~ ❯❯❯ sudo chmod 777 /usr/local/var/mysql/ユーザー名.pid再度サーバーを立ち上げ直す
~ ❯❯❯ mysql.server restart ERROR! MySQL server PID file could not be found! Starting MySQL ./usr/local/Cellar/mysql/8.0.21_1/bin/mysqld_safe: line 144: /usr/local/var/mysql/ユーザー名.err: Permission denied rm: /usr/local/var/mysql/ユーザー名.pid: Permission denied 2020-09-13T09:19:00.6NZ mysqld_safe Fatal error: Can't remove the pid file: /usr/local/var/mysql/ユーザー名.pid. Please remove the file manually and start /usr/local/Cellar/mysql/8.0.21_1/bin/mysqld_safe again; mysqld daemon not started /usr/local/Cellar/mysql/8.0.21_1/bin/mysqld_safe: line 144: /usr/local/var/mysql/ユーザー名.err: Permission denied ERROR! The server quit without updating PID file (/usr/local/var/mysql/ユーザー名.pid). ~ ❯❯❯ sudo mysql.server restart ERROR! MySQL server PID file could not be found! Starting MySQL .. SUCCESS!お疲れ様でした!!
参考にさせていただいたサイト
- 投稿日:2020-09-13T18:45:13+09:00
MySQLのユーザー・権限設定
MySQL上でのユーザー・権限設定について必要だったことを纏めました。具体的には、以下について書きました。
- rootユーザーのユーザー名の変更
- パスワードの変更
- 新しいユーザーの作成
- 権限設定
- 権限設定の反映
MySQL ver. 8.0.21 で動作確認済みです。
MySQL上のユーザー・権限の仕様について
ユーザーは、ユーザーと接続元がプライマリキーとして
mysql.user
テーブルに保存されています。コマンドでユーザーに対する操作を行う場合には、「ユーザー名@接続元」という形式を利用します。例:
- 'root'@'localhost' - localhostからのアクセスでのrootユーザーの権限設定
- 'root'@'%' - 全てのHostからのアクセスでのrootユーザーの権限設定
rootユーザーを変更する
rename user 'root'@'localhost' to 'new-root-user'@'localhost'; rename user 'root'@'%' to 'new-root-user'@'localhost';パスワードを変更する
SET PASSWORD FOR 'new-root-user'@'localhost' = 'new-password'; SET PASSWORD FOR 'new-root-user'@'%' = 'new-password';新しいユーザーを作成する
CREATE USER 'new-user'@'%' IDENTIFIED BY 'new-password';権限を付与する
特に、ユーザーを新たに作成した場合は権限が付与されていないため、権限の付与が必須です。
# 例:あるDBに対してのみ、全権限を付与する。指定されたDB内であれば全ての操作ができる) GRANT ALL PRIVILEGES ON db_schema.* TO 'user'@'%'; # 例:あるDBに対してのみ、テーブルとVIEWのSELECTの権限を付与する。 GRANT SELECT, SHOW VIEW ON db_schema.* TO 'user'@'%';詳しい権限の設定については、公式ドキュメント内の「Summary of Available Privileges」で確認できます。
本記事では触れませんが、「READ ONLY」の権限を付与するにはどうするか、という問いに対してはこちらの投稿を併せて見ると良いかと思います。
権限関連の設定を反映させる
FLUSH PRIVILEGES;参考
- 投稿日:2020-09-13T13:57:45+09:00
Andoridにwordpressをインストールする
UserLandを用いてAndroidスマートフォンにwordpressをインストールします。
ユーティリティのインストール
sudo apt install wget ;wordpressの取得
cd /var/www/html ; wget https://ja.wordpress.org/latest-ja.tar.gz ; tar xvf latest-ja.tar.gz ; sudo chown -R www-data:www-data . ;MySQLのスタート
sudo service mysql start ;MySQLへ接続
sudo mariadb ;wordpressのユーザー名をwordpress
パスワードをpasswordにした例CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8; GRANT ALL ON wordpress.* TO wordpress@localhost IDENTIFIED BY 'password'; FLUSH PRIVILEGES;ブラウザからアクセス
http://192.168.xxx.xxx:8080/wordpress/wordpressのインストール画面が表示されます。
- 投稿日:2020-09-13T13:43:47+09:00
AndroidスマホにApacheとPHPとMySQLをインストールする
UerLandを使ってAndroidスマホにApacheとPHPとMySQLをインストールします。
UserLandでUbuntuのsshをインストールするとポート2022番号でログインをすることができます。
ssh USERNAME@192.168.xxx.xxx -p2022 ;ログインをしたらまずは最新にアップデート
sudo apt update ; sudo apt upgrade -y ; sudo apt install -y nano ;Apache2 PHP MySQLをインストール
sudo apt install apache2 php php-mysql mariadb-server ;Apacheの開放ポートを80から8080へ変更
emacs /etc/apache2/ports.conf ;下記修正
Listen 80 ↓ Listen 8080サービスとして起動(systemctrlは使用できないため)
service apache2 start ;他の端末からブラウザで
http://192.168.xxx.xxx:8080を開く。
/var/www/html/内のファイルにアクセスができます。
PHPの動作確認
mv /var/www/html/index.html /var/www/html/index.html.back ; nano /var/www/html/index.php ;index.phpに下記を記述
<?php phpinfo();保存
再び
http://192.168.xxx.xxx:8080を開くとphpの情報がズラリと出ます。
ワードプレスも行けそうです。
- 投稿日:2020-09-13T12:36:57+09:00
EC2・RDSでLaravelの環境構築【PHP・MySQL・Nginx】
実現したいこと
既存で作成したLaravelのWebアプリケーションをEC2・RDSの環境にデプロイすることです。
前提
- GitHubに自身で作成したLaravelのWebアプリケーションがリポジトリに上がっている
- Laravel6.1
- PHP7.3
- MySQL5.7.31
- Nginx1.17.10
EC2
EC2の作成
ステップ 1: Amazon マシンイメージ (AMI)
- Amazon Linux 2 AMIを選択
ステップ 2: インスタンスタイプの選択
- t2.micro
ステップ 3: インスタンスの詳細の設定
- 全てデフォルト
ステップ 4: ストレージの追加
- 全てデフォルト
ステップ 5: タグの追加
- キー Name
- 値 適宜好きな名前
ステップ 6: セキュリティグループの設定
- ルールの追加
- SSH *アクセス元を絞るため、ソースをマイIPを選択しましょう。
- HTTP
ステップ 7: インスタンス作成の確認
- 起動
- キーペアの作成 *すでに作っているなら既存のキーペアを使用しましょう。ECSにSSHでログインする際に必要になります
SSHで接続
- キーペアファイルを配置
- アクセス権を400に設定
- 接続
ssh -i ~/.ssh/[SHHキー.pem] ec2-user@[ドメイン名かIPアドレス(パブリック DNS (IPv4))]
■参考記事
MacのターミナルでEC2にSSHでログインするNginxのインストール
yum update
$ sudo yum update -yNginxをインストール
*適宜、ローカルのバージョンに合わせてインストールしてください。$ sudo amazon-linux-extras install nginx1.12 -yNginxを起動
$ sudo systemctl start nginxIPv4パブリックIPをブラウザに入力すると下記の画面が表示されます。
PHPのインストール
PHPのインストール
*適宜、ローカルのバージョンに合わせてインストールしてください。$ sudo amazon-linux-extras install php7.3下記のコマンドでインストールされているか確認
$ php -vNginxを使用するため、PHPの設定情報を変更
$ sudo vi /etc/php-fpm.d/www.conf/etc/php-fpm.d/www.conf# 略 ; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. ; RPM: apache user chosen to provide access to the same directories as httpd user = nginx # デフォルトは「user = apache」 ; RPM: Keep a group allowed to write in log dir. group = nginx # デフォルトは「user = apache」 # 略Nginxを再起動
$ sudo systemctl restart nginx■参考記事
AWS EC2 + nginx + Laravel + RDS(PostgreSQL)の環境を構築するLaraveのリポジトリをclone
Composer
Composerをインストール
$ cd ~ $ sudo curl -sS https://getcomposer.org/installer | php # コンポーザーのインストール $ sudo chown root:root composer.phar $ sudo mv composer.phar /usr/bin/composer # パスを通す $ composer # インストールされたか確認php-mbstringとphp-xmlをインストール
$ sudo yum install php-mbstring php-xml -yGit
Gitのインストール
$ sudo yum install git # インストール $ git --version # インストールされたかバージョン確認GitHubのリポジトリからclone
ディレクトリ作成
$ sudo mkdir /var/www $ cd /var/wwwclone
*今回はHTTPS方式でクローンしましたが、もちろんSSH方式でも可能です。$ sudo git clone https://github.com/[ユーザー名]/[リポトリ名].gitNginxの設定情報の変更
$ sudo vi /etc/nginx/nginx.conf/etc/nginx/nginx.conf# 略 http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; server { listen 80 default_server; listen [::]:80 default_server; server_name _; root /var/www/リポジトリ名/public; # ここを修正 # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { try_files $uri $uri/ /index.php$is_args$args; # ここを修正 } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } # Settings for a TLS enabled server. # # server { # listen 443 ssl http2 default_server; # listen [::]:443 ssl http2 default_server; # server_name _; # root /usr/share/nginx/html; # # ssl_certificate "/etc/pki/nginx/server.crt"; # ssl_certificate_key "/etc/pki/nginx/private/server.key"; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 10m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # # # Load configuration files for the default server block. # include /etc/nginx/default.d/*.conf; # # location / { # } # # error_page 404 /404.html; # location = /40x.html { # } # # error_page 500 502 503 504 /50x.html; # location = /50x.html { # } # } } # 略Nginxを再起動
$ sudo systemctl restart nginx各種インストール、設定
$ cd /var/www/リポジトリ名 $ sudo composer install # composerのインストール $ sudo chmod -R 777 storage/ # 権限変更.envファイルの作成
$ sudo touch .env.envの情報を適宜変更してください。DBの設定はRDSの設定後に行います。
/var/www/リポジトリ名/.envAPP_NAME=Laravel APP_ENV=local APP_KEY= APP_DEBUG=true APP_URL=http://localhost LOG_CHANNEL=stack DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE= DB_USERNAME= DB_PASSWORD= BROADCAST_DRIVER=log CACHE_DRIVER=file QUEUE_CONNECTION=sync SESSION_DRIVER=file SESSION_LIFETIME=120 REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 MAIL_DRIVER=smtp MAIL_HOST=smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS=null MAIL_FROM_NAME="${APP_NAME}"これでIPv4パブリックIPをブラウザに入力すればLaravelの画面が表示されると思います。
■参考記事
Laravelのプロジェクトをgit cloneしたときの手順RDS
設定情報の値は適宜情報を入力し、作成を行ってください。
参考までに私は下記の画像の値を入力しました。
Virtual Private Cloud (VPC)、サブネットグループ、既存のVPCセキュリティグループはEC2の設定に合わせました。
最初のデータベース名の値は.envファイルを設定する際に使用します。セキリティグループ
今回のRDSのセキリティグループの設定はEC2と同一のものにしました。
セキリティグループのインバウンドルールの設定は、「HTTP」「SSH」を既存で追加していますので、ここで新たに「MYSQL/Auora」を追加しましょう。
.envの設定、マイグーレション
.envの設定に先ほどのRDSの設定した値を入力します。
$ sudo vi .env/var/www/リポジトリ名/.envDB_CONNECTION=mysql DB_HOST=エンドポイント DB_PORT=3306 DB_DATABASE=最初のデータベース名 DB_USERNAME=マスターユーザー名 DB_PASSWORD=マスターパスワード私は誤ってDB_DATABASEの値をDBクラスター識別子で設定してかなりハマりました。
最後にマイグレーションを実行
$ sudo php artisan migrateこれでIPv4パブリックIPをブラウザに入力するとデータベースが繋がった状態でLaravelの画面が表示されます。
全体像の参考
- 投稿日:2020-09-13T12:10:47+09:00
HerokuにデプロイしたはいいがDBはどうやって使うのだ?(ClearDBの使い方)
先日、開発初期段階でLaravelアプリをHerokuにデプロイしました。→まだ全然しょぼいLaravelアプリをHerokuにデプロイしてみた
デプロイできたのはいいものの、ClearDBの使い方が全然わからず途方に暮れまして、ひょっとしたら僕と同じように悩む初学者の方がいるかもしれないので、参考になればと思いメモしておきます。
使うもの
Heroku, ClearDB MySQL, MacOSClearDBにもphpMyAdminみたいにGUIで操作できるツールはあるのか?
→あります。MySQL Workbench、Sequel Proなどです。
Herokuのサイト上の、Resources > Add-ons で ClearDB MySQLをクリックすると、NAVISITEというClearDBらしきサイトにジャンプできます。このページのHow to Connectに下記のように書いてあります。
(このNAVISITEには、ターミナルから$ heroku addons:open cleardb
でも行けます。
)Managing Your Databases
If you want to manage the tables, data and other settings in your Navisite database, we recommend that you use commonly known Graphical tools such as Oracle's MySQL Workbench, Sequel Pro for Mac OS X, or Navicat. You can also use any of the bundled MySQL tools, such as the mysql and mysqldump command-line utilities.MySQL Workbench
今回はWorkbenchを使うことにしました。こちらから簡単にダウンロードできます。DB設計に便利なER図を描ける便利ツールもついてます。
Workbenchを開いたら、+ボタンで新しいConnectionを作成します↓
開いたら下記項目を書き込みます。基本的には、HerokuのClearDBの情報を入れれば良いですが(Herokuページ > Settings > Config Vars参照)、Connection Nameは適当でいいっぽいです。とりあえず私はプロジェクト名を入れておきました↓
作成できたConnectionをクリックすると、私はなんかこんなwarningが出ますが...
Continue anywayすると、こんなUIに辿り着きます↓
↑やや操作が直感的ではないですが、ここでテーブルの設定を見たり、SQL文を打ち込んだりできます。というわけで、GUIツールがあることはわかりましたが、ターミナルでも操作できるのでしょうか。
ClearDB MySQLはターミナルでも操作できるのか?
→できます。
ただし、至極当然な話ですがMySQLがPCにインストールされてないとできません。ただし、MAMPのMySQLとは別物です(→私みたいな初学者にはこういうところが至極当然ではなく地味にわからなくて苦労します...!!)。
ターミナルでmysqlコマンドを何か打ってみて(例えばMySQLのバージョンを参照する
$ mysql --version
$ mysql -V
など)、command not found
と出てきたらMySQLが入ってないです。HomeBrew(MacOS用のパッケージ管理システム。インストールを簡単にやってくれるやつ)でインストールできます↓(HomeBrewをインストールしてない方はそれが先ですね)$ brew install mysqlインストールできたら、まずサーバーを立ち上げます。私はログインしてからやるものだと思い、
ERROR 2013 (HY000): Lost connection to MySQL server during query
エラーに直面してググりまくったり公式ドキュメント読んだりしても解決せず死にかけてましたが、なんてことはない。まず始めにやる作業だったみたいです。$ mysql.server start↑この作業でSUCCESS!と出たらOKです。
次はログイン。ちなみにこの作業を行う時、ディレクトリはLaravelのアプリがある所じゃなくても大丈夫そう(←ここもMAMPと違うところ?)。-uに続けてDB_USERNAME、-hに続けてDB_HOSTを入力。HerokuのSettingsのConfig Varsを見ればよいですね。
$ mysql -u DB_USERNAME -h DB_HOST -p↑Enterした後に求められるパスワードも同様にDB_PASSWORDを。
ログインすると、プロンプトが
>mysql
に変化します。
まず、DBを選択します↓。データベース名がわからなくなってしまったら、Heroku > Settigns > Var Configsを参照しましょう。use データベース名;↑これをしないと
No database selected
というエラーになってしまいます。もしくは先ほどMySQLにログインした時に、-pの後にDB名を入れておくっていう手もあるみたいです。これでHerokuのClearDBがターミナルからでも操作できるようになりました。
めでたし、めでたし。余談
MySQLを使い始めるのに必要そうなコマンドを少しメモって終わりたいと思います。
テーブルの一覧を見たい時は↓
show tables;あるテーブルのカラムを見たい時は↓
desc テーブル名;↑descって読みづらくて覚えにくいですが、descriptionの略みたいです。
- 投稿日:2020-09-13T09:38:46+09:00
MySQL入門!基礎編(データベース用語 ~ TABLE作成まで)
環境
Windows 10
MySQL : version(5.7.28)
使用アプリ
コマンドプロンプト(Windowsマーク押して「cmd」って打ったら出てくるやつ)
データベース用語を整理
table
さまざまな情報(データ)が入った一つひとつの表のことを指す用語
column
row
record
データ(field)が入った一行一行のことを指す(※rowとは別物)
field
TABLEを作成するために必要なStep
例 : 投稿に関するテーブルを作成する場合
CREATE TABLE posts ( message VARCHAR(140), likes INT ); INSERT INTO posts (message, likes) VALUES ("HELLO", 22);1行目
CREATE TABLE
でテーブル名をつける
2行目, 3行目 列見出しにあたるfieldの名前を入れる
VARCHAR(140)
⇒ 最大140字までの文字列
INT
⇒ 「likes」には整数が入る5行目以降
INSERT
を使ってrecordを挿入していくTABLE構造の確認
DESC posts;TABLEの一覧を表示
SHOW TABLES;TABLEの中身を確認
SELECT * FROM posts;複数のレコードを挿入する
INSERT INTO posts (message, likes) VALUES("WORLD", 10), ("hogehoge", 3);クエリを書く際の注意点
- 慣習的にSQLは大文字で書くとされている
- 自分で付けるtable名やfield名は小文字で書く
- 文末(命令の終わり)には必ず
;
を付ける- 文字列や日付データは
"
もしくは、'
で囲む
- 投稿日:2020-09-13T08:49:51+09:00
Web系の定番ソフトウェアのバージョンを確認する。
次のコマンドを発行する。
CentOS
cat /etc/redhat-release
Apache
httpd -v
Java
java -version
Python
python --version python3 --versionPHP
php -v
WordPress
cat wordpress/wp-includes/version.php # $wp_versionの値を確認する。MySQL
-- MySQL接続後に次のSQL文を発行する。 select version();Oracle Database
-- OracleDB接続後に次のSQL文を発行する。 select * from v$version;備考
本記事はブログ「雑用エンジニアの技術ノート」からの移行記事です。先のブログは削除予定です。
- 投稿日:2020-09-13T02:16:59+09:00
Rails本番環境に自動デプロイしたらwe're sorry, but something went wrong.
恐怖のwe're sorry, but something went wrong.
個人アプリを開発したぞ!
そして、追加実装したから設定済みの自動デプロイで本番環境のアプリを更新!
さぁ、本番環境への反映をチェックと......。we're sorry, but something went wrong.
何.....だと....! ?´д` ;
本番環境でアプリが開かない!? :(;゙゚'ω゚'):そのエラーに見事にハマった。
という事で、エラー解決に至るまでの死闘を描く。herokuへデプロイした際の同じエラー解決記事は結構見つかったものの、意外にMySQLでの解決策は見つからなかった。
今回はMySQLでの対処法だが、we're sorry, but something went wrong.エラーの全てが今回の内容で解決する訳ではないので、あくまで参考に留めて欲しい。
特に追加実装などでGemを増やした人は特に注意して欲しい
開発環境
- Ruby on Rails6
- DBはMySQL
- AWSにEC2インスタンスを使用してデプロイ済み
- Capistranoで自動デプロイ設定済み
というのが前提です。
事件の始まり(自動デプロイ直後)
ふと思い立って追加実装する為にGemを追加した。
記述を終えてローカル環境での動作を確認したので、私はコミットしてマージを終えた.....。本番環境へ反映させる為に、以下のコマンドをターミナルのローカルディレクトリで入力。
$ bundle exec cap production deploy無事にデプロイが完了したメッセージがターミナルに表示されたので、本番環境でのチェックをしたところ、上記画像のようにアプリが開かなくなってしまった.....。
何故だ!?((((;゚Д゚)))))))
ローカルでは問題なくても、いざ本番環境となるとエラーが起きてしまうパターンはある。
エラー文はググれば何となく分かっても、肝心の解決策が浮かばない。となると、エラーが起きている箇所のログをチェックする必要がある。
容疑者Logの捜査(本番環境のlogを追え!)
ローカル環境でLogをチェックする場合は、log/development.rbをチェックする。
ここで自身のLogが追えるので、ファイルを下にスクロールしていけば最新のLogへとたどり着ける。しかし今回の問題は本番環境なので、本番環境のログをチェックしないといけない。
その為にはEC2へログインする事になる。しかし、久しぶりでコマンドがうろ覚え.....。
以下を順にローカルのターミナルに入力していく。 ①mkdir ~/.ssh ②cd .ssh/ ③lsコマンドで、EC2で作成済みの<鍵名>.pemが表示される。 ④chmod 600 <鍵名>.pem ⑤ssh -i <鍵名>.pem ec2-user@<EC2で発行したElastic IP> すると、 __| __|_ ) _| ( / Amazon Linux 2 AMI ___|\___|___| と、上記の表示が出てEC2へのログインが完了。次がいよいよ本番環境のlogのチェック ①$ cd /var/www/<リポジトリ名> アプリのディレクトリへ移動 ②ls 再びlsコマンドを入力。 ③cd current 複数のファイルの中にcurrentがあるので移動。 ④cd log ⑤ls laコマンドを入力すると、production.log unicorn.stderr.log unicorn.stdout.log これらのlogファイルが表示される。 ⑥[ec2-user@****** log]$ cat 'production.log' 今回は本番環境のエラー内容を知りたいので、上記を入力する事で本番環境のlogが追える。 その中で表示されるエラー内容をチェックしましょう!終わらぬ事件(失敗する自動デプロイ)
エラー内容を見つけ、修正したら改めてmasterへコミット。
そして自動デプロイ!これがそのまま成功すればエラー解決となるが、そうは問屋がおろさなかった。
困ったことに自動デプロイが失敗するようになってしまった。何故だ!?((((;゚Д゚)))))))
ふと、ここで思った。
事件(エラー)が発生するようになったのは、Gemを増やしてから。ならば、bundle installしてみよう。
ただし、ローカルと本番環境の両方で。その結果、
本番環境 Bundle complete! 34 Gemfile dependencies, 115 gems now installed. Use `bundle info [gemname]` to see where a bundled gem is installed. ローカル Bundle complete! 36 Gemfile dependencies, 126 gems now installed. Use `bundle info [gemname]` to see where a bundled gem is installed.ローカル環境でのGemが36個に対し、本番環境は34個と反映されていなかった。
bundle installしても更新されない。どうすればいい?((((;゚Д゚)))))))
そこで参考になったのがこの記事。平和な日常(EC2インスタンスやデータベースの再起動)
つまりは自動デプロイも繰り返すと本番環境に反映しなくなってしまうという事が分かった。
【対処法】
①AWSのマネージメントコンソールにログインEC2 → インスタンス → 該当のインスタンスをクリック → アクションのインスタンスの状態 → 再起動 を行います。
②ターミナルからEC2にログイン後、以下のコマンドを実行してnginxとMySQLを再起動しよう。
EC2サーバーで入力 $ sudo service nginx start $ sudo service mysqld startもしも、MySQLではなく、mariaDBを使っていたら下記でデータベースを再起動しよう。
EC2サーバーで入力 $ sudo systemctl restart mariadbこれらのコマンドで、データベースやAWSインスタンスを再起動すれば自動デプロイが成功し、Gemのbundle installも反映されました。
今回はGemを起因としたエラーだったので、同じエラーでも全く解決策が違う可能性もあり得ます。
あくまで一つの手段として、インスタンスやデータベースの再起動をした上で、再度デプロイする事でサーバーが開かないエラーからは逃れることが出来る事もあるでしょう。
以上です。