tech-memo

MySQL

Macにインストール

ArchiveからOSバージョンにあうDMGパッケージをダウンロードする.
macOS 10.14のMojaveは8.0.18.

インストール後、bash_profileにパス(/usr/local/mysql/bin)を追加する

export PATH="/usr/local/mysql/bin:$PATH"

反映は、

source .bash_profile

サービスの起動、停止

brew services start mysql

停止

brew services stop mysql

MySQL Clientの使い方

mysql -u [ユーザ名] -p

パスワードを聞かれるので入力する.

mysql -u [ユーザ名] -p [データベース名]
mysql -u root -p -e "select ... from tbl1" [database名] --batch --silent
mysql -u root -p [database名] < [sqlファイル]
connect [データベース名]

SQL

メタ情報

describe [table_name];
show tables;
show databases;

create database

create database [db];

テーブルバックアップ

create table table1_bak as select * from table1;

日付関数

CONVERT_TZ(current_timestamp, 'UTC', 'Asia/Tokyo')

設定 Configuration

config file

/usr/local/mysql/my.ini などに書く。

[mysqld]
max_allowed_packet=128M

AWS RDSなどはコンソールから設定する。 Macはシステム設定にMySQLがあり、そこで設定したりする。

接続関係

SHOW GLOBAL VARIABLES LIKE 'max_connections';

一般的にはmax_connectionsのデフォルト値は151。この値は設定ファイル(通常はmy.cnfまたはmy.ini)で確認および変更することができる。
AWS RDSの場合は、DBInstanceClassMemory/12582880で計算されて設定されるらしい。

SHOW VARIABLES LIKE 'max_connections';
show status where `variable_name` = 'Threads_connected';

パケットサイズ(SQLサイズ)

SHOW VARIABLES LIKE  'max_allowed_packet';

デフォルト32M。LONGBLOBなどを使う場合は大きくする必要がある。

トランザクションの開始

rollbackで確認したいときは、set autocommitを実行して、start transactionする必要がある。

set autocommit = 0;
start transaction;
update tab1 set col1 = 'hoge' where key1 = 'key-1';
rollback;

commitはcommitでよい

connect for Python

pythonでmysqlを使うライブラリはいくつかあるよう(mysqlclient, MySQL-Python, pymysql)だが、mysqlclientを使ってNameError: name '_mysql' is not definedのエラーが出た場合は、シェルに以下の環境変数を追加したら解消した.

export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:$PATH"

rootのパスワード変更

mysqlにログイン

mysql -u root -p
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';
FLUSH PRIVILEGES;

newpasswordは空にもできる
このあとサービスを再起動する

パスワード認証方式

mysql8.0からパスワードの認証方式が違うらしい。
一部のライブラリで接続できない事象が発生。(VSCodeプラグインなどでも発生する)
caching_sha2_passwordが新しい認証方式。
mysql_native_passwordにすると接続できるようになる。
以下で変更する。(mysqlのuserごと)

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'