- 投稿日:2020-10-10T20:04:05+09:00
[Rails5.2] Docker内のMysql 5.7の絵文字対応(文字コードをutf8mb4に変更する)
はじめに
Ruby on Railsでポートフォリオを作成しているRails初学者です。
今回はタイトルの通り、tableに絵文字情報を保存するためのmysqlをutf8mb4にした際の覚書です。Youtube Data APIから動画タイトルを保存しようとしたらエラーが出た。
ActiveRecord::StatementInvalid in VideosController#refresh Mysql2::Error: Incorrect string value: '\xF0\x9F\x94\xB5\xE8\x87...'絵文字が入っているタイトルがいくつかあり、それが影響でエラーが出たようです。
mysql上のdbの文字コードを見るとuft8になっており、これを変更しなければいけない様子・・・
ひとまず色々なコードを参考にして以下の通りに実施しました。環境
Docker for mac を使ってコンテナ内でRailsを開発しています。
ruby 2.4.5 mysql 5.7.31 Ruby on rails 5.0.7.2流れ
(準備:dumpする)
1. my.cnfを変更する
2. mysqlをリスタートする
3. ActiveRecordにオプションを追加
4. database.ymlの変更
5. docker-compose.ymlの変更し、コンテナの再起動
6. db:migrate:resetを実行
7. dumpデータのrestore準備:dumpする
そもそもこの作業を行うまでdumpという言葉を知らなかったのですが、dumpとはDBのテーブル内の情報をSQLの形で出力することだそうです。(ちなみに最後に行うrestoreは、dumpした情報をDBに投入すること)
今回データベース設定を変更し、各テーブルの文字コードをutf8mb4にするので、一旦データをファイルとして落としておいて、設定変更後に投入するという形をとりります。
dump/restoreを簡単に行うために以下のgemを使用します。
Gemfilegem 'yaml_db'今回使用するのはyaml_dbという、ダンプでyaml形式ファイルを出力してくれるgemです。
GitHub - yamldb/yaml_dbdumpするには以下のコマンドをすればOK
Terminalbundle exec rails db:data:dumpコマンド実行後、
db/data.yml
にファイルが出力されています。
こんな感じで、基本的にはテーブル名、カラム情報、レコードの順番で出力されます。data.ymlvideos: columns: - id - name - url - upload_at - created_at - updated_at records: - - 1 - "【衝撃】ボーナス支給額をクイズで決める会社" - https://www.youtube.com/watch?v=42ofwfioMFM - 2020-10-09 09:00:00.000000000 Z - 2020-10-10 08:07:38.000000000 Z - 2020-10-10 08:07:38.000000000 Z :以下で準備はOKです。
1. my.cnfを変更する
my.cnfファイルを以下のように設定します。
記載されている内容をきちんと理解したかったため、1行ずつ見ていきました。my.cnf[mysql] default-character-set=utf8mb4 #文字コードの設定 [mysqld] #mysqld Mysqlサーバの設定 character-set-server = utf8mb4 #文字コードの設定 skip-character-set-client-handshake #client側で指定した文字コードを無視するためのもの collation-server = utf8mb4_general_ci #ソート順の指定 init-connect = SET NAMES utf8mb4 #クライアントからserverへの送信に使用される文字セット指定各項目について、細かく見ていきます。
[mysql]と[mysqld]
mysqldとは、MySQLサーバとも呼ばれる、mysqlでの各種操作を受け持っているメインプログラムのこと。
mysql側の操作は必ずこのmysqldよりされるため、ここに各種設定が必要。
skip-character-set-client-handshake
character-set-client-handshakeとは、クライアント側の文字コードをMySQL側に反映する行為。これをスキップすることで、uft8mb4への設定ができる。
collation-server = utf8mb4_general_ci
collationは、照合順序:ソート順のこと。_で区切られた各単語でそれぞれ設定。
詳細は以下を参照
【MySQL】照合順序とは?
init-connect = SET NAMES utf8mb4
クライアントからサーバへの送信に使用される文字コードの指定
詳細は以下を参照
10.1.4 接続文字セットおよび照合順序2. mysqlをリスタートする
ひとまず、この設定を反映するためにmysqlをリスタートします。
Docker内のコンテナに入り以下のコマンドを実行します。もともとの設定を一応確認しておきます
terminalmysql>status; :(中略) Server characterset: utf8 Db characterset: utf8 Client characterset: utf8 Conn. characterset: utf8 :utf8になっています。
というわけで、一旦リスタートして、もう一度みてみます。terminalmysql>service mysql restartterminalmysql>status :(中略) Server characterset: utf8mb4 Db characterset: utf8mb4 Client characterset: utf8mb4 Conn. characterset: utf8mb4 :設定できました!
3. ActiveRecordにオプションを追加
次に、ActiveRecordのcreate_tableが実行される際に、utf8mb4を使って登録するよう設定していきます。
新しく
config/initializers/utf8mb4.rb
を作成し、以下のコードを記載。
config/initializersにファイルを投入すると、Railsが起動する前に初期設定として読み込まれるようになります。config/initializers/utf8mb4.rb#optionを設定するmodule module Utf8mb4 def create_table(table_name, options = {}) table_options = options.merge(options: 'ENGINE=InnoDB ROW_FORMAT=DYNAMIC') super(table_name, table_options) do |td| yield td if block_given? end end end ActiveSupport.on_load :active_record do module ActiveRecord::ConnectionAdapters class AbstractMysqlAdapter #最初にmodule utf8mb4を実行し、その後既存のメソッドを実行(super) prepend Utf8mb4 end end end4. database.ymlの変更
以下の内容を追加ないし変更します
config/database.ymlcharset: utf8mb4 encoding: utf8mb4 collation: utf8mb4_general_ci5. docker-compose.ymlの変更
Dockerの設定ファイルも以下のように変更します。
docker-compose.yml: db: image: mysql:5.7 command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci #utf8mb4をセット container_name: コンテナ名 volumes: - ./my.cnf:/etc/mysql/conf.d/my.cnf #my.cnfを読み込むよう設定 :この状態で、一度コンテナを再起動します。
6. db:migrate:resetを実行
ここまでのDBへの設定を反映させるため、DBをリセット→migrateします。
7. dumpデータのrestore
最後に、冒頭でdumpしたデータをもう一度投入すれば完了です。
以下のコマンドでrestoreできます。terminalrails db:data:load以上で設定は完了です!
終わりに
色々と設定してきましたが、dumpなどの機能を知ることができたので、いい勉強になりました。
全面的に参考にさせていただいたサイト様
大変ありがとうございます・・・!
・MySQLのencodingをutf8からutf8mb4に変更して寿司ビール問題に対応する
・RailsのDBバックアップ(gem:yaml_db)
・Rails5で絵文字を保存する utf8mb4 (docker)
- 投稿日:2020-10-10T18:21:18+09:00
【MySQL】MySQL Workbench 使い方
この記事の内容
- MySQL Workbenchのダウンロード方法
- DB接続方法
- クエリの実行方法
- EXPLAINの実行方法
- テーブルの中身を表形式で確認する方法
- テーブル定義の確認方法
- DDLの確認方法
- DBからER図を作成する方法
前提
- MySQLがインストール済みであること。
- DBとテーブルが作成済みであること。
ダウンロード方法
Homebrewでインストールする
$ brew cask install mysqlworkbenchHomebrew Formulaeで検索できます。
公式ページからダウンロードする
公式ページ から、MySQL Workbench をダウンロードする。
3. 「No thanks, just start my download.」を押下。
4. FinderからMySQL Workbenchを起動する。
起動できない場合
Apple support を参考に、App のセキュリティ設定を確認する。
FinderでControlキーを押しながら、アプリケーションアイコンをクリックし、ショートカットメニューから「開く」を選択、押下する。
基本操作
DB接続
1. MySQL Connections の右側にある「+」ボタンを押下。
- HostName : localhostのIPアドレス (デフォルトでフォームに入力されている。)
mysql> show variables like 'hostname';
- Port : MySQLデフォルトポートの3306 (デフォルトでフォームに入力されている。)
mysql> show variables like 'port'
UserName : root(デフォルトでフォームに入力されている。)
Connection Name : 識別しやすい名前を入力。(今回はsampleにした。)
3. 「TestConnection」を押下。
UserNameに紐づくパスワードを入力し、接続ができることを確認。
成功するとポップアップが出てきます。
設定が完了したら「OK」を押下。
4. MySQL Connectionsに今設定したDBが表示されていることを確認する。
5. MySQLサーバーの起動
下記コマンドを実行。$ mysql.server start Starting MySQL SUCCESS!6.接続確認
MySQL Connectionsに表示されている設定したDBを押下。
通常のクエリ実行する
かみなりマークを押下するとクエリが実行され、結果が表示される。
クエリの一部分を実行する
入力したクエリの一部分だけを実行したい場合は、実行したい部分をカーソルで選択した状態で、カーソル付きのかみなりマークを押下する。(今回はselect文のみを実行する。)
EXPLAINの実行
EXPLAINを実行したい文を記載し、虫眼鏡付きかみなりマークを押下。クエリの一部を実行する場合は、実行したいクエリをカーソルで選択してから、虫眼鏡付きかみなりマークを押下。
テーブルの中身を表形式で確認
確認したいテーブルの横の、表マークを押下。
自動でクエリが作成、実行され、結果が表示される。
テーブル定義の確認
DDLの確認
確認したいテーブル名の横にある、設定マークを押下。
表示されたタブから「DDL」を選択する。
既存のDBからER図を作成
1. クエリ実行画面から、「Database」->「Reverse Engineer...」を選択。
2. DBを選択
ER図を作成したいDBを選択し、「Continue」を押下。
4. 接続するDBスキーマを選択し、「Continue」を押下。
10. ⌘Sでファイルを保存する。
まとめ
MySQL Workbenchめっちゃ便利!!!!!!!
- 投稿日:2020-10-10T15:27:19+09:00
MySQL ユーザ名&ホストの変更
- 投稿日:2020-10-10T13:35:01+09:00
MySQLで任意の順序でソートしたい場合
はじめに
今回はMySQLを例にして書きますが、PostgreSQLやOracleでも同様のことはできるはずです。
テーブルに持たせる
頻繁にソートを使用する場合、そもそもソート順をテーブルに持たせるのが一般的だと思います。
SELECT * FROM item ORDER BY item.sort_order;しかし「そこまでするほどでもない」「集計で使いたいだけ」といった場合もあるかと思うので、SQL文の中で順序を決定する方法を紹介します。
CASE
文を使う
CASE
文で優先順位を決めてあげれば簡単に実現することができます。SELECT * from item ORDER BY CASE WHEN item.size = 'SS' THEN 0 CASE WHEN item.size = 'S' THEN 1 CASE WHEN item.size = 'M' THEN 2 CASE WHEN item.size = 'L' THEN 3 CASE WHEN item.size = 'LL' THEN 4 CASE WHEN item.size = 'XL' THEN 5 ENDしかし、このように値が増えると読みづらくなってしまうのが難点です。順番を変えたくなった時もソート順を1から振り直すのが多少面倒に思えます。
LOCATE()
関数を使うもっと簡潔に記述する方法として、
LOCATE()
関数を使う方法があります。文字列が見つかった最初のオフセットを返してくれるので、検索文字列の出現順にソートすることができます。しかし下記の例はうまくいきません。SELECT * from item ORDER BY LOCATE(item.size, 'SS S M L LL XL');文字列が部分一致してしまう場合は要注意
上記の例だと、
S
を検索した場合、最初にSS
の1文字目に一致してしまい、思った結果が得られないという問題があります。デリミタを使う
まず思いつく解決策はデリミタを前後につけることです。
SELECT * from item ORDER BY LOCATE(CONCAT(' ', item.size, ' '), ' SS S M L LL XL '); -- 検索対象文字列の前後にもスペースが必要パディングする
あるいは、この現象は
item.size
の文字列長が違うことで起こるため、LPAD()
などでソートキーの長さを揃えてしまうことでも解決できます。SELECT * from item ORDER BY LOCATE(LPAD(item.size, 2, '_'), 'SS _S _M _L LL XL');他によい方法があったら教えて下さい。
- 投稿日:2020-10-10T12:27:15+09:00
MySQL起動エラーの対処の仕方【Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.21.dylib (LoadError)】
前回
herokuを使ってデプロイ中に、急にMySQLとの接続が出来なくなった。
原因は、恐らくMySQLのバージョンが、Homebrew で 8.0.をインストールしてしまい MySQLが ver8.0 にアップデートされていた事が原因(だと思う)
奮闘の上、ようやくMySQLの起動に成功した。これでようやくrails s
でアプリを起動出来ると思ったが、また新たなエラーが出た。これは前回の記事の続きになります。
MySQL起動エラーの対処の仕方【Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)】
エラー内容
rails s
が上手く行かず、ターミナル上に出たエラー文がこちら/Users/kawaiyasuhiro/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.7/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require': dlopen(/Users/kawaiyasuhiro/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/mysql2-0.5.3/lib/mysql2/mysql2.bundle, 9): Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.21.dylib (LoadError) Referenced from: /Users/kawaiyasuhiro/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/mysql2-0.5.3/lib/mysql2/mysql2.bundle Reason: image not found - /Users/kawaiyasuhiro/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/mysql2-0.5.3/lib/mysql2/mysql2.bundle重要な所はここ!
Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.21.dylib (LoadError)要は、シンボリックリンクにて
/usr/local/opt/mysql/lib/libmysqlclient.21.dylib
ファイルが見つからない為、エラーが起きている模様。シンボリックリンクとは、UNIX系のOSにおいて、ファイルやフォルダに対する注文を代わりに受け付けて本来のファイルに中継するのを役目としている仲介役みたいなものです。
これがないから繋がらないっと言っているようです。
なので、
/usr/local/opt/mysql/lib
の中身を下記のコマンドで確認してみましょう。
% ls -l /usr/local/opt/mysql/lib/
すると・・・
あれ!?
ls: /usr/local/opt/mysql/lib: No such file or directory
ファイルがない??
仕方ない、細かく確認してみよう。
% cd /usr/local/opt/
optフォルダに移行したので
% ls
mysql@5.6ってファルダがあった
% cd mysql@5.6
mysql@5.6フォルダに移行したので
% ls
そしたら下記の結果が出たtotal 48000 -rw-r--r-- 1 hoge staff 3353852 10 8 05:11 libmysqlclient.18.dylib -r--r--r-- 1 hoge staff 3866872 11 27 2019 libmysqlclient.a lrwxr-xr-x 1 hoge staff 23 11 27 2019 libmysqlclient.dylib -> libmysqlclient.18.dylib lrwxr-xr-x 1 hoge staff 23 11 27 2019 libmysqlclient_r.18.dylib -> libmysqlclient.18.dylib lrwxr-xr-x 1 hoge staff 16 11 27 2019 libmysqlclient_r.a -> libmysqlclient.a lrwxr-xr-x 1 hoge staff 20 11 27 2019 libmysqlclient_r.dylib -> libmysqlclient.dylib -r--r--r-- 1 hoge staff 17344696 11 27 2019 libmysqld.a -r--r--r-- 1 hoge staff 3472 11 27 2019 libmysqlservices.a drwxr-xr-x 21 hoge staff 672 11 27 2019 plugin
libmysqlclient.21.dylib
がなく、代わりにlibmysqlclient.18.dylib
がある。少し調べたところ、5.7 は
libmysqlclient.20.dylib
、8.0 はlibmysqlclient.21.dylib
を使用しているらしいということが分かった。
そして、5.6 はlibmysqlclient.18.dylib
を使うみたいだ。??
上記の理論で有れば ver 5.6 は
libmysqlclient.18.dylib
が有ればいいのではないか?他に問題あるのか?
bundle doctor
他の問題を解決する為に、
bundle doctor
を使ってGemfileとgem環境をチェックしてみた。% bundle doctor (略) The following gems are missing OS dependencies: * mysql2: /usr/local/opt/mysql/lib/libmysqlclient.21.dylibエラー内容を確認すると、The following gems are missing OS dependencies:と、
以下のgemたちは、OSへの依存関係がありません、と出ています。という事で、ここは一先ず、出ているgemsを1つ1つアンインストールしていきます。
今回は一つしか出てこなかったですが、複数出る場合もあります。
やり方は、bundle exec gem uninstall [gem名]
です。なので下記コマンドを打ち込みます。
% bundle exec gem uninstall mysql2 Successfully uninstalled mysql2-0.5.3最下部に、Successfully uninstalled [gem名] と表示されればアンインストール完了です!
再びbundle doctor
% bundle doctor (略) Install missing gems with `bundle install`とエラーが出るので、
bundle install
をします。
そして、本当に問題がないか再度bundle doctor
$ bundle doctor (略) No issues found with the installed bundleこれで解決!インストールされたbundleに問題はありませんっと
表示された。なので、
rails s
でアプリを起動してみると・・・・・上手くいった!!
ようやくこれで、全てのMySQLエラーの解決です。長がった。まぁ、正確にはこのエラー解決するのにMySQLを一度アンインストールしているので、
データベースの作成とマイグレーションの実行をしないとダメですね(笑)なので一応記載しておきます。
% rails db:create
% rails db:migrate
これで本当に終了です!
備考
結局、
Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.21.dylib (LoadError)
のエラーは解決の仕方は、これで良かったのか??
他の記事を見てみても同じやり方の記事が多くあったし、事実解決しているので大丈夫かと思うけど・・・詳しく知っている方が、もしいらっしゃったら教えてください!
そもそも、根本的な問題としてMySQLのバージョンが、8.0.にアップデートされた原因が正直分からない・・・
プログラミング・・・奥が深すぎる
- 投稿日:2020-10-10T06:45:58+09:00
MySQL応用編! いろんなSQL Vol.2
前回の記事で投稿した いろんなSQL Vol.1 のつづきの記事となります。
環境
Windows 10
MySQL : version(5.7.28)
使用アプリ
コマンドプロンプト(Windowsマーク押して「cmd」って打ったら出てくるやつ)
現在のテーブルを表示(相関サブクエリ用にareaカラムのデータを多少変更しています)
mysql> SELECT *, (SELECT AVG(score) FROM test_master) AS avg FROM test_master; +----+-----------+-------+-----------+---------+ | id | name | score | area | avg | +----+-----------+-------+-----------+---------+ | 1 | Sato | 40 | Tokyo | 56.4444 | | 2 | Suzuki | 65 | Fukuoka | 56.4444 | | 3 | Takahashi | 45 | Kanagawa | 56.4444 | | 4 | Tanaka | 50 | Osaka | 56.4444 | | 5 | Ito | 88 | Tokyo | 56.4444 | | 6 | Watanabe | 79 | Kanagawa | 56.4444 | | 7 | Yamamoto | 44 | Osaka | 56.4444 | | 8 | Nakamura | 64 | Fukuoka | 56.4444 | | 9 | Kobayahsi | 31 | Tokyo | 56.4444 | | 10 | Kato | 92 | Aichi | 56.4444 | | 11 | Yoshida | 67 | Tokyo | 56.4444 | | 12 | Yamada | 77 | Kumamoto | 56.4444 | | 13 | Sasaki | 29 | Hiroshima | 56.4444 | | 14 | Yamagushi | 15 | Osaka | 56.4444 | | 15 | Inoue | 70 | Kanagawa | 56.4444 | | 16 | Kimura | 55 | Kanagawa | 56.4444 | | 17 | Hayashi | 34 | Saitama | 56.4444 | | 18 | Saito | 71 | Tokyo | 56.4444 | +----+-----------+-------+-----------+---------+10 相関サブクエリ
area_avgカラムを作り、各areaごとの平均点を出す
mysql> SELECT -> *, -> (SELECT AVG(score) FROM test_master) AS avg, -> (SELECT AVG(score) FROM test_master AS t2 WHERE t1.area = t2.area) AS area_avg -> FROM -> test_master AS t1; +----+-----------+-------+-----------+---------+----------+ | id | name | score | area | avg | area_avg | +----+-----------+-------+-----------+---------+----------+ | 1 | Sato | 40 | Tokyo | 56.4444 | 59.4000 | | 2 | Suzuki | 65 | Fukuoka | 56.4444 | 64.5000 | | 3 | Takahashi | 45 | Kanagawa | 56.4444 | 62.2500 | | 4 | Tanaka | 50 | Osaka | 56.4444 | 36.3333 | | 5 | Ito | 88 | Tokyo | 56.4444 | 59.4000 | | 6 | Watanabe | 79 | Kanagawa | 56.4444 | 62.2500 | | 7 | Yamamoto | 44 | Osaka | 56.4444 | 36.3333 | | 8 | Nakamura | 64 | Fukuoka | 56.4444 | 64.5000 | | 9 | Kobayahsi | 31 | Tokyo | 56.4444 | 59.4000 | | 10 | Kato | 92 | Aichi | 56.4444 | 92.0000 | | 11 | Yoshida | 67 | Tokyo | 56.4444 | 59.4000 | | 12 | Yamada | 77 | Kumamoto | 56.4444 | 77.0000 | | 13 | Sasaki | 29 | Hiroshima | 56.4444 | 29.0000 | | 14 | Yamagushi | 15 | Osaka | 56.4444 | 36.3333 | | 15 | Inoue | 70 | Kanagawa | 56.4444 | 62.2500 | | 16 | Kimura | 55 | Kanagawa | 56.4444 | 62.2500 | | 17 | Hayashi | 34 | Saitama | 56.4444 | 34.0000 | | 18 | Saito | 71 | Tokyo | 56.4444 | 59.4000 | +----+-----------+-------+-----------+---------+----------+11 抽出条件にサブクエリを使う
scoreが一番高い人を抽出
mysql> SELECT * FROM test_master WHERE score = (SELECT MAX(score) FROM test_master); +----+------+-------+-------+ | id | name | score | area | +----+------+-------+-------+ | 10 | Kato | 92 | Aichi | +----+------+-------+-------+12 抽出元にサブクエリを使う
area別に人数を分けて、
mysql> SELECT area, COUNT(*) AS byArea FROM test_master GROUP BY area; +-----------+--------+ | area | byArea | +-----------+--------+ | Aichi | 1 | | Fukuoka | 2 | | Hiroshima | 1 | | Kanagawa | 4 | | Kumamoto | 1 | | Osaka | 3 | | Saitama | 1 | | Tokyo | 5 | +-----------+--------+エリア別にわけた人数の平均を求めるとき
mysql> SELECT AVG(byArea) FROM (SELECT area, COUNT(*) AS byArea FROM test_master GROUP BY area) AS mean; +-------------+ | AVG(byArea) | +-------------+ | 2.2500 | +-------------+13 TRANSACTION (COMMIT)
START TRANSACTION
~COMMIT
で囲まれている間の処理が終わるまでは、これ以外の処理や操作を受け付けないmysql> START TRANSACTION; mysql> UPDATE test_master SET score = score - 2 WHERE id = 1; mysql> UPDATE test_master SET score = score + 5 WHERE id = 2; mysql> COMMIT;14 TRANSACTION (ROLLBACK)
プログラムの処理中になにか障害が起こったときは、
START TRANSACTION
~ROLLBACK
で囲んだ処理をなかったにできる(更新する前のデータに戻すことができる)mysql> START TRANSACTION; mysql> UPDATE test_master SET score = score - 2 WHERE id = 1; mysql> ROLLBACK;
新しいテーブルを2つ用意しました
mysql> SELECT * FROM カテゴリー; +----+--------------------+ | id | カテゴリー名 | +----+--------------------+ | 1 | 和食 | | 2 | 洋食 | | 3 | 中華 | +----+--------------------+ mysql> SELECT * FROM 商品; +----+-----------------+-----------------------+--------+ | id | カテゴリー | 商品名 | 価格 | +----+-----------------+-----------------------+--------+ | 1 | 1 | 肉じゃが定食 | 900 | | 2 | 1 | すきやき | 2000 | | 3 | 1 | 焼き魚定食 | 1200 | | 4 | 1 | なすのおひたし | 600 | | 5 | 2 | オムライス | 1200 | | 6 | 2 | ビーフシチュー | 1800 | | 7 | 3 | 酢豚定食 | 1200 | | 8 | 3 | チャーハン | 500 | | 9 | 3 | おつまみメンマ | 250 | | 10 | 3 | ザーサイ | 120 | +----+-----------------+-----------------------+--------+
14 内部結合
カテゴリーテーブルのカテゴリーidを商品テーブルのカテゴリーと紐付ける
mysql> SELECT -> * -> FROM -> 商品 INNER JOIN カテゴリー ON 商品.カテゴリー = カテゴリー.id; +----+-----------------+-----------------------+--------+----+--------------------+ | id | カテゴリー | 商品名 | 価格 | id | カテゴリー名 | +----+-----------------+-----------------------+--------+----+--------------------+ | 1 | 1 | 肉じゃが定食 | 900 | 1 | 和食 | | 2 | 1 | すきやき | 2000 | 1 | 和食 | | 3 | 1 | 焼き魚定食 | 1200 | 1 | 和食 | | 4 | 1 | なすのおひたし | 600 | 1 | 和食 | | 5 | 2 | オムライス | 1200 | 2 | 洋食 | | 6 | 2 | ビーフシチュー | 1800 | 2 | 洋食 | | 7 | 3 | 酢豚定食 | 1200 | 3 | 中華 | | 8 | 3 | チャーハン | 500 | 3 | 中華 | | 9 | 3 | おつまみメンマ | 250 | 3 | 中華 | | 10 | 3 | ザーサイ | 120 | 3 | 中華 | +----+-----------------+-----------------------+--------+----+--------------------+15 外部結合
左外部結合
カテゴリーテーブルに入っているデータをすべて抽出したあとに、商品テーブルと結合
mysql> SELECT -> * -> FROM -> カテゴリー LEFT OUTER JOIN 商品 ON カテゴリー.id = 商品.id; +----+--------------------+------+-----------------+--------------------+--------+ | id | カテゴリー名 | id | カテゴリー | 商品名 | 価格 | +----+--------------------+------+-----------------+--------------------+--------+ | 1 | 和食 | 1 | 1 | 肉じゃが定食 | 900 | | 2 | 洋食 | 2 | 1 | すきやき | 2000 | | 3 | 中華 | 3 | 1 | 焼き魚定食 | 1200 | +----+--------------------+------+-----------------+--------------------+--------+右外部結合
商品テーブルに入っているデータをすべて抽出したあとに、カテゴリーテーブルと結合
mysql> SELECT -> * -> FROM -> カテゴリー right OUTER JOIN 商品 ON カテゴリー.id = 商品.id; +------+--------------------+----+-----------------+-----------------------+--------+ | id | カテゴリー名 | id | カテゴリー | 商品名 | 価格 | +------+--------------------+----+-----------------+-----------------------+--------+ | 1 | 和食 | 1 | 1 | 肉じゃが定食 | 900 | | 2 | 洋食 | 2 | 1 | すきやき | 2000 | | 3 | 中華 | 3 | 1 | 焼き魚定食 | 1200 | | NULL | NULL | 4 | 1 | なすのおひたし | 600 | | NULL | NULL | 5 | 2 | オムライス | 1200 | | NULL | NULL | 6 | 2 | ビーフシチュー | 1800 | | NULL | NULL | 7 | 3 | 酢豚定食 | 1200 | | NULL | NULL | 8 | 3 | チャーハン | 500 | | NULL | NULL | 9 | 3 | おつまみメンマ | 250 | | NULL | NULL | 10 | 3 | ザーサイ | 120 | +------+--------------------+----+-----------------+-----------------------+--------+おわりに
- 投稿日:2020-10-10T05:48:44+09:00
MySQL起動エラーの対処の仕方
経緯
herokuを使ってデプロイ中に、急にMySQLとの接続が出来なくなった。。。
原因は、恐らくMySQLのバージョンが、いつの間にか ver 8.0 にアップデートされていた事が原因っぽい。。。
ちなみに今迄使っていたのは ver 5.6こんな事が起きたのが初めてだったので、色々弄り過ぎて解決するのにかなりの時間を費やしてしまった。
このやり方が有っているのか不明だが、誰かのお役に立つかと思い残しておきます。ちなみに余談だが、herokuを使ってデプロイするならこの記事が一番良いので紹介だけしておきます。
【初心者向け】railsアプリをherokuを使って確実にデプロイする方法【決定版】
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)
作成中のアプリの画面がエラー画面に!エラー文が以下のもの
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)
これは、「ソケット /tmp/mysql.sock を通じてローカルのMySQLサーバーに接続することができません」という意味です(訳しただけですが)ソケットとは、Unixドメインソケット(ファイルシステムソケット)の事で、ローカルシステム内での通信を行う際に、このファイルの入出力を通じてサーバーとクライアント間での通信を行います。
つまり仲介役ですね。では、このエラーの対処の方法を説明したいと思います。
MySQLサーバーが起動していない
一番ベターな解決作ですが、只純粋にMySQLが起動していない事が原因かもと思い、
% mysql.server start
を打ち込む。すると
Starting MySQL . ERROR! The server quit without updating PID file (/usr/local/var/mysql/*******.pid).
*******
は自分のコンピューター名が入ります。
また、多くの記事では******.local.pid
って出ているのですが
この違いは不明です(寧ろ誰が教えて!)ちなみに、このエラーは前のMySQLバージョンで使用したデータを使って起動した時に出るようです。
/usr/local/var/mysql配下のpidファイルが無いって言われているようなのでこのディレクトリを確認
% cd /usr/local/var/mysql
% ls
のコマンドで確認した所、******.local.pid
は存在したが、******.pid
は無い
ということで、pidファイルを作成する
% sudo touch /usr/local/var/mysql/******.pid
本当に出来たか確認する為、もう一度上記のコマンドでディレクトリを確認
うん!有った!これで行けるかと思いもう一度
Starting MySQL . ERROR! The server quit without updating PID file (/usr/local/var/mysql/*******.pid).全く変わらずまた同じエラー
ここからの対処
色々エラーを検索して、分かった事だが上記でも記載している通り原因は、
MySQLの ver が5.6 →8.0 のアップデートされてしまい、
ERROR! The server quit without updating PID file は前のMySQLバージョンで使用したデータを使って起動した時に出るという事ちなみに余談だが、8.0 は良い意味でも悪い意味でセキュリティーが上がっているようで
Sequel pro(ホットケーキがアイコンのもの)の対応できていない。
これらの事から、元の状態に戻す、つまりver を 5.6 に戻す方が早いのではっと考え
8.0 をアンインストール後、5.6 をインストールし直す事にした。
3つの行った事
・ MySQL8.0 をアンインストール
・ プロセスを確認
・ 権限の確認の3つを行い成功した
MySQL8.0アンインストール&MySQL5.6再インストール
※実行の前に注意する事としては、MySQLのデータが削除されてしまいますので注意
僕はデータが消えても問題なかったのでそのままやっちゃいました。
もし気になる方は下記の記事を参考にして見てください、アンインストールの方法もこの記事を参考にしてます
The server quit without updating PID file mysqlエラー解決方法
brewコマンドを使ってアンインストールします
% brew uninstall mysql
% brew uninstall --force mysql
% brew cleanup -s mysql
% brew prune
続いて、
% rm -rf /usr/local/mysql
% rm -rf /Library/StartupItems/MYSQL
% rm -rf /Library/PreferencePanes/MySQL.prefPane
% rm -rf /Library/Receipts/mysql-.pkg
% rm -rf /usr/local/Cellar/mysql*
% rm -rf /usr/local/bin/mysql*
% rm -rf /usr/local/var/mysql*
% rm -rf /usr/local/etc/my.cnf
% rm -rf /usr/local/share/mysql*
% rm -rf /usr/local/opt/mysql
brew uninstall mysql では削除できないファイル群を削除します。多くの記事でコマンドのmysqlの後にverを指定いないので大丈夫かと思いますが
僕は心配だったのでverを入れたコマンドも一緒に打ち込みました(笑)
こんな感じですね
% brew uninstall mysql@8.0
ver の確認方法は、
% mysql --version
これでもわかります
% which mysql
そして、インストールしたい ver を指定して打ち込みます。
% brew install mysql@5.6
これで全部スッキリ綺麗に入れ直しが出来たはずです!
そして、このままでは、MySQLのコマンドが一切反応してくれません。なのでパスを通しましょう。
下記の2つのコマンドです。
% echo 'export PATH="/usr/local/opt/mysql@5.6/bin:$PATH"' >> ~/.zshrc
% source ~/.zshrc
一応MySQLのコマンドが打てるか確認
% which mysql
以下のように表示されれば成功です
/usr/local/opt/mysql@5.6/bin/mysql
もしかしたら、これで起動するかもなので一応確認して見てください
% mysql.server start
僕はダメでしたが、、、変わらずこのエラー
またお前か・・・Starting MySQL . ERROR! The server quit without updating PID file (/usr/local/var/mysql/*******.pid).
プロセスを確認
ここでプロセスを確認です。
要はどういう事かというと、ver 5.6 を起動したいのに 8.0 が起動したままでは、
エラーが出るので、もし起動中のままだったら強制終了しましょうっていう確認です。下記のコマンドで確認出来ます。
% ps -ef | grep mysql
余計なものが起動していると下記のように表示されます。
1行目、2行目が余計ですね。
3行目は、なきゃいけないものですのでオッケーです。501 699 1 0 16 720 ?? 0:00.04 /bin/sh /usr/local/opt/mysql@8.0/bin/mysqld_safe --datadir=/usr/local/var/mysql 501 974 699 0 16 720 ?? 1:06.51 /usr/local/opt/mysql@8.0/bin/mysqld --basedir=/usr/local/opt/mysql@8.0 --datadir=/usr/local/var/mysql --plugin-dir=/usr/local/opt/mysql@8.0/lib/plugin --log-error=XXXX-Air.local.err --pid-file=XXXX-Air.local.pid 501 3524 81032 0 1:48AM ttys002 0:00.00 grep mysql問題ない時は下記のような感じで出ます。
501 3524 81032 0 1:48AM ttys002 0:00.00 grep mysqlでは、killコマンドで強制終了(-9)させましょう。
% kill -9 974
(974は上記のプロセスIDです)
一個強制終了させれば、上記で言えば699も一緒に消えると思いますが
消えてない場合はもう一回killコマンドで消してください。最後に確認の為もう一度下記のコマンドを打って確認してください。
% ps -ef | grep mysql
しつこいですが、
もしかしたら、これで起動するかもなので一応確認して見てください
% mysql.server start
僕は、またまたダメでしたが、、、変わらずこのエラー
またまたお前か・・・Starting MySQL . ERROR! The server quit without updating PID file (/usr/local/var/mysql/*******.pid).
権限を確認
権限は、ユーザー名ではないと、Permission denied(アクセス権限がない)と
いう事でエラーが出るらしいのでこれを確認このコマンドで確認
% ls -la /usr/local/var/mysql
% ls -la /usr/local/var/mysql total 221232 drwxrwxrwx 10 _mysql admin 320 10 8 05:19 . drwxrwxr-x 7 _mysql admin 224 10 8 05:11 .. -rw-rw---- 1 _mysql admin 56 10 8 05:19 auto.cnf -rwxrwxrwx 1 _mysql admin 50331648 10 8 05:19 ib_logfile0 -rwxrwxrwx 1 _mysql admin 50331648 10 8 05:11 ib_logfile1 -rwxrwxrwx 1 _mysql admin 12582912 10 8 05:19 ibdata1 -rwxrwxrwx 1 _mysql admin 18507 10 8 05:19 ******.err drwxrwxrwx 81 _mysql admin 2592 10 8 05:11 mysql drwxrwxrwx 55 _mysql admin 1760 10 8 05:11 performance_schema drwxrwxrwx 2 _mysql admin 64 10 8 05:11 test
_mysqlの所がユーザー名ではないとダメらしいので変更する
% sudo chown -R $USER /usr/local
$USERのまま打ち込めばユーザー名に変更してくれるのでこのまま打ち込んでくださいこれで変更されたはずなので、再度確認して見てください。
% ls -la /usr/local/var/mysql
※逆に、_mysqlのままではないとダメという記事も多数見かけますが、
どっちが正解なのか、すみません僕にも分かりません・・・
僕はこっちではないとダメでした。
わかる方が入れば教えて頂ければ有難いです
さぁ、これでどうだ!
・・・・・・またまたまたダメでしたが、、、変わらずこのエラー
またまたまたお前か・・・Starting MySQL . ERROR! The server quit without updating PID file (/usr/local/var/mysql/*******.pid).
が、最後にエラーの通りもう一度
% sudo touch /usr/local/var/mysql/******.pid
をしたら
% mysql.server start
Starting MySQL
. SUCCESS!
やっと、起動した・・・
なんて大変なのだ・・・しかし、まだ僕の戦いは終わりませんでした。
MySQLは無事起動しましたが、またしてもエラーが出ました・・・・
次の記事では、その対処法について記載します。
余談
余談ですが、
MySQLは本来であればPC再起動のたびに起動し直す必要がありますが、それは面倒であるため、
自動で起動するよう出来ます。それが、下記のコマンドです!
是非知らない方は、やっておいた方が便利ですよ!% mkdir ~/Library/LaunchAgents % ln -sfv /usr/local/opt/mysql\@5.6/*.plist ~/Library/LaunchAgents % launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql\@5.6.plist
- 投稿日:2020-10-10T05:48:44+09:00
MySQL起動エラーの対処の仕方【Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)】
経緯
herokuを使ってデプロイ中に、急にMySQLとの接続が出来なくなった。。。
原因は、恐らくMySQLのバージョンが、いつの間にか ver 8.0 にアップデートされていた事が原因っぽい。。。
ちなみに今迄使っていたのは ver 5.6こんな事が起きたのが初めてだったので、色々弄り過ぎて解決するのにかなりの時間を費やしてしまった。
このやり方が有っているのか不明だが、誰かのお役に立つかと思い残しておきます。ちなみに余談だが、herokuを使ってデプロイするならこの記事が一番良いので紹介だけしておきます。
【初心者向け】railsアプリをherokuを使って確実にデプロイする方法【決定版】
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)
作成中のアプリの画面がエラー画面に!エラー文が以下のもの
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)
これは、「ソケット /tmp/mysql.sock を通じてローカルのMySQLサーバーに接続することができません」という意味です(訳しただけですが)ソケットとは、Unixドメインソケット(ファイルシステムソケット)の事で、ローカルシステム内での通信を行う際に、このファイルの入出力を通じてサーバーとクライアント間での通信を行います。
つまり仲介役ですね。では、このエラーの対処の方法を説明したいと思います。
MySQLサーバーが起動していない
一番ベターな解決作ですが、只純粋にMySQLが起動していない事が原因かもと思い、
% mysql.server start
を打ち込む。すると
Starting MySQL . ERROR! The server quit without updating PID file (/usr/local/var/mysql/*******.pid).
*******
は自分のコンピューター名が入ります。
また、多くの記事では******.local.pid
って出ているのですが
この違いは不明です(寧ろ誰が教えて!)ちなみに、このエラーは前のMySQLバージョンで使用したデータを使って起動した時に出るようです。
/usr/local/var/mysql配下のpidファイルが無いって言われているようなのでこのディレクトリを確認
% cd /usr/local/var/mysql
% ls
のコマンドで確認した所、******.local.pid
は存在したが、******.pid
は無い
ということで、pidファイルを作成する
% sudo touch /usr/local/var/mysql/******.pid
本当に出来たか確認する為、もう一度上記のコマンドでディレクトリを確認
うん!有った!これで行けるかと思いもう一度
Starting MySQL . ERROR! The server quit without updating PID file (/usr/local/var/mysql/*******.pid).全く変わらずまた同じエラー
ここからの対処
色々エラーを検索して、分かった事だが上記でも記載している通り原因は、
MySQLの ver が5.6 →8.0 のアップデートされてしまい、
ERROR! The server quit without updating PID file は前のMySQLバージョンで使用したデータを使って起動した時に出るという事ちなみに余談だが、8.0 は良い意味でも悪い意味でセキュリティーが上がっているようで
Sequel pro(ホットケーキがアイコンのもの)の対応できていない。
これらの事から、元の状態に戻す、つまりver を 5.6 に戻す方が早いのではっと考え
8.0 をアンインストール後、5.6 をインストールし直す事にした。
3つの行った事
・ MySQL8.0 をアンインストール
・ プロセスを確認
・ 権限の確認の3つを行い成功した
MySQL8.0アンインストール&MySQL5.6再インストール
※実行の前に注意する事としては、MySQLのデータが削除されてしまいますので注意
僕はデータが消えても問題なかったのでそのままやっちゃいました。
もし気になる方は下記の記事を参考にして見てください、アンインストールの方法もこの記事を参考にしてます
The server quit without updating PID file mysqlエラー解決方法
brewコマンドを使ってアンインストールします
% brew uninstall mysql
% brew uninstall --force mysql
% brew cleanup -s mysql
% brew prune
続いて、
% rm -rf /usr/local/mysql
% rm -rf /Library/StartupItems/MYSQL
% rm -rf /Library/PreferencePanes/MySQL.prefPane
% rm -rf /Library/Receipts/mysql-.pkg
% rm -rf /usr/local/Cellar/mysql*
% rm -rf /usr/local/bin/mysql*
% rm -rf /usr/local/var/mysql*
% rm -rf /usr/local/etc/my.cnf
% rm -rf /usr/local/share/mysql*
% rm -rf /usr/local/opt/mysql
brew uninstall mysql では削除できないファイル群を削除します。多くの記事でコマンドのmysqlの後にverを指定いないので大丈夫かと思いますが
僕は心配だったのでverを入れたコマンドも一緒に打ち込みました(笑)
こんな感じですね
% brew uninstall mysql@8.0
ver の確認方法は、
% mysql --version
これでもわかります
% which mysql
そして、インストールしたい ver を指定して打ち込みます。
% brew install mysql@5.6
これで全部スッキリ綺麗に入れ直しが出来たはずです!
そして、このままでは、MySQLのコマンドが一切反応してくれません。なのでパスを通しましょう。
下記の2つのコマンドです。
% echo 'export PATH="/usr/local/opt/mysql@5.6/bin:$PATH"' >> ~/.zshrc
% source ~/.zshrc
一応MySQLのコマンドが打てるか確認
% which mysql
以下のように表示されれば成功です
/usr/local/opt/mysql@5.6/bin/mysql
もしかしたら、これで起動するかもなので一応確認して見てください
% mysql.server start
僕はダメでしたが、、、変わらずこのエラー
またお前か・・・Starting MySQL . ERROR! The server quit without updating PID file (/usr/local/var/mysql/*******.pid).
プロセスを確認
ここでプロセスを確認です。
要はどういう事かというと、ver 5.6 を起動したいのに 8.0 が起動したままでは、
エラーが出るので、もし起動中のままだったら強制終了しましょうっていう確認です。下記のコマンドで確認出来ます。
% ps -ef | grep mysql
余計なものが起動していると下記のように表示されます。
1行目、2行目が余計ですね。
3行目は、なきゃいけないものですのでオッケーです。501 699 1 0 16 720 ?? 0:00.04 /bin/sh /usr/local/opt/mysql@8.0/bin/mysqld_safe --datadir=/usr/local/var/mysql 501 974 699 0 16 720 ?? 1:06.51 /usr/local/opt/mysql@8.0/bin/mysqld --basedir=/usr/local/opt/mysql@8.0 --datadir=/usr/local/var/mysql --plugin-dir=/usr/local/opt/mysql@8.0/lib/plugin --log-error=XXXX-Air.local.err --pid-file=XXXX-Air.local.pid 501 3524 81032 0 1:48AM ttys002 0:00.00 grep mysql問題ない時は下記のような感じで出ます。
501 3524 81032 0 1:48AM ttys002 0:00.00 grep mysqlでは、killコマンドで強制終了(-9)させましょう。
% kill -9 974
(974は上記のプロセスIDです)
一個強制終了させれば、上記で言えば699も一緒に消えると思いますが
消えてない場合はもう一回killコマンドで消してください。最後に確認の為もう一度下記のコマンドを打って確認してください。
% ps -ef | grep mysql
しつこいですが、
もしかしたら、これで起動するかもなので一応確認して見てください
% mysql.server start
僕は、またまたダメでしたが、、、変わらずこのエラー
またまたお前か・・・Starting MySQL . ERROR! The server quit without updating PID file (/usr/local/var/mysql/*******.pid).
権限を確認
権限は、ユーザー名ではないと、Permission denied(アクセス権限がない)と
いう事でエラーが出るらしいのでこれを確認このコマンドで確認
% ls -la /usr/local/var/mysql
% ls -la /usr/local/var/mysql total 221232 drwxrwxrwx 10 _mysql admin 320 10 8 05:19 . drwxrwxr-x 7 _mysql admin 224 10 8 05:11 .. -rw-rw---- 1 _mysql admin 56 10 8 05:19 auto.cnf -rwxrwxrwx 1 _mysql admin 50331648 10 8 05:19 ib_logfile0 -rwxrwxrwx 1 _mysql admin 50331648 10 8 05:11 ib_logfile1 -rwxrwxrwx 1 _mysql admin 12582912 10 8 05:19 ibdata1 -rwxrwxrwx 1 _mysql admin 18507 10 8 05:19 ******.err drwxrwxrwx 81 _mysql admin 2592 10 8 05:11 mysql drwxrwxrwx 55 _mysql admin 1760 10 8 05:11 performance_schema drwxrwxrwx 2 _mysql admin 64 10 8 05:11 test
_mysqlの所がユーザー名ではないとダメらしいので変更する
% sudo chown -R $USER /usr/local
$USERのまま打ち込めばユーザー名に変更してくれるのでこのまま打ち込んでくださいこれで変更されたはずなので、再度確認して見てください。
% ls -la /usr/local/var/mysql
※逆に、_mysqlのままではないとダメという記事も多数見かけますが、
どっちが正解なのか、すみません僕にも分かりません・・・
僕はこっちではないとダメでした。
わかる方が入れば教えて頂ければ有難いです
さぁ、これでどうだ!
・・・・・・またまたまたダメでしたが、、、変わらずこのエラー
またまたまたお前か・・・Starting MySQL . ERROR! The server quit without updating PID file (/usr/local/var/mysql/*******.pid).
が、最後にエラーの通りもう一度
% sudo touch /usr/local/var/mysql/******.pid
をしたら
% mysql.server start
Starting MySQL
. SUCCESS!
やっと、起動した・・・
なんて大変なのだ・・・しかし、まだ僕の戦いは終わりませんでした。
MySQLは無事起動しましたが、またしてもエラーが出ました・・・・
次の記事では、その対処法について記載します。
MySQL起動エラーの対処の仕方【Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.21.dylib (LoadError)】
余談
余談ですが、
MySQLは本来であればPC再起動のたびに起動し直す必要がありますが、それは面倒であるため、
自動で起動するよう出来ます。それが、下記のコマンドです!
是非知らない方は、やっておいた方が便利ですよ!% mkdir ~/Library/LaunchAgents % ln -sfv /usr/local/opt/mysql\@5.6/*.plist ~/Library/LaunchAgents % launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql\@5.6.plist
- 投稿日:2020-10-10T01:23:11+09:00
MySQLでrootユーザーのパスワードを設定時にERROR 1064 (42000)で悩まされまんた!
タイトル通りMySQLのrootユーザーのパスワードを変更しようとした所ちょっとハマりました。
terminalmysql> set password for root@localhost=password('hogehoge');ググった所このコマンドでrootユーザーのパスワードを設定できるとのことでしたがこんなエラーが...!
terminalERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'password('hogehoge')' at line 1ぴえん。
syntaxエラーと目に飛び込んできたので、「どうせ''が変だったりそんなオチだろう」と思って色々弄りましたが直らず。
terminalmysql> update user set password=PASSWORD('hogehoge') where User='root'; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '('hogehoge') where user = 'root'' at line 1こちらのコマンドも試しましたが、やはりERROR 1064(42000) syntax文法エラーがあるとのこと、、
解決方法
色々ググってみた所、同じ症状の人がいました。
どうやらMySQLのバージョン5.6.7で上記のようなパスワード記載方法は廃止になったとのこと。
代わりに以下のコマンドを打ったところ、無事パスワードを設定できました。terminalmysql> set password for 'root'@'localhost' = 'hogehoge'; Query OK, 0 rows affected (0.04 sec)check the manual that corresponds to your MySQL server version
思いっきりエラー文にMySQLのバージョンマニュアルをチェックしてねって書いてました。。。エラー文、英語ちゃんと読みますぴえんぱおんパオパオチャンネル
参考