MySQLメモ

1つのページに複数のDBについての情報をまとめたかったが、煩雑になってわかりにくくなった・・・

# １．インストールとアンインストール

## １－１．インストールの準備

yumリポジトリをインストールしておく
https://dev.mysql.com/downloads/repo/yum/

最新バージョン以外をインストールしたい場合は、

```shell
yum-config-manager --disable mysql80-community
yum-config-manager --enable mysql57-community
```

##１－２．インストール
```shell
yum install mysql-community-server
```
依存関係のある以下もインストールされる。
mysql-community-client 
mysql-community-common
mysql-community-libs

###　１－２－１．Windows版のインストールメモ

Windows版でMySQL8をインストールすると、インストール先を選択できないことがあった。
インストールするモジュールを選択する画面の次で、インストール先を選択する画面が出ずに
【Execute】ボタンの画面が表示された場合は、エクスプローラで隠しファイルを表示する設定にして、「C:\ProgramData\MySQL\MySQL Server 8.0\Data」フォルダを作成すると解決する。

##１－３．アンインストール
```shell
yum remove mysql-community-server
```
これだけだとデータは削除されない。
データを削除するには

```shell
rm -rf /var/lib/mysql
```
を実行する

##１－４．インストールされているものの確認
```shell
yum list installed |grep mysql
```

#２．起動と停止
##２－１．サービス起動
###RHEL7(MySQL8 or MySQL5.6)
```shell
systemctl start mysqld.service
```

###RHEL6(MySQL8 or MySQL5.6)
```shell
service mysqld start
```

##２－２．初回ログイン
###MySQL8(RHEL7 or RHEL6)
```shell
grep 'temporary password' /var/log/mysqld.log
mysql -uroot -p
```
###MySQL5.6(RHEL7 or RHEL6)
```shell
mysql -uroot
```
##２－３．停止

###RHEL7(MySQL8 or MySQL5.6)
```shell
systemctl stop mysqld.service
```

###RHEL6(MySQL8 or MySQL5.6)
```shell
service mysqld stop
```

##２－４．起動状況の確認
###port番号の確認
```shell
netstat -tlpn
```
3306がlistenしていれば動いている
オプションの意味は
t:tcpを表示
l:接続待ち(listen)でデフォルトは省略される
p:プログラムのPIDと名前を表示
n:名前解決せずに数字で表示

#３．ユーザー登録
##３－１．rootパスワード変更
###MySQL5.6
```sql
update mysql.user set password=password('hogepasswd') where user = 'root';
flush privileges;
```

###MySQL8
```sql
SET GLOBAL validate_password.length=4;
SET GLOBAL validate_password.policy=LOW;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'hogepasswd';
```

##３－２．一般ユーザー登録
###MySQL5.6
```sql
grant all privileges on *.* to hogeuser@'%' identified by 'hogepasswd';
grant all privileges on *.* to hogeuser@localhost identified by 'hogepasswd';
```
「'%'」だけでは自端末から接続できない(※)ので「localhost」も指定する
※「-h <IPアドレス>」なら接続できる

###MySQL8
```sql
CREATE USER  hogeuser@localhost IDENTIFIED WITH mysql_native_password BY 'hogepasswd';
GRANT ALL PRIVILEGES on *.* to hogeuser@localhost;
CREATE USER  hogeuser@'%'IDENTIFIED WITH mysql_native_password BY 'hogepasswd';
GRANT ALL PRIVILEGES on *.* to hogeuser@'%';
```
#４．接続
##４－１．接続コマンド
```shell
mysql -u <ユーザ名> -p<パスワード> -h <ホスト名> <DB名>
```
-pとパスワードの値はスペースを空けない
その他はスペースを空けても、空けなくてもどちらでも問題ない

##４－２．接続権限の確認
###MySQL5.6
```sql
select user , host from mysql.user;
```
#５．ODBC
##５－１．ODBCインストール

```sh
yum install mysql-connector-odbc
```

## ５－２．odbc.ini
```text
[MySQL]
Driver = /usr/lib64/libmyodbc8a.so
SERVER = localhost
PORT = 3306
USER = hogeuser
Password = hogepasswd
Database = hogedb
Charset = CP932
Option = 2
```

#６．文字コード
##６－１．/etc/my.cnf
[mysqld]
character_set_server=sjis
default_authentication_plugin=mysql_native_password

[mysql]
default_character_set=sjis

## ６－２．確認方法
show variables like "chara%";

#７．エラー対応
## ７－１．ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
「/etc/my.ini」の[mysqld]に以下を追加する

```text:/etc/my.cnf
default_authentication_plugin=mysql_native_password
validate_password.length=3
validate_password.mixed_case_count=0
validate_password.policy=LOW
```

my.cnfはrootのパスワード変更後に変えないとエラーになる。
またはmy.cnfを変えなくても、以下でも大丈夫そう。(以下もrootのパスワードの変更は必要)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MySQL_80';
uninstall component 'file://component_validate_password';

## ７－２．ERROR 1290 (HY000): The MySQL server is running with the –secure-file-priv option so it cannot execute this statement

設定が正しいか、以下のコマンドで確認する。
select @@secure_file_priv;

# ８．その他
## ８－１．IPv6で起動するのをIPv4に変更
![image.png](https://qiita-image-store.s3.amazonaws.com/0/187121/c6c67277-2606-98d8-d479-43d5b621fb6e.png)
/etc/my.cnfの[mysqld]に「bind-address=0.0.0.0」を指定する。
 https://dev.mysql.com/doc/refman/5.6/ja/ipv6-server-config.html