20211126のMySQLに関する記事は5件です。

MySQLエラー: MySQLに接続できない

エラー phpMyAdminを開くとmysqli_real_connect(): (HY000/2002): Connection refusedの表示がでる。 laravelでビューを開くとSQLSTATE[HY000] [2002] Connection refused (SQL: select * from 'sessions' where 'id' = y1F7Xe6g7pxGxGJo9AFhbakk2gl3RNjJCm9ToV7Z limit 1)のエラーがでる。 MySQLにアクセスしようとしたら下記エラーが表示される。 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 対処のためにしたこと mysql.server start パスワードの入力を求められたが、心当たりのあるパスワードでは開かない(忘れただけ?)。 パスワード不要で開けるようにする 「my.csf」を開く。 「skip-grant-tables」を追記して保存。 my.csf # vi /etc/my.cnf [mysqld] sql_mode=NO_ENGINE_SUBSTITUTION skip-grant-tables //これを追記 ターミナルを開き直す。もう一度以下を実行 mysql.server start 新たなエラーが表示される。PIDファイルがないとのこと。(このときはMySQLの起動自体には成功した。) ERROR! MySQL server PID file could not be found! Starting MySQL .. SUCCESS! touchコマンドでPIDファイルを作成する。はそれぞれのターミナルに表示されているものを入力してください。 touch <username><devicename>.local.pid MySQLサーバを再起動する。 mysql.server restart これで解決した。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MySQLエラー:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

エラー phpMyAdminを開くとmysqli_real_connect(): (HY000/2002): Connection refusedの表示がでる。 laravelでビューを開くとSQLSTATE[HY000] [2002] Connection refused (SQL: select * from 'sessions' where 'id' = y1F7Xe6g7pxGxGJo9AFhbakk2gl3RNjJCm9ToV7Z limit 1)のエラーがでる。 MySQLにアクセスしようとしたら下記エラーが表示される。 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 対処のためにしたこと mysql.server start パスワードの入力を求められたが、心当たりのあるパスワードでは開かない(忘れただけ?)。 パスワード不要で開けるようにする 「my.csf」を開く。 「skip-grant-tables」を追記して保存。 my.csf # vi /etc/my.cnf [mysqld] sql_mode=NO_ENGINE_SUBSTITUTION skip-grant-tables //これを追記 ターミナルを開き直す。もう一度以下を実行 mysql.server start 新たなエラーが表示される。PIDファイルがないとのこと。(このときはMySQLの起動自体には成功した。) ERROR! MySQL server PID file could not be found! Starting MySQL .. SUCCESS! touchコマンドでPIDファイルを作成する。はそれぞれのターミナルに表示されているものを入力してください。 touch <username><devicename>.local.pid MySQLサーバを再起動する。 mysql.server restart これで解決した。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MySQL CONCATでNULLがあると結合できない

前置き 仕事である特定の文言をあるカラムに追加してほしいと言われ、 大量にデータがあったため、UPDATE文でアップデートすることに。 そのカラムには既に文言が入っている場合もあり、文言が入っていた場合は活かしてほしいとのことだったので、 CONCATを使って文字を結合することで対応をしました。 CONCATの使い方 UPDATE テーブル名 SET カラム名 = CONCAT('追加する文言' , カラム名) WHERE id = 1; ※CONCAT()内のカラム名は既に入っている文言を引っ張ることができます。 このSQLでテーブルは下記のように更新されます。 id カラム名 1 '追加する文言''元々入っている文言' 分かりやすく説明すると、 例えば、ある人がランチで食べたメニューのデータベースがあるとします。 日付 メニュー 11/15 ラーメン 11/18 ラーメン 11/19 ラーメン 11/24 ラーメン やっぱり何のラーメンか付けておけばよかった~という時、 下記のようにCONCATを使えば、何のラーメンだったか追加することが出来ます。 UPDATE ランチメニュー SET メニュー = CONCAT('醤油' , メニュー) WHERE 日付 = '11/15'; UPDATE ランチメニュー SET メニュー = CONCAT('二郎系' , メニュー) WHERE 日付 = '11/18'; UPDATE ランチメニュー SET メニュー = CONCAT('塩' , メニュー) WHERE 日付 = '11/19'; UPDATE ランチメニュー SET メニュー = CONCAT('家系' , メニュー) WHERE 日付 = '11/24'; 日付 メニュー 11/15 醤油ラーメン 11/18 二郎系ラーメン 11/19 塩ラーメン 11/24 家系ラーメン 二郎系の翌日はさっぱりとした塩に限りますね。。 カラムがNULLだった場合は…? 話は戻りますが、 今回、私はUPDATEしたいカラムがNULLだった場合を考慮せずUPDATEかけたところ、 NULLだったカラムには追加する文言が入るどころか、NULLのままになってました。 CONCATは引数のどちらかにNULLが入っていた場合はNULLを返すようです。 やっちまったぜ そんな時はCOALESCE を使ってNULLを空文字に変換すれば文字の結合が可能です! COALESCEの使い方 UPDATE テーブル名 SET カラム名 = CONCAT('追加する文言' , COALESCE(カラム名, '')) WHERE id = 1; これでカラムがNULLの場合は、空文字を返し文字を結合するため、追加したい文言だけ追加される形となります。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Railsのセットアップの時、mysql2というgemのせいでbundle installができない時に見る記事

