毎日テキストマイニング

180日間、毎日テキストマイニングをするブログです

2018/6/30【番外編】MySqlの基礎を学ぶ1、mysql.server startができない

今までTwitterから得た情報は全てテキストで扱っていたのですが、昨日の分析ごっこをするだけでも手間がかかって不便です。早めにデータベースを構築してSQLで扱えるようにしたいです。

なので、今日は1日かけてMySQLの基礎から学んで行こうと思います。あ、MySQLすでに自分のmacOSに入っています。

データベースの種類

  • リレーショナルデータベース;Excelシートのようなもの。MySQLやPostgressはこれ。

  • キーバリュー型データベースストア:キーとバリューだけが入っている単純なもの。

  • オブジェクト指向データベース:オブジェクト指向で書かれたデータベース。

  • XMLデータベース:XMLで書かれたデータベース。

SQLのルール

  • SQL文で大文字小文字は関係ない。

  • 終わりは必ずセミコロンをつける;

  • 文字と日付はシングルクォテーションで囲む。

データーベースのルール

  • 1つのアプリに1つのデータベースを作る。

  • そのデータベースの中に入っているのがテーブル。

  • テーブルはいくつも作れる。

  • カラム(列)には決まったデータ型しか入れられない。

  • 主に、数値型、文字列型、日付型がある。

データ型の種類

数値

名前 範囲
TINYINT -128 127
MALLINT -32768 32767
MEDIUMINT -8388608 8388607
INT -2147483648 2147483647
BIGINT -32768 32767
MALLINT -9223372036854775808 9223372036854775807

ひとまずINTを覚えておけば間違いないかと。あと小数点がある場合はFLOATにする。

MySQL :: MySQL 5.6 リファレンスマニュアル :: 11.2 数値型

文字列型

char、varhar

CHAR 型と VARCHAR 型には、格納する最大文字数を表す長さが宣言されています。たとえば、CHAR(30) には最大 30 文字を格納できます。

TEXT、BLOB

MySQL Connector/ODBC は BLOB 値を LONGVARBINARY として、TEXT 値を LONGVARCHAR として定義します。

BLOB 値と TEXT 値は非常に長くなる可能性があるので、使用するときに次の制約が生じることがあります。

ソート時には、カラムの max_sort_length バイトだけが使用されます。max_sort_length のデフォルト値は 1024 です。サーバーの起動時または実行時に、max_sort_length の値を増やすことによって、ソートまたはグループ化に影響するバイトを増やすことができます。すべてのクライアントで max_sort_length セッション変数の値を変更できます

文字列は文字量が多い場合はTEXTを使うのが良さそう。

日付型

名前 範囲
DATE '0000-00-00'
TIME '00:00:00'
DATETIME '0000-00-00 00:00:00'
TIMESTAMP '0000-00-00 00:00:00'
YEAR 0000

かなり駆け足で詰め込んでいますので、細かい部分はあとで勉強し直します。

MySQLの設定はmy.cnfで行う

場所はここ

vim /usr/local/etc/my.cnf

my.cnfに下記を追加をする(日本語の文字化け防止)

character-set-server=utf8
default-character-set=utf8

MySQLのコマンド

箇条書きです。

可視化ツール

SQLiteのDB Browser for SQLiteのように可視化できるツールがないかと思ったら、ORACLEからMySQL Workbenchというのがちゃんと出ているんですね(誰か早く教えて欲しかった)。これを導入していきます。インストールは下記のURLから。

MySQL Workbench 6.3

https://www.mysql.com/jp/products/workbench/

インストールができたら起動させます。 上のメニューにある[Database]->[connect]を選んでサーバーに接続させるのですが、その前にMySQLサーバーを起動させる必要があります。mysql.server startでひさしぶりにMySQLを起動。さすがにエラーが出ますね。

$ mysql.server start
ERROR! MySQL server PID file could not be found!

上記のエラーでググってみると、PIDをkillしろだとか、uninstallをして入れ直せ、とか色々な方法があるみたいですが、大した操作をしたこともないので、手軽なuninstallの方法にすることにしました。

$ brew uninstall --force mysql
$ brew install mysql
$ mysql.server start

これでいけると思ったのですがいけないですね。

ERROR! The server quit without updating PID file (/usr/local/var/mysql/air.pid).

再びググって見ますと権限がうまく設定できていないそうなので権限を設定します。

sudo chown -R _mysql:_mysql /usr/local/var/mysql

これでも同じエラーがでます。 うーん、同じ症状になっている人が見つからず、とりあえずMySQLのエラーを見に行くことに。

cd /usr/local/var/mysql/
sudo grep ERROR ファイルの名前.local.err

エラーの中身は

[ERROR] InnoDB: Unable to lock ./ibdata1 error: 35

の大量エラー。このエラーで再びGoogleで検索。 やはりPIDをkillする必要があるとのこと。

$ ps aux| grep mysqld

mysql関連のPIDを探して

$ kill -9 PIDの番号

これでいけるかと思って、再び起動。それでもまだできず笑。

Google検索を見て行くと、どうやらMySQL 8.0だと前のバージョンが動いていると、エラーが起こるとの情報を発見。そんなバカな。

ひとまずMySQLのバージョンを確認。

$ mysql --version
mysql  Ver 8.0.11 for osx10.12 on x86_64 (Homebrew)

確かにバージョンが8.0ですね。前のバージョンが5.7らしいので、5.7をインストール、スタート&ストップを実行します。

brew install mysql@5.7
/usr/local/opt/mysql@5.7/bin/mysql.server start
/usr/local/opt/mysql@5.7/bin/mysql.server stop

これで、前バージョンの完全に止まっているはず。 再び、mysql.serverを実行

$ sudo mysql.server restart
ERROR! MySQL server PID file could not be found!
Starting MySQL
..... SUCCESS!

$ sudo mysql.server stop
Shutting down MySQL
.. SUCCESS!

StartもStopもうまくできますね。 ここまで来るのに長かった笑。

最初の目的であったMySQL Workbenchを起動、connectでつなげます。 f:id:rimt:20180630131210p:plain Workspaceを開くことができました。 f:id:rimt:20180630131224p:plain 午後はMySQLを触っていきます。