15分でMySQL8.0をamazon linux2にyumでインストールする!!
amazon linux1でMySQL 8.0のインストールは何回もやったのですが、amazon linux2でのMySQL8系のインストールは初めて・・そして、やっぱりインストールでハマった・・(汗)
前回は、amazon linux1
今回は、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サーバを立ち上げることができました!