rokkonet

PC・Androidソフトウェア・アプリの開発・使い方に関するメモ

mysqlインストール

2020 Sep. 22.
2020 Aug. 12.
2019 Nov. 02.
2019 Oct. 14.
2019 Jan. 03.
2019 Jan. 02.
2018 Nov. 18.
2018 Sep. 15.
2018 Sep. 02.

インストール

# apt install mysql-server
 
設定ファイルのcollation-serverを大文字と小文字を区別してくれるutf8mb4_binにする。

# mysql_secure_installation
  質問にはすべて "y" でよい。
 

 

"$ mysql -p -u root" でログインできるようにする

"$ mysql -p -u root" でログインできない状態となっている。
"$ sudo mysql -p -u root" ならログインできる。
"$ mysql -p -u root" でログインできるようにする
 
     $ sudo mysql -u root -p
  mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'PASSWORD';
  mysql> FLUSH PRIVILEGES;   別のターミナルを開いて sudo 無しでログインできるか確認する

 

利用文字コードはutf8mb4、collationはutf8mb4_binにする

MySQL 8.0.1 以降では character_set_database と character_set_server の値はデフォルトで utf8mb4
MySQL 8.0.1 以降では collation-server のデフォルト値は utf8mb4_0900_ai_ci
 
設定状況確認
$ mysql -u root -p
mysql> show variables like "char%";
 各Variable_nameの意味
 
 +--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
 
 
mysql> show variables like "colla%";
+----------------------+--------------------+
| Variable_name | Value |
+----------------------+--------------------+
| collation_connection | utf8mb4_0900_ai_ci |
| collation_database | utf8mb4_0900_ai_ci |
| collation_server | utf8mb4_0900_ai_ci |
+----------------------+--------------------+
 
 

 設定変更

/etc/mysql/conf.d/ に拡張子を".cnf"とする任意のファイル名で次の設定を記述

あるいは

~/.my.cnf に記述

 [client]

# default-character-set = utf8mb4 設定するとクライアント画面で日本語入力ができない


 [mysqld]
# server 全体への設定

character-set-server=utf8mb4
    # default-character-set = CODE ではmysqlが起動しない

collation_server=utf8mb4_bin



 [mysqldump]
 default-character-set = utf8mb4

 [mysql]
 # default-character-set = utf8 設定すると日本語入力できない

 

確認

( www.jifu-labo.net/2015/09/ubuntu_epgrecuna/ より)
$ mysql -u root -p
mysql> show variables like "char%";
 
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
 
mysql> show variables like "colla%";
+----------------------+--------------------+
| Variable_name | Value |
+----------------------+--------------------+
| collation_connection | utf8mb4_0900_ai_ci |
| collation_database | utf8mb4_bin |
| collation_server | utf8mb4_bin |
+----------------------+--------------------+
 
 

collation設定

 
 (データベース単位)

確認:SELECT @@character_set_database, @@collation_database;
変更:ALTER DATABASE COLLATE 'utf8_general_ci'

 

(テーブル単位)
確認:show table status from データベース名;
変更:ALTER TABLE テーブル名 COLLATE 'utf8_general_ci';

 

(カラム単位)
確認:
use information_schema;
select table_name, column_name, collation_name from columns where table_schema="データベース名" and collation_name is not null

 

変更:
use データベース名
ALTER TABLE テーブル名 MODIFY COLUMN カラム名 varchar (255) COLLATE 'utf8_general_ci';

 
 

 

既存データベースの文字コードとcollationの変更

ALTER
DATABASE DB CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; 
既存テーブルの文字コードとcollationの変更
mysql> alter table テーブル名 convert to character set utf8mb4 collate utf8mb4_bin;
あるいは
mysql> ALTER TABLE テーブル名 MODIFY カラム名 値 CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
 

 EPGREC用設定

sql-modeの指定をしない(strict制約をしない)。sql_mode=''
・書き出し先ディレクトリ制約をしない。secure-file-priv = ""


[mysqld]
sql_mode=''
secure-file-priv = ""

ネットワーク(127.0.0.1 を含む)からのアクセスを許可する

/etc/mysql/ 内の設定ファイルに
skip-networking
の行があれば削除もしくはコメント化する。

外部からのアクセスを許可する場合

アクセス許可するIPアドレス設定(bind-address = 0.0.0.0)

/etc/mysql.conf.d/mysqld.cnf の "bind-address = xxx.xxx.xxx.xxx" を修正する。
 すべてのIPアドレスからのアスセスを許可 ->  bind-address = 0.0.0.0
 localhostからのアクセスのみを許可 -> bind-address =127.0.0.1
 bind-addressを複数行記述すると最終行のみが有効。
 1行に、スペース区切りで複数アドレスを記述すると最初のアドレスのみが有効。
 "xxx.xxx.xxx." "xxx.xxx.xxx.0/24" "xxx.xxx.xxx.0/255.255.255.0" といった記述はできない。


/etc/hosts.allow 設定


  mysqld: ALL  (すべてのIPアドレスからのアクセスを許可)
  mysqld: 127.0.0.1  (localhostからのアクセスを許可)
  mysqld: 192.168.1.  (192.168.1/24からのアクセスを許可)

3306ポート開放

# ufw enable
# ufw allow 3306/tcp
# ufw allow 3306/udp

3306ポートをLISTENしているのを確認する。
$ netstat -na | grep 3306
$ mysql -h 127.0.0.1 -P 3306 -u root -p

PC shutdown時にmysqlが終了しない現象を防ぐ(ubuntu15.04以降)


システムシャットダウン時にmysqlを手動で止める?
# systemctl stop mysql.service && systemctl disable mysql.service


以下の対策では再発した。
shutdown時に"A stop job is running for MySQL Community Server" と表示され10分間停止してしまう現象への対処

( askubuntu.com/questions/615129/systemd-mysql-wont-stop より)
# chgrp mysql /etc/mysql/debian.cnf
# chmod 640 /etc/mysql/debian.cnf
# cp /lib/systemd/system/mysql.service /etc/systemd/system/
# chmod 755 /etc/systemd/system/mysql.service

/etc/systemd/system/mysql.service を編集する。
  [Service]セクションに次の行を書き込む。
    ExecStop=/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf shutdown
変更をsystemdに登録する。
  # systemctl daemon-reload
以下の対策はxubuntu16.04では改善されなかった。
( askubuntu.com/questions/615129/systemd-mysql-wont-stop より)
# cat /etc/mysql/debian.cnf
    password = xxxxx を確認する。
$ mysql -u root -p
mysql> GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'xxxxx' ;
mysql> flush privileges;
以下の対策はxubuntu16.04では改善されなかった。

  # cp /lib/systemd/system/mysql.service /etc/systemd/system/
  # chmod 755 /etc/systemd/system/mysql.service