20190417のMySQLに関する記事は6件です。

LaravelでDBのデフォルト文字セットと照会順序を変更する

使用するMySQLのデフォルト文字セットと照会順序と、Laravelの設定を合わせたい時に。

使いたいMySQLの設定

_ 2019-04-17 23.36.54.jpg

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

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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/

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MySQLのDBバックアップ

エクスポート

mysqldump -u username -p -r db.bakcup --single-transaction dbname

インポート

mysql -u username -p dbname < db.bakcup
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【解決】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.sock

mysqlサーバーの再起動

$ sudo /etc/init.d/mysql start

mysqlサーバー接続

$ mysql -u root -p

以上です
接続できたらmysqlから脱出してrails db:migrateなりrails s -b 0.0.0.0なりお好きにどうぞ

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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だけで良くない?

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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_password
mysqld --default-authentication-plugin=mysql_native_password

kubernetesで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.yaml
apiVersion: 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の仕様でかなりの時間対応させられることになってしまいました。
初期化で失敗している時点で、公式イメージの初期化処理が通ってないと気づくのが、もう少し早かったならばと悔やまれます。

現在まだ環境を構築中ですが、開発環境が完成したら、後日公開したいなと思っています。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む