RDB・NoSQL MySQL Linux

Ubuntu16.04にMySQLをインストールする。

投稿日:2017年10月21日 更新日:

MySQLのインストール

$ sudo apt install -y mysql-server libmysqlclient-dev

 

バージョンを確認する。

$ mysql --version

結果
mysql Ver 14.14 Distrib 5.7.19, for Linux (x86_64) using EditLine wrapper

MySQLをサービス起動・終了する

MySQLをサービス起動する

起動前に現在の状態を確認しておこう。

$ sudo service mysql status

Active: active (running) since 土 2017-10-21 11:56:19 JST; 11min ago

このようになっていれば正常起動できている。

$ sudo service mysql start

これで起動できる。

$ service mysql stop

これで終了できる。

終了している状態でstatusを見てみた。

Active: inactive (dead) since 土 2017-10-21 12:08:32 JST; 4s ago

データベースとユーザーの作成

mysqlにログインする

$ mysql -u ユーザー名 -p パスワード

初回はrootユーザーで入り、データベースやユーザーを作成する。

$ mysql -u root -p 

インストール時にrootユーザーのパスワードを設定している場合は、 -p オプションの後にパスワードを入力しよう。Ubuntuの場合はsudoコマンドで入る必要がある。

$ sudo mysql -u root -p

このように。

データベースを作成する create database DB名

mysql>create database データベース名 default character set 文字コード名;
mysql>create database pydev1 default character set utf8mb4; MySQLには歴史的経緯から文字コードUTF8には'utf8'と'utf8mb4'がある。 'utf8'では4バイト文字が扱えないケースがあるので、'utf8mb4'を指定しておけばOKだ。

ユーザーを作成する create user ユーザー名

mysql>create user ユーザー名@接続先 identified by パスワード
mysql>create user pydev1@localhost identified by 'pydev1pw'

テーブルを作成する

mysql>create table DB名.テーブル名 (カラム名 型,カラム名 型...);
mysql>create table pydev1.urls (url text,http_status_code varchar(3));

 

主キーをつけて作成

mysql>create table pydev1.urls (url varchar(100) NOT NULL PRIMARY KEY,http_status_code varchar(3));

主キーを後付けする

mysql> ALTER TABLE DB名.テーブル名 ADD PRIMARY KEY (カラム名,カラム名,カラム名);
mysql> ALTER TABLE pydev1.テーブル名 ADD PRIMARY KEY (url);

テーブルにカラムを追加する

mysql>ALTER TABLE DB名.テーブル名 ADD カラム名 型 AFTER どのカラムの後;
mysql>ALTER TABLE pydev1.urls ADD domain varchar(200) AFTER url;

テーブルのカラム情報を表示する

mysql>SHOW COLUMNS FROM DB名.テーブル名;
mysql>SHOW COLUMNS FROM pydev1.urls;

テーブル内容を全削除する

mysql> truncate table DB名.テーブル名;
mysql> truncate table pydev1.urls;

pythonからmysqlに接続する

mysqlclientが枯れていて安定しているが、oracle社公式クライアントのMySQL Connector/Pythonもある。

mysqlclientはpip管理されているので、pipでインストールしよう。

(pydev1) $ pip install mysqlclient

スクリプト内でのMySQLの接続

  1. mysqlクライアントを読み込む
    import MySQLdb
  2. コネクションを取得する。
    conn = MySQLdb.coonect(接続情報)
  3. コネクションからカーソルを取得する。
    cursor=conn.cursor()
  4. カーソルに対してSQL文を発行する。
    cousor.execute(任意のSQL文)
  5. コネクションにコミットする。
    conn.commit()
  6. コネクションを閉じる。
    conn.close()

MySQL-Pythonプログラミング時のエラー

_mysql_exceptions.OperationalError: (1044, “Access denied

_mysql_exceptions.OperationalError: (1044, "Access denied for user 'pydev1user'@'localhost' to database 'pydev1'")

原因:pydev1userがpydev1というDBに接続する権限がありません。権限を与えてあげる。

mysql>GRANT ALL ON pydev1.* TO pydev1user IDENTIFIED BY 'パスワード';

IDENTIFIED BY ‘パスワード’がないとエラーになるので注意。

TypeError: Can’t convert ‘NoneType’ object to str implicitly

implicitly 暗黙的に
NoneTypeはstr型に暗黙変換できないよ。

mysql_exceptions.IntegrityError: (1062, “Duplicate entry ‘値’ for key ‘PRIMARY'”)

主キーが重複しています。
integiryt 高潔、誠実、清廉、完全な状態、無傷

NameError: name ‘IntegrityError’ is not defined

IntegrityErrorがcatchできないというエラー。

これでcatchできる。

from MySQLdb import IntegrityError

except IntegrityError:

_mysql_exceptions.ProgrammingError: not all arguments converted during string formatting

プログラミングエラー。SQLの書き方がおかしいです。
引数をバインドしている場合の、バインドのさせ方とかをチェックする。

MySQLの管理者コマンド一覧

データベースの一覧を表示する

mysql>show databases;

データベース内のテーブル一覧を表示する

mysql>SHOW TABLES FROM データベース名;

 

データベース内のユーザー一覧を表示する

mysql> select Host, User, Password from mysql.user;

 

ユーザーの権限を表示する

mysql>SHOW GRANTS for 'pydev1user'@'localhost';
GRANT USAGE ON *.* TO 'pydev1user'@'localhost'

 

 

USAGEは何の権限もないということ。

ユーザーに権限を付与する

グローバルレベル:

mysql>GRANT 権限 ON *.* TO ユーザー@ホスト;
mysql>GRANT ALL ON *.* TO pydev1user@localhost;

データベースレベル:
mysql>GRANT 権限 ON db_name.* TO user;

テーブルレベル:
mysql>GRANT 権限 ON db_name.table_name TO user;

カラムレベル:
mysql>GRANT 権限 (カラム1, カラム2, …) ON db_name.table_name TO user;

-RDB・NoSQL, MySQL, Linux

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

Ubuntu16.04 ユーザーを追加する・sudo グループに追加

ユーザーを追加する syntax:adduser user_name $ adduser ty   sudo グループに追加 syntax:gpasswd -a user_name sudo …

no image

Ubuntu 16.04のランチャー(タスクバー・ショートカット)への登録の仕方

起動して、右クリックで「ランチャーに登録」できる。 ここでは「端末」をランチャーに登録していく。 このように、初期状態ではランチャーには「端末」は登録されていない。 まずは「端末」を開く。任意のアプリ …

no image

Linuxに苦手意識を持ってしまうたった1つの理由

現代の商用サーバーはほとんどがLinuxかWindowsサーバーである。 特にOSSであり無料で使えるLinuxは選ばれやすい。 業務アプリエンジニアが作ったアプリもほとんどは、Linux上で動いてい …

no image

Linuxのディレクトリ構成

Linuxのディレクトリを逐一説明していくよりも、Linuxのディレクトリ構成にはルールがありますので、そのルールを見ていきましょう。 Linuxのあらゆるディストリビューションは、基本的にそのルール …

no image

Ubuntu16.04 aptコマンドの使い方

パッケージ管理されているモジュール一覧を取得する。 $ apt list 多分これだけ見る人はいない。 任意のモジュールがパッケージ管理されているか確認する。 $ apt list | grep “m …