概要 Rails + MySQLで開発環境を構築する際に発生しうるそこそこややこしいエラーについて、自分なりにまとめてみました。 ※Railsの中で、mysql2というgemを使用してます。 発生したエラーについて Railsのプロジェクトをrails newコマンドで作成後、bundle installした際に下記のエラーが発生することがある。 ...省略 Gem::Ext::BuildError: ERROR: Failed to build gem native extension. ...省略 linking shared-object mysql2/mysql2.bundle ld: library not found for -lssl clang: error: linker command failed with exit code 1 (use -v to see invocation) make: *** [mysql2.bundle] Error 1 make failed, exit code 2 Gem files will remain installed in /var/folders/mj/93db0vd975799gg9w3nnr3_r0000gn/T/bundler20190503-14531-xlyd6cmysql2-0.5.2/gems/mysql2-0.5.2 for inspection. Results logged to /var/folders/mj/93db0vd975799gg9w3nnr3_r0000gn/T/bundler20190503-14531-xlyd6cmysql2-0.5.2/extensions/universal-darwin-18/2.3.0/mysql2-0.5.2/gem_make.out An error occurred while installing mysql2 (0.5.2), and Bundler cannot continue. Make sure that `gem install mysql2 -v '0.5.2'` succeeds before bundling. In Gemfile: mysql2 このエラーメッセージで着目したいのは、この一行である。 ld: library not found for -lssl これはどうやらopensslというライブラリに起因するエラーのようです。 (※厳密にはlibsslだそうです、、、) このlibsslは、どうやらGCC(GNU Compiler Collectionの略称)のopensslへのリンクオプションらしいです。(参照元) いろんな記事にて、 $ bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib" このコマンドを実行すると解決する!!!みたいなことがよく書かれていると思いますが、これは上記のopensslのライブラリの場所を--with-ldflagsというオプションに渡してあげるとopensslというライブラリ自体を参照するようにしてくれるみたいです。 ですが残念ながら、これでもまだ解決できないケースがあります。 引用元 MacのHigh Sierraから、デフォルトのOpenSSLがOpenSSLからLibreSSLになっているそうで、OpenSSLの諸々の問題を鑑みれば英断らしいのですが、そうはいっても開発環境の様々なツールがOpenSSLに依存しておりアレコレと新たな問題を引き起こすため、様々なツールのほうがLibreSSLに対応するまでさくっとOpenSSLに出戻る方法が下記です。 要するに、どうやらHigh Sierra以降はデフォルトがopensslになっていないそうです。 故に、冒頭にあったopensslというライブラリへの参照が見つからないみたいなエラーが発生してしまいます。 実際にOpenSSLのバージョンを覗いてみると、、、 $ openssl version LibreSSL 3.0.0 7 このようにLibreSSLになってしまっているそうですね、、、、、 この問題の解決方法として、opensslでデフォルトのLibreSSLからOpenSSLに変更する必要があります。 このやり方に関してはシンプルにパスを通すだけで良いそうです。 $ echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.zsh_profile ターミナルを再起動すると下記のように、OpenSSLに変更することができました。 $ openssl version OpenSSL 3.0.0 7 sep 2021 ここまでできたらbundle installコマンドが正常に動作すると重います!!! まとめ MySQLのセッティング周りはわりかしややこしいところが多くて、脳死しながらエラー解決しがちになってしまいますが、そこは堪えてエラーメッセージを一つづつ丁寧に読んでみましょう。 なんだかんだ、それがエラー解決の近道だったりしますよね (自戒の意味も込めて)。 参考記事一覧 bundle installでmysql2がエラーになる件 (Qiita) macでmysql2がbundle installできない時 (Qiita) macOS High Sierra(OSX)のOpenSSLをデフォルトのLibreSSLからOpenSSLに変更する (Qiita)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

WindowsからPHPを使ってSSH越しにMySQLを叩く

以下のコマンドで SSH のフォワーディングをしておく ssh ユーザー名@ホスト -i 秘密鍵 -L リッスンポート:宛先ホスト:宛先ポート これで取りあえず動く $dbcon = new mysqli('127.0.0.1:9999', 'username', 'pw', 'database', 3306); $res = $dbcon->query('show tables;'); var_dump($res->fetch_all());
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む