- 投稿日:2019-04-17T23:45:54+09:00
LaravelでDBのデフォルト文字セットと照会順序を変更する
使用するMySQLのデフォルト文字セットと照会順序と、Laravelの設定を合わせたい時に。
使いたいMySQLの設定
Laravelの設定を変えるため、database.phpを編集する
config/database.php'mysql' => [ 〜略〜 // 'charset' => 'utf8mb4', // 'collation' => 'utf8mb4_unicode_ci', 'charset' => 'utf8', 'collation' => 'utf8_general_ci', 〜略〜 ],これでmigrationでテーブルを作り直せば、文字セットと照会順序が統一できる。
参考
https://qiita.com/n-funaki/items/6ce33602d096da0968f4
https://www.playfulit.net/articles/kzvXJM6YfWT1mUP492odNfBR
- 投稿日:2019-04-17T20:16:46+09:00
mysqlのインストールからroot-userでmysqlにログインするまで
mysqlのインストールからroot-userでmysqlにログインするまで
シンプルに必要なコマンドだけ書き出してみました。
[STEP1] mysqlのインストール
① brewでmysqlをインストール
$ brew install mysql②mysqlを起動します
$ mysql.server start③ rootユーザーでログインをする際のパスワード設定をします。
特にこだわりがなければパスワードは'root'に設定$ mysqladmin -u root password 'YOURPASSWORD'④ mysqlにログイン
$ mysql -u root -p※トラブルシューティング
'SOCKET ERROR'的な怒られ方をされたら
下記記事を参考にアクセス権限の移譲をしたら解決しました。
https://qiita.com/masa_stone22/items/38a286a89c309de7d44e[STEP2] データベースの作成
①DBの作成
mysql> CREATE DATABASE 'DATABASENAME';下記コマンドでDBが作成されたか確認してみてください。
mysql> show databases;以上になります。
参考記事
・mysqlをbrewでインストール
https://qiita.com/atsuo1203/items/94e8a8941fceab321c34・mysqlがソケットエラーで起動しなかったので、権限を変更。2つ目の記事を参考
https://qiita.com/_natsu_no_yuki_/items/ae4c94187093e4ab3cdc
https://qiita.com/masa_stone22/items/38a286a89c309de7d44e
・mysql内にデータベース、テーブルを作成
https://qiita.com/ryosuketter/items/713c7046314ecdf1a4a9・パスワードの設定方法。コマンドラインから設定するやり方を参照
https://webkaru.net/mysql/mysql-root-password/
- 投稿日:2019-04-17T18:21:45+09:00
MySQLのDBバックアップ
- 投稿日:2019-04-17T14:13:39+09:00
【解決】ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ が出た時の対処法
開発実務1年目のボクがハマった勉強中には見なかったエラーの一つ
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)とかいうエラー
初めてこれにでくわした時は解決までに使った時間は3時間くらいだったと思います
なんせボクの開発現場ではみんなイヤホンをしているし、新人なのでエラーで相談は迷惑かなーーーと感じていたからですいま思えば新人だからこそエラーとか質問しやすいですよねw
ホントばかだったわ泣ボクの場合は
db:migrate
後に//localhost:3000に接続できなくなりMysql2::Error::ConnectionError: Can't connect to MySQL server on '127.0.0.1' (111)
エラーが吐かれました
調べてみるとmysqlを起動できれば解決しそうだという事まで突き詰めましたERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)の【解決コピペコード】
/var/run/mysqld/mysqld.sockの削除
$ sudo rm -f /var/run/mysqld/mysqld.sock/tmp/mysql.sockの削除
$ sudo rm -f /tmp/mysql.sockmysqlサーバーの再起動
$ sudo /etc/init.d/mysql startmysqlサーバー接続
$ mysql -u root -p以上です
接続できたらmysqlから脱出してrails db:migrate
なりrails s -b 0.0.0.0
なりお好きにどうぞ
- 投稿日:2019-04-17T10:21:42+09:00
XAMPとMAMPを同一PCにインストールすることで起こる競合について
XAMPとMAMPが競合する問題の解決方法の備忘録
事の発端について
XAMPをインストールした環境にMAMPをインストールした際、MAMPのMySQLサーバが起動しない問題が発生した。
この解決方法?
ポートを変えればなんとかなるかと思ったができなかったため、私の環境(Win10)では、まず環境変数からXAMPに通されているMySQLのPathを削除。これでMAMPのインストールを行うことで、MySQLのPathをMAMP側に変更し、結果MySQLサーバが起動できた。
しかし、この状態だと何故かphpMyAdminを開くとエラーが出てくる。これを解決するにはMAMPのPHPconfを変えろとメッセージが表示されるが、XAMPを開いとけばなぜかphpMyAdminを開くことができた。(もしかしたらXAMPを起動しておけばMySQLのPathを変更しなくてもいけるかも)真の解決方法
そもそもWin環境でXAMPを使いながらMAMPを入れなければ良いのだ。XAMPだけで良くない?
- 投稿日:2019-04-17T00:34:21+09:00
kubernetesでPython+MySQL8を使う時にハマった点!
概要
現在、ローカルにvue+djangoの開発環境をkubernetesで構築しようとしているのですが、
mysqlのコンテナを立てる際にハマったことがあったので、情報を共有します。MySQL8をPythonで使う場合について
MySQLをPythonで使う場合、パッケージに
mysqlclient
を選択することがあると思います。ここでMySQL8で
mysqlclient
を使う場合に注意する点があります。
MySQL8.0.4以降、デフォルトの認証方式が変更され、mysql_native_password
からcaching_sha2_password
になりました。しかし、mysqlclient
はこのcaching_sha2_password
に対応していません。
そのため、以下のように、my.cnfを変更するか、もしくはmysqld
の実行時に--default-authentication-plugin=mysql_native_password
オプションをつけて、認証方式をmysql_native_password
に戻す必要があります。my.cnf[mysqld] default-authentication-plugin = mysql_native_passwordmysqld --default-authentication-plugin=mysql_native_passwordkubernetesでMySQLをデプロイ
私は、docker-composeにてMySQL8系のコンテナを利用していたこともあり、その際にdocker-compose.ymlからコマンドを上書きして、後者のコマンドにオプションをつけて実行する方法で実行していたため、kubernetesでの実行時も同様の方法を選択しました。
一部抜粋した設定定義ファイルでは以下のように指定していました。
注:ここではローカル環境用の設定定義のため、パスワード等をConfigMapで設定していますが、実際の運用ではSecretを推奨です
mysql-sts.yaml... spec: containers: - name: mysql image: mysql:8.0.15 # この部分 command: - mysqld - --user=root --default-authentication-plugin=mysql_native_password env: - name: MYSQL_USER valueFrom: configMapKeyRef: name: mysql-cm key: MYSQL_USER - name: MYSQL_PASSWORD valueFrom: configMapKeyRef: name: mysql-cm key: MYSQL_PASSWORD - name: MYSQL_DATABASE valueFrom: configMapKeyRef: name: mysql-cm key: MYSQL_DATABASE ports: - containerPort: 3306 name: mysql volumeMounts: - name: data mountPath: /var/lib/mysql subPath: mysql ...しかし、これを用いてリソースを作成するとなぜか初期化の段階でうまくいきません。
これはkubernetesのcommandの仕様が、少し特殊だったことが原因でした。kubernetesのcommandとENTRYPOINT
結論から言いますと、kubernetesのcommandは
CMD
だけではなく、ENTRYPOINT
も上書きしてしまうことが問題点となっていました。
kubernetes学習番外編 コンテナ起動時のコマンド実行 - そんな今日この頃の技術ネタこのリソースでは公式のMySQLイメージを利用していますが、公式イメージはイメージ内でENTRYPOINTを利用して初期化をするスクリプトが走っています。
そのため、上記のようにkubernetesのcommandを利用してしまうと、ENTRYPOINT
が上書きされてしまい、公式イメージによって自動化されていた初期化のプロセスを実行しなくてはいけないんですが、それをうまく実行できていなかったために、エラーとなっていたようです。そのため、以下のようにmy.cnfを変更する方法で、認証方式を
mysql_native_password
に戻すことで、エラーを回避することができました。mysql-sts.yamlapiVersion: v1 kind: ConfigMap metadata: name: django-mysql-cm labels: project: django-vue app: mysql data: MYSQL_USER: timer MYSQL_PASSWORD: timer MYSQL_DATABASE: timer MYSQL_HOST: django-mysql-svc my.cnf: |- [mysqld] default-authentication-plugin = mysql_native_password --- ... containers: - name: mysql image: mysql:8.0.15 env: - name: MYSQL_USER valueFrom: configMapKeyRef: name: django-mysql-cm key: MYSQL_USER - name: MYSQL_PASSWORD valueFrom: configMapKeyRef: name: django-mysql-cm key: MYSQL_PASSWORD - name: MYSQL_DATABASE valueFrom: configMapKeyRef: name: django-mysql-cm key: MYSQL_DATABASE ports: - containerPort: 3306 name: mysql volumeMounts: - name: my-cnf mountPath: /etc/my.cnf subPath: my.cnf readOnly: true - name: data mountPath: /var/lib/mysql subPath: mysql volumes: - name: my-cnf configMap: name: django-mysql-cm items: - key: my.cnf path: my.cnf ...あとがき
今回は思ってもみなかったkubernetesの仕様でかなりの時間対応させられることになってしまいました。
初期化で失敗している時点で、公式イメージの初期化処理が通ってないと気づくのが、もう少し早かったならばと悔やまれます。現在まだ環境を構築中ですが、開発環境が完成したら、後日公開したいなと思っています。