Database JUNKY

MySQL,MariaDBを中心としたブログです

15分でMySQL8.0をamazon linux2にyumでインストールする!!

amazon linux1でMySQL 8.0のインストールは何回もやったのですが、amazon linux2でのMySQL8系のインストールは初めて・・そして、やっぱりインストールでハマった・・(汗)

前回は、amazon linux1

hit.hateblo.jp

今回は、amazon linux2にmysql 8.0をインストールする手順を書きます。一部、個別の設定等も書いてしまっているので、皆様の環境に合わせて不要な情報は随時読み飛ばしてくださいませ

amazon linux2にmysql 8.0をインストールする

既存でインストールされている邪魔者を削除

mariadbのライブラリ等が入っているとインストールが失敗するので、予め削除しておく。また、デフォルトのデータディレクトリに関しても、混乱を回避するため、削除しておいたほうがいいかもしれません

$ sudo yum remove mariadb-libs
$ sudo rm -rf /var/lib/mysql

リポジトリのインストール

$ sudo rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

MySQL8のインストール

インストール時に、エラー: パッケージ: mysql-community-server-8.0.19-1.el6.x86_64 (mysql80-community) 要求: libsasl2.so.2()(64bit) とか怒られるので、以下の通り、libsasl2.so.2のシンボリックリンクを作成してお茶を濁す。そして、念のため、yumのキャッシュをクリア!

$ cd /usr/lib64
$ sudo ln libsasl2.so.3 libsasl2.so.2
$ sudo  yum clean all
$ sudo yum -y install mysql-community-server mysql-devel

MySQLの起動

$ sudo systemctl start mysqld.service
$ sudo systemctl enable mysqld.service

初期パスワードの確認

$ sudo cat /var/log/mysqld.log | grep 'temporary password'
2020-03-13T09:03:55.078513Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: c8vVFdz8%q<5

接続したら、まずパスワードを変更する

仮で、@a@1@2@3@4@55azA@を新パスワードに設定しました

$ sudo mysql_secure_installation

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.
The 'validate_password' component is installed on the server.
The subsequent steps will run with the existing configuration
of the component.
Please set the password for root here.

New password: @a@1@2@3@4@55azA@

Re-enter new password: @a@1@2@3@4@55azA@

Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
Success.

All done!

接続

上記の設定が完了したらとりあえず接続、rootのままでの接続は危険なので、新規にアカウントを作成する

$ mysql -uroot -p@a@1@2@3@4@55azA@

認証方式を簡単にする

php等の接続で、認証系がひっかかる時があるので色々と変更

validate_passwordをlowに変更した後、component_validate_password コンポートネントを削除

mysql> SHOW GLOBAL VARIABLES LIKE '%validate_password%' ;
mysql> SET GLOBAL validate_password.policy=LOW ;
mysql> UNINSTALL COMPONENT 'file://component_validate_password';
mysql> SHOW GLOBAL VARIABLES LIKE '%validate_password%' ;
Empty set (0.00 sec)
mysql> exit ;

mysqlの再起動

$ sudo systemctl restart mysqld.service

再度接続

別のアカウントを作成するため、再度ログインします

$ mysql -uroot -p@a@1@2@3@4@55azA@

rootのパスワード変更

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '3skWtAAPSnPs';

admenアカウントを追加(管理者アカウント)

パスワードは、プログラム言語の互換性確保のため、mysql_native_passwordを採用

CREATE USER 'admen' identified with mysql_native_password by '333dsdoa@sas@sd@ac-c' ;

続けて、admenユーザーの権限を付与します

GRANT 権限 ON データベース名.テーブル名 TO 'ユーザー名';
GRANT ALL PRIVILEGES ON *.* TO admen ;

appアカウントを追加(アプリアカウント)

パスワードは、プログラム言語の互換性確保のため、mysql_native_passwordを採用

CREATE USER 'app' identified with mysql_native_password by '@OobDYSa@sesas@sd@ac-c' ;

続けて、appユーザーの権限を付与します

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHOW DATABASES ON *.* TO app ;

一旦 MySQLを停止

$ sudo systemctl stop mysqld.service

my.cnfの編集

ここは、人それぞれだと思いますので、あくまでも参考程度に笑

$ sudo mv /etc/my.cnf /etc/my.cnf.org
$ sudo -i
# cat << 'EOT' > /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
explicit_defaults_for_timestamp = true
secure-file-priv = ""
sql_mode = 'IGNORE_SPACE,PIPES_AS_CONCAT'
server-id = 101
character-set-server = utf8mb4
collation-server = utf8mb4_ja_0900_as_cs
init-connect = SET NAMES utf8mb4
default-time-zone = SYSTEM
log_timestamps = SYSTEM
default-authentication-plugin = mysql_native_password
log-error = /var/lib/mysql/mysql-error.log
slow_query_log = 1
slow_query_log_file = /var/lib/mysql/mysql-slow.log
long_query_time = 1.0
log_queries_not_using_indexes = 0
general_log = 0
general_log_file = /var/log/mysql/mysql-query.log
max_connections    = 2000
max_connect_errors = 100
max_allowed_packet = 32M
EOT

MySQLを起動

# systemctl start mysqld.service
# exit 
$

以上で、無事 amazonlinux2でMySQL 8.0サーバを立ち上げることができました!

f:id:hit10231023:20180309104332j:plain