20200317のMySQLに関する記事は4件です。

dockerで突如mysql:5.5系が起動しなくなった

複数のwordpress案件をdockerで開発していたところ、

以前は立ち上がっていたプロジェクトで
docker-compose upした際、
wpのコンテナは起動するのにmysql:5.5.58イメージが起動しない(立ち上がった直後強制終了)
という状態に(´;ω;`)

試したこと(全部だめ)

  • コンテナ再スタート
    docker-compose stop
    docker-compose up

  • コンテナ削除・再構築・スタート
    docker-compose down
    docker-compose build
    docker-compose up

  • 別フォルダに再度環境構築
    git clone
    docker-compose build
    docker-compose up

  • macのストレージを掃除(メモリ不足かと思った)

  • mac再起動(※セーフブート後、再構築)

すべて変わらず。

エラーログ

200317  8:52:24 [Note] --secure-file-priv is set to NULL. Operations related to importing and exporting data are disabled
200317  8:52:24 [Note] mysqld (mysqld 5.5.58) starting as process 1 ...
200317  8:52:24 [Note] Plugin 'FEDERATED' is disabled.
200317  8:52:24 InnoDB: The InnoDB memory heap is disabled
200317  8:52:24 InnoDB: Mutexes and rw_locks use GCC atomic builtins
200317  8:52:24 InnoDB: Compressed tables use zlib 1.2.3
200317  8:52:24 InnoDB: Using Linux native AIO
200317  8:52:24 InnoDB: Initializing buffer pool, size = 128.0M
200317  8:52:24 InnoDB: Completed initialization of buffer pool
InnoDB: Error: checksum mismatch in data file ./ibdata1
200317  8:52:24 InnoDB: Could not open or create data files.
200317  8:52:24 InnoDB: If you tried to add new data files, and it failed here,
200317  8:52:24 InnoDB: you should now edit innodb_data_file_path in my.cnf back
200317  8:52:24 InnoDB: to what it was, and remove the new ibdata files InnoDB created
200317  8:52:24 InnoDB: in this failed attempt. InnoDB only wrote those files full of
200317  8:52:24 InnoDB: zeros, but did not yet use them in any way. But be careful: do not
200317  8:52:24 InnoDB: remove old data files which contain your precious data!
200317  8:52:24 [ERROR] Plugin 'InnoDB' init function returned error.
200317  8:52:24 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
200317  8:52:24 [ERROR] Unknown/unsupported storage engine: InnoDB
200317  8:52:24 [ERROR] Aborting
200317  8:52:24 [Note] mysqld: Shutdown complete

エラーログでググって、下記の記事にたどり着いたのだけど、

MySQL5.5系がservice mysqld startで起動しない

Mysql自体はruby案件で必要だったのでHomebrew経由でインストールしたことあるけれど、
色々試した結果、
dockerってmysqlもきっと内部で環境もっているよね・・?
・・となんとなく思い、docker関連で情報集める。

解決!

まずはこちらを参考に、docker内をゴミ掃除。

dockerでいらないimage,container,networkを一括削除する

  • 使ってないコンテナ
  • 使ってないイメージ
  • 使ってないネットワーク

を削除後、 docker-compose build --no-cache を試す。
変わらず。

泣きそう・・?はつづく。さらに調べると、こちらの記事を発見。

docker-composeでmysqlのバージョン変えたら起動しなくなった

わたしの場合、docker-compose.ymlは特にいじっていなかったのだけど、
実はこの現象が起こる前、別案件のdockerの環境構築を行っていた。

そちらのdocker-compose.ymlを確認すると、
mysqlのバージョンはmysql:5.7.21になっていて、
(どちらもcontainer_nameちゃんとついていたんだけども、)
なんかdocker内部のmysqlのバージョンのログ?が元になっているのだとすると、
効果あるかも・・・・ということで、先程やっていなかった「ボリュームの削除」を実行。

コンソールで出力してみたものの、volume IDがわからなかったので、
Visual Studio CodeのDocker ExtentionのGUIから削除。
スクリーンショット 2020-03-17 19.37.08.png
↑右クリック+「Remove」

その後
docker-compose build --no-cache
すると!!!

動いた〜〜〜〜!!!!??✨

終わり

本当に・・3時間位摩耗したので、先人の記事に救われて感謝。
すべての人がこれで解決するのかは謎ですが、困ったら一度お試しを..!御加護を祈ります。

(解決はできたけど、結局、内情というか根本的な原因についてはわかってない・・・)

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

HerokuでMySQLに接続しようとしたら[Error2055]が出た

概要

HerokuのClearDBを使ってMySQLに接続しようとpythonのプログラムをプッシュして動かしてみたのですが、error 2055 Lost connection~というメッセージが出て接続できませんでした。

結果としてはMySQLに関するエラーではなく、プログラムの書き方が原因だったのですが、同じところで悩んでいる方のためにもまとめておこうと思います。

環境

  • macOS
  • python3.7.1
  • MySQL5.6.47
  • mysql-connector-python

この記事で書かないこと

  • ClearDBの設定方法
  • MySQLの詳しい操作方法

原因

最初はClearDBを追加した後、何か設定が必要なのだと思い色々調べて、マイグレーションなどを試していました。
しかし、ClearDB自体には接続できて、データベースに繋いで操作するプログラム単体で動かしてもエラーは出ず、いまいち原因が分かりませんでした。

そんな時にこちらの記事を見つけなんとなく読んでいたのですが、SQL操作が失敗する原因としてコネクション切断後にクエリ実行する場合と書いてありました。
それは当然だよなと思い次に行こうとしたのですが、ふと自分のコードを見てこれこそが原因だと判明しました。

というのも、私のコードは下記のような作りになっていました。

main.py
#モジュールのインポート

#データベース操作のプログラムのインポート
import database

#メインの処理
    #database内の関数呼び出し
    database.get_data()
database.py
import mysql.connector

#接続先を設定して接続

def get_data():
    #クエリの実行

connection.commit()
connection.close()

これを踏まえてこちらの記事を見てみると、databaseをインポートした時点で関数外に記載されているコードが実行されます。

つまり、main.pyimport databaseで一旦SQLに接続されますが、database.pyget_data()関数は定義がしてあるだけなので実行はされず、最後のconnection.close()で接続が切られるという流れになります。

その後に、main.py内のdatabase.get_data()で関数を呼び出したところで、既に接続は切られているので当然クエリは実行できずエラーが発生するということです。

database.pyだけ実行しても、接続後何もせず接続を切るという動作をしていただけなのでエラーが出ないのも納得です。

対策

というわけでコードを下記のように修正し、関数を呼び出すことで接続を切るようにしたら無事にエラーなく接続できました。

main.py
#モジュールのインポート

#データベース操作のプログラムのインポート
import database

#メインの処理
    #database内の関数呼び出し
    database.get_data()

    #追加
    database.close_db()
database.py
import mysql.connector

#接続先を設定して接続

def get_data():
    #クエリの実行

#修正
def close_db()
    connection.commit()
    connection.close()

参考

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

カラムの追加、削除の方法と間違ったマイグレーションを作ってしまった時の対処法。

よくカラムの追加や削除をするのに、その度にやり方を忘れて毎回いろんな記事を検索してしまってるので、備忘録として記事にしました。

カラムの追加方法

$ rails g migration Addカラム名To追加先テーブル名 追加するカラム名:型
↓↓↓↓↓↓↓↓(例)
% rails g migration AddPrefectureToItems prefecture:references

書き方はキャメルケースで書きます。「SampleHogeHuga」のように単語の頭文字を大文字にすることで単語を区切ります。

カラムの消し方

基本的には、
rails g migration Removeカラム名From削除元テーブル名 削除するカラム名:型
を使った方が良いと思います。
しかし、自分の場合、なぜかうまくrails db:migrateが実行できない事が多かったので、直接MySQLテーブルを操作する方法で削除しました。

SQL文で指定したカラムを消す方法

まず、$ mysql -u rootでmysqlに接続。
$ SHOW DATABASES;で指定するデータベースを探す。
$ USE データベース名;でデーターベースを指定する。
$ SHOW TABLES;でテーブルを探す。
$ ALTER TABLE テーブル名 DROP カラム名;で指定したカラムを削除。
↓↓↓↓↓↓↓↓(例)
$ ALTER TABLE goods DROP stock;

間違ったマイグレーションファイルを作ってしまった時の対処法

まずは、マイグレーションファイルの状況確認。
$ bundle exec rake db:migrate:status
スクリーンショット 2020-03-17 9.29.57.png
左端が「down」になってるファイルは消せますよ〜という意味。
$ rails db:rollbackで一個手前のファイルをダウン状態にできる。
$ rails db:rollback STEP=○で現在地を含めた○個前までdown状態にできます。(つまり○+1個前のファイルまで実行された状態)
$ rm -rf db/migrate/マイグレーションファイル名でマイグレーションファイルを削除。

$ bundle exec rake db:migrate:statusで確認。
スクリーンショット 2020-03-17 9.40.17.png
削除成功!

※本来は最新のマイグレーションから順番に消していく方がいいです。

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

Mac Homebrewで最新のMySQLをインストールする

目的

  • MySQL 8.0.18をインストールする方法をまとめる

実施環境

項目 情報
OS macOS Catalina(10.15.3)
ハードウェア MacBook Pro (16-inch ,2019)
プロセッサ 2.6 GHz 6コアIntel Core i7
メモリ 16 GB 2667 MHz DDR4
グラフィックス AMD Radeon Pro 5300M 4 GB Intel UHD Graphics 630 1536 MB

前提条件

  • HomeBrewが使用できる状態になっていること。

実施方法

  1. 下記コマンドを実行してbrewのインストールリストを更新する。

    $ brew update
    
  2. 下記コマンドを実行して最新のMySQLをインストールする。

    $ brew install mysql
    
  3. 下記コマンドを実行してエラーが出ない事を確認する。

    $ mysql --version
    
  4. 下記コマンドを実行してMySQLを起動する。

    $ mysql.server start
    >Starting MySQL
    >. SUCCESS!
    
  5. 下記コマンドを実行してMySQLのrootユーザでログインする。エラーが出ない事を確認する。

    $ mysql -u root -p
    >Enter password: 何も入力せずにEnterを押下する。
    ・
    ・
    ・
    mysql> 
    
  6. 下記コマンドを実行してrootユーザのパスワードを設定する。

    mysql> USE mysql;
    >Database changed
    mysql> ALTER USER 'root'@'localhost' identified BY '任意のパスワード';
    >Query OK, 0 rows affected (0.00 sec)
    
  7. 下記コマンドを実行して一旦MySQLから出る。

    mysql> exit
    
  8. 下記コマンドを実行してrootユーザでログインする。

    $ mysql -u root -p
    >Enter password: 先に入力した任意のパスワードを入力する。
    ・
    ・
    ・
    mysql>
    
  9. インストール完了である。

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