CentOS8 で MySQL 8.0 をインストールしてデプロイする方法

CentOS8 で MySQL 8.0 をインストールしてデプロイする方法

MySQL 8 の公式バージョン 8.0.11 がリリースされました。公式発表によると、MySQL 8 は MySQL 5.7 より 2 倍高速で、多くの改善と高速なパフォーマンスをもたらします。結局誰が最強なのか?参照: MySQL 5.7 と 8.0 ではどちらのパフォーマンスが優れていますか?

MySQL 8.0 のインストール (YUM 方式)

1. まず、システムのデフォルトまたは以前にインストールされていた可能性のある他のバージョンの MySQL を削除します。

# for i in $(rpm -qa|grep mysql);do rpm -e $i --nodeps;done
# rm -rf /var/lib/mysql && rm -rf /etc/my.cnf

2.Mysql8.0のyumリポジトリをインストールする

mysql80-コミュニティリリース-el7-1.noarch.rpm  
 
# yum ローカルインストール https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm

ここに画像の説明を挿入

ここに画像の説明を挿入

ここに画像の説明を挿入

3. MySQL 8.0をインストールする

# yum で mysql-community-server をインストールします
  
#MySQL サーバーを起動し、MySQL の自動起動を実行します# systemctl start mysqld
# systemctl でmysqldを有効にする
# systemctl ステータス mysqld

ここに画像の説明を挿入

[root@localhost opt]# netstat -lantp | grep 3306
tcp6 0 0 :::33060 :::* LISTEN 25431/mysqld    
tcp6 0 0 :::3306 :::* LISTEN 25431/mysqld    
[root@localhost opt]# ps -aux | grep mysqld
mysql 25431 0.8 17.2 1776932 350232 ? SSL 16:24 0:01 /usr/sbin/mysqld
ルート 25672 0.0 0.0 112828 980 ポイント/1 S+ 16:28 0:00 grep --color=auto mysqld

ここに画像の説明を挿入

ログインエラー

ここに画像の説明を挿入

パスワード ログインをスキップし、skip-grant-tables を追加して、MySQL サービスを再起動します。

[root@localhost opt]# vim /etc/my.cnf
[mysqld]
スキップ許可テーブル

[root@localhost opt]# systemctl mysqldを再起動します
[root@localhost opt]#mysql

ここに画像の説明を挿入

ここに画像の説明を挿入

SQLを使用してルートパスワードを変更する

ターミナルに入り、mysql -u root -p コマンドを入力して Enter キーを押します。パスワードを入力する必要がある場合は、Enter キーを押すだけで、パスワードなしでデータベースにログインできます。

mysql> update user set password=password("新しいパスワード") where user="root";
または、mysql> set password for 'username'@'host' = password('newpassword') 
mysql> 権限をフラッシュします。
mysql>終了

ここに画像の説明を挿入

知らせ
set password for 'username'@'host' = password('newpassword') コマンドは、新しいパスワードを変更します。

この手順を実行すると、「ERROR 1290 (HY000): MySQL サーバーは --skip-grant-tables オプションで実行されているため、このステートメントを実行できません」というエラーが発生します。権限のフラッシュコマンドを実行してから、このコマンドを実行します。

注意: この手順を実行すると、エラー「ERROR 1290 (HY000): MySQL サーバーは --skip-grant-tables オプションで実行されているため、このステートメントを実行できません」が表示される場合があります。権限のフラッシュコマンドを実行してから、このコマンドを実行します。

4. デフォルトのパスワードで初めてログインした後は、パスワードをリセットする必要があります。

デフォルトのパスワードを確認してください。デフォルトのパスワードは「e53xDalx.*dE」です。
[root@DB-node01 ~]# grep '一時パスワード' /var/log/mysqld.log
2019-03-06T01:53:19.897262Z 5 [注記] [MY-010454] [サーバー] root@localhost の一時パスワードが生成されました: e53xDalx.*dE
 
[root@DB-node01 ~]# mysql -pe53xDalx.*dE
............
mysql> バージョンを選択します();
エラー 1820 (HY000): このステートメントを実行する前に、ALTER USER ステートメントを使用してパスワードをリセットする必要があります。

エラー メッセージは、初期パスワードをリセットする必要があることを示しています。次に、MySQL ログイン パスワードのリセットを開始します (MySQL データベースに切り替えて、use mysql を使用する必要があることに注意してください)。

mysql> mysql を使用します。
エラー 1820 (HY000): このステートメントを実行する前に、ALTER USER ステートメントを使用してパスワードをリセットする必要があります。
  
mysql> ALTER USER 'root'@'localhost' が '123456' によって識別されます。
エラー 1819 (HY000): パスワードが現在のポリシー要件を満たしていません

これは実際にはvalidate_password_policyの値に関連しています。MySQL 8.0ではvalidate_password_policyに関連する設定名が変更されており、MySQL 5.7とは少し異なります。

mysql> グローバルvalidate_password.policyを0に設定します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
  
mysql> グローバルvalidate_password.length=1を設定します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

ここに画像の説明を挿入

パスワードを変更してください

mysql> ALTER USER 'root'@'localhost' が '123456' によって識別されます。
クエリは正常、影響を受けた行は 0 行 (0.05 秒)
  
mysql> 権限をフラッシュします。
クエリは正常、影響を受けた行は 0 行 (0.03 秒)

終了し、新しいパスワードで再度mysqlにログインします。

#mysql -p123456
...........
mysql> バージョンを選択します();
+-----------+
| バージョン() |
+-----------+
| 8.0.15 |
+-----------+
セット内の 1 行 (0.00 秒)

サービスポートを表示

mysql> 'port' のようなグローバル変数を表示します。
+---------------+-------+
| 変数名 | 値 |
+---------------+-------+
| ポート | 3306 |
+---------------+-------+
セット内の1行(0.01秒)

ここに画像の説明を挿入

MySQL接続の認証情報を表示する

mysql> mysql.user からホスト、ユーザー、パスワードを選択します。
エラー 1054 (42S22): 「フィールド リスト」に不明な列「パスワード」があります

ここに画像の説明を挿入

上記はMySQL 5.6以下のviewコマンドです。MySQL 5.7以降のデータベースでは、mysql.userテーブルにパスワードフィールドがありません。パスワードフィールドはauthentication_stringに変更されています。

mysql> mysql.user からホスト、ユーザー、認証文字列を選択します。
+-----------+------------------+------------------------------------------------------------------------------------+
| ホスト | ユーザー | 認証文字列 |
+-----------+------------------+------------------------------------------------------------------------------------+
| localhost | mysql.infoschema | $A$005$これは無効な SALT とパスワードの組み合わせであり、決して使用してはいけません |
| localhost | mysql.session | $A$005$これは無効なソルトとパスワードの組み合わせであり、決して使用してはいけません |
| localhost | mysql.sys | $A$005$これは無効な SALT とパスワードの組み合わせであり、決して使用してはいけません |
| ローカルホスト | ルート | $A$005${7J0=4Dc7Jym8eI/FU4jimKWFvkD9XmoAkF1ca5.Un0bc6zgmPtU.0 |
+-----------+------------------+------------------------------------------------------------------------------------+
セット内の 4 行 (0.00 秒)

ここに画像の説明を挿入

mysql8.0 ユーザーパスワード変更コマンド

mysql> mysql を使用します。
mysql> ALTER USER 'root'@'localhost' が '123456' によって識別されます。
mysql> 権限をフラッシュします。

MySQL 8.0 のインストール (バイナリ モード)

1. まず、システムのデフォルトまたは以前にインストールされていた可能性のある他のバージョンの MySQL を削除します。

[root@mysql8-node ~]# for i in $(rpm -qa|grep mysql);do rpm -e $i --nodeps;done
[root@mysql8-node ~]# rm -rf /var/lib/mysql && rm -rf /etc/my.cnf

2. 必要なソフトウェアパッケージをインストールする

[root@mysql8-node ~]# yum -y libaio をインストールします
[root@mysql8-node ~]# yum -y インストール net-tools

3. MySQL 8.0.12をダウンロードしてインストールする

[root@mysql8-node ~]# グループ追加 mysql
[root@mysql8-node ~]# useradd -g mysql mysql
 
[root@mysql8-node ~]# cd /usr/local/src/
[root@mysql-node src]# ll
-rw-r--r-- 1 ルート ルート 620389228 2018年8月22日 mysql8.0.12_bin_centos7.tar.gz
[root@mysql-node src]# tar -zvxf mysql8.0.12_bin_centos7.tar.gz
[root@mysql-node src]# mv mysql /usr/local/
[root@mysql-node src]# chown -R mysql.mysql /usr/local/mysql
 
[root@mysql-node src]# vim /home/mysql/.bash_profile
エクスポート PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
[root@mysql-node src]# ソース /home/mysql/.bash_profile
[root@mysql-node src]# echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
[root@mysql-node src]# ソース /etc/profile

4. データディレクトリを作成する

[root@mysql-node src]# mkdir -p /data/mysql/{data,log,binlog,conf,tmp}     
[root@mysql-node src]# chown -R mysql.mysql /data/mysql

5. MySQLを設定する

[root@mysql-node src]# su - mysql
[mysql@mysql-node ~]$ vim /data/mysql/conf/my.cnf
[mysqld]
小文字のテーブル名 = 1
ユーザー = mysql
サーバーID = 1
ポート = 3306
 
デフォルトのタイムゾーン = '+08:00'
強制GTID一貫性 = オン
gtid_mode = オン
binlog_checksum = なし
デフォルト認証プラグイン = mysql_native_password
データディレクトリ = /data/mysql/data
pid ファイル = /data/mysql/tmp/mysqld.pid
ソケット = /data/mysql/tmp/mysqld.sock
tmpdir = /data/mysql/tmp/
名前解決をスキップ = ON
オープンファイル制限 = 65535
テーブルオープンキャッシュ = 2000
 
####################innodb############################
innodb_data_home_dir = /data/mysql/data
innodb_data_file_path = ibdata1:512M;ibdata2:512M:自動拡張
innodb_buffer_pool_size = 12000M
innodb_flush_log_at_trx_commit = 1
innodb_io_capacity = 600
innodb_lock_wait_timeout = 120
innodb_log_buffer_size = 8M
innodb_log_file_size = 200M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 85
innodb_read_io_threads = 8
innodb_write_io_threads = 8
innodb_thread_concurrency = 32
innodb_file_per_table
innodb_rollback_on_timeout
 
innodb_undo_directory = /data/mysql/data
innodb_log_group_home_dir = /data/mysql/data
 
####################セッション############################
結合バッファサイズ = 8M
キーバッファサイズ = 256M
バルク挿入バッファサイズ = 8M
最大ヒープテーブルサイズ = 96M
tmp_table_size = 96M
読み取りバッファサイズ = 8M
ソートバッファサイズ = 2M
最大許容パケット = 64M
読み取りバッファサイズ = 32M
 
##############ログセット##################
ログエラー = /data/mysql/log/mysqld.err
ログ bin = /data/mysql/binlog/binlog
log_bin_index = /data/mysql/binlog/binlog.index
最大バイナリログサイズ = 500M
slow_query_log_file = /data/mysql/log/slow.log
遅いクエリログ = 1
長いクエリ時間 = 10
log_queries_not_using_indexes = オン
ログスロットルクエリがインデックスを使用していない = 10
log_slow_admin_statements = オン
log_output = ファイル、テーブル
マスター情報ファイル = /data/mysql/binlog/master.info

6. 初期化 (ちょっと待ってください。/data/mysql/log/mysqld.err で初期化プロセスをチェックして、エラー情報があるかどうかを確認できます)

[mysql@mysql-node ~]$ mysqld --defaults-file=/data/mysql/conf/my.cnf --initialize-insecure --user=mysql 

7. mysqldを起動する

[mysql@mysql-node ~]$ mysqld_safe --defaults-file=/data/mysql/conf/my.cnf & 
[mysql@mysql-node ~]$ lsof -i:3306
コマンド PID ユーザー FD タイプ デバイス サイズ/オフ ノード名
mysqld 24743 mysql 23u IPv6 23132988 0t0 TCP *:mysql (LISTEN)

8. mysqlにログインしてパスワードをリセットする

初めて sock ファイルを使用してローカルで mysql にログインする場合は、パスワードは必要ありません [mysql@mysql-node ~]# mysql -S /data/mysql/tmp/mysqld.sock
.............
mysql> ALTER USER 'root'@'localhost' が '123456' によって識別されます。
クエリは正常、影響を受けた行は 0 行 (0.07 秒)
 
mysql> 権限をフラッシュします。
クエリは正常、影響を受けた行は 0 行 (0.03 秒)
 
mysql> mysql.user からホスト、ユーザー、認証文字列を選択します。
+-----------+------------------+------------------------------------------------------------------------------------+
| ホスト | ユーザー | 認証文字列 |
+-----------+------------------+------------------------------------------------------------------------------------+
| localhost | mysql.infoschema | $A$005$これは無効な SALT とパスワードの組み合わせであり、決して使用してはいけません |
| localhost | mysql.session | $A$005$これは無効なソルトとパスワードの組み合わせであり、決して使用してはいけません |
| localhost | mysql.sys | $A$005$これは無効な SALT とパスワードの組み合わせであり、決して使用してはいけません |
| ローカルホスト | ルート | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-----------+------------------+------------------------------------------------------------------------------------+
セット内の 4 行 (0.00 秒)

終了。パスワードをリセットすると、sock ファイルを使用してパスワードなしでログインできなくなります。

[root@mysql-node ~]# mysql -S /data/mysql/tmp/mysqld.sock
エラー 1045 (28000): ユーザー 'root'@'localhost' のアクセスが拒否されました (パスワード使用: NO)
 
[root@mysql-node ~]# mysql -p123456
mysql: [警告] コマンドライン インターフェイスでパスワードを使用すると安全でない可能性があります。
エラー 2002 (HY000): ソケット '/tmp/mysql.sock' 経由でローカル MySQL サーバーに接続できません (2)

ソックファイルへのソフトリンクを作成する

[root@mysql-node ~]# ln -s /data/mysql/tmp/mysqld.sock /tmp/mysql.sock

ログイン

[root@mysql-node ~]# mysql -p123456
または [root@mysql-node ~]# mysql -uroot -S /data/mysql/tmp/mysqld.sock -p123456
.............
mysql> バージョンを選択します();
+-----------+
| バージョン() |
+-----------+
| 8.0.12 |
+-----------+
セット内の 1 行 (0.00 秒)
 
#ユーザー権限を付与します。権限を付与する前にユーザーを作成する必要があります。
(ユーザーを作成するときは、@ を含めてアドレスを指定する必要があります。許可権限の付与先アドレスは、この @ の後に指定したアドレスです。そうしないと、許可権限の付与でエラーが報告されます。)
mysql> 'kevin'@'%' を作成し、'123456' で識別します。
クエリは正常、影響を受けた行は 0 行 (0.11 秒)
 
mysql> grant オプションを使用して、*.* のすべての権限を 'kevin'@'%' に付与します。 
クエリは正常、影響を受けた行は 0 行 (0.21 秒)
 
mysql> mysql.user からホスト、ユーザー、認証文字列を選択します。
+-----------+------------------+------------------------------------------------------------------------------------+
| ホスト | ユーザー | 認証文字列 |
+-----------+------------------+------------------------------------------------------------------------------------+
| % | ケビン | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| localhost | mysql.infoschema | $A$005$これは無効な SALT とパスワードの組み合わせであり、決して使用してはいけません |
| localhost | mysql.session | $A$005$これは無効なソルトとパスワードの組み合わせであり、決して使用してはいけません |
| localhost | mysql.sys | $A$005$これは無効な SALT とパスワードの組み合わせであり、決して使用してはいけません |
| ローカルホスト | ルート | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-----------+------------------+------------------------------------------------------------------------------------+
セット内の行数は 5 です (0.00 秒)
 
mysql> mysql.user を更新し、host='172.16.60.%' を設定し、user="kevin" とします。
クエリは正常、1 行が影響を受けました (0.16 秒)
一致した行: 1 変更された行: 1 警告: 0
 
mysql> 権限をフラッシュします。
クエリは正常、影響を受けた行は 0 行 (0.05 秒)
 
mysql> mysql.user からホスト、ユーザー、認証文字列を選択します。
+-------------+-----------------+------------------------------------------------------------------------------------+
| ホスト | ユーザー | 認証文字列 |
+-------------+-----------------+------------------------------------------------------------------------------------+
| 172.16.60.% | ケビン | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| localhost | mysql.infoschema | $A$005$これは無効な SALT とパスワードの組み合わせであり、決して使用してはいけません |
| localhost | mysql.session | $A$005$これは無効なソルトとパスワードの組み合わせであり、決して使用してはいけません |
| localhost | mysql.sys | $A$005$これは無効な SALT とパスワードの組み合わせであり、決して使用してはいけません |
| ローカルホスト | ルート | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-------------+-----------------+------------------------------------------------------------------------------------+
セット内の行数は 5 です (0.00 秒)
 
mysql> '123456' で識別される 'bobo'@'172.16.60.%' のユーザーを作成します。   
クエリは正常、影響を受けた行は 0 行 (0.09 秒)
 
mysql> *.* のすべての権限を 'bobo'@'172.16.60.%' に付与します。   
クエリは正常、影響を受けた行は 0 行 (0.17 秒)
 
mysql> 権限をフラッシュします。
クエリは正常、影響を受けた行は 0 行 (0.04 秒)
 
mysql> mysql.user からホスト、ユーザー、認証文字列を選択します。
+-------------+-----------------+------------------------------------------------------------------------------------+
| ホスト | ユーザー | 認証文字列 |
+-------------+-----------------+------------------------------------------------------------------------------------+
| 172.16.60.% | ボボ | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| 172.16.60.% | ケビン | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| localhost | mysql.infoschema | $A$005$これは無効な SALT とパスワードの組み合わせであり、決して使用してはいけません |
| localhost | mysql.session | $A$005$これは無効なソルトとパスワードの組み合わせであり、決して使用してはいけません |
| localhost | mysql.sys | $A$005$これは無効な SALT とパスワードの組み合わせであり、決して使用してはいけません |
| ローカルホスト | ルート | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-------------+-----------------+------------------------------------------------------------------------------------+
セット内の 6 行 (0.00 秒)
 
mysql> kevin@'172.16.60.%' の権限を表示します。
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| [email protected].% への助成金 |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT OPTION を使用して、SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、RELOAD、SHUTDOWN、PROCESS、FILE、REFERENCES、INDEX、ALTER、SHOW DATABASES、SUPER、CREATE TEMPORARY TABLES、LOCK TABLES、EXECUTE、REPLICATION SLAVE、REPLICATION CLIENT、CREATE VIEW、SHOW VIEW、CREATE ROUTINE、ALTER ROUTINE、CREATE USER、EVENT、TRIGGER、CREATE TABLESPACE、CREATE ROLE、DROP ROLE ON *.* を `kevin`@`172.16.60.%` に付与します |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
セット内の 1 行 (0.00 秒)

MySQL 単一マシンのマルチインスタンスのインストールと構成

上記のバイナリ デプロイメントから、ポート 3306 の MySQL インスタンスが起動されていることがわかります。次に、さらに 2 つのインスタンス (3307 と 3308) を起動する必要があります。操作は次のとおりです。

インスタンスデータディレクトリを作成する

[root@mysql-node ~]# mkdir -p /data/mysql3307/{data,log,binlog,conf,tmp}   
[root@mysql-node ~]# mkdir -p /data/mysql3308/{data,log,binlog,conf,tmp}   
[root@mysql-node ~]# chown -R mysql.mysql /data/mysql3307
[root@mysql-node ~]# chown -R mysql.mysql /data/mysql3308

MySQLの設定

[root@mysql-node ~]# cp -r /data/mysql/conf/my.cnf /data/mysql3307/conf/
[root@mysql-node ~]# cp -r /data/mysql/conf/my.cnf /data/mysql3308/conf/
[root@mysql-node ~]# sed -i 's#/data/mysql/#/data/mysql3307/#g' /data/mysql3307/conf/my.cnf
[root@mysql-node ~]# sed -i 's#/data/mysql/#/data/mysql3308/#g' /data/mysql3308/conf/my.cnf
[root@mysql-node ~]# sed -i 's/3306/3307/g' /data/mysql3307/conf/my.cnf
[root@mysql-node ~]# sed -i 's/3306/3308/g' /data/mysql3308/conf/my.cnf 
[root@mysql-node ~]# chown -R mysql.mysql /data/mysql*

2つのインスタンスを初期化する

[root@mysql-node ~]# mysqld --defaults-file=/data/mysql3307/conf/my.cnf --initialize-insecure --user=mysql 
[root@mysql-node ~]# mysqld --defaults-file=/data/mysql3308/conf/my.cnf --initialize-insecure --user=mysql

次にmysqldを起動します

[root@mysql-node ~]# mysqld_safe --defaults-file=/data/mysql3307/conf/my.cnf &
[root@mysql-node ~]# mysqld_safe --defaults-file=/data/mysql3308/conf/my.cnf &

起動が成功したかどうかを確認する

[root@mysql-node ~]# ps -ef|grep mysql
mysql 23996 1 0 14:37 ? 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/conf/my.cnf
mysql 24743 23996 0 14:38 ? 00:00:17 /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/conf/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --log-error=/data/mysql/log/mysqld.err --open-files-limit=65535 --pid-file=/data/mysql/tmp/mysqld.pid --socket=/data/mysql/tmp/mysqld.sock --port=3306
ルート 30473 23727 0 15:33 pts/0 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql3307/conf/my.cnf
mysql 31191 30473 17 15:33 pts/0 00:00:02 /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql3307/conf/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql3307/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql3307/log/mysqld.err --open-files-limit=65535 --pid-file=/data/mysql3307/tmp/mysqld.pid --socket=/data/mysql3307/tmp/mysqld.sock --port=3307
ルート 31254 23727 0 15:33 pts/0 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql3308/conf/my.cnf
mysql 31977 31254 39 15:33 pts/0 00:00:02 /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql3308/conf/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql3308/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql3308/log/mysqld.err --open-files-limit=65535 --pid-file=/data/mysql3308/tmp/mysqld.pid --socket=/data/mysql3308/tmp/mysqld.sock --port=3308
ルート 32044 23727 0 15:34 pts/0 00:00:00 grep --color=auto mysql
 
[root@mysql-node ~]# lsof -i:3307
コマンド PID ユーザー FD タイプ デバイス サイズ/オフ ノード名
mysqld 31191 mysql 22u IPv6 23144844 0t0 TCP *:opsession-prxy (LISTEN)
[root@mysql-node ~]# lsof -i:3308
コマンド PID ユーザー FD タイプ デバイス サイズ/オフ ノード名
mysqld 31977 mysql 22u IPv6 23145727 0t0 TCP *:tns-server (LISTEN)
[root@mysql-node ~]# lsof -i:3306
コマンド PID ユーザー FD タイプ デバイス サイズ/オフ ノード名
mysqld 24743 mysql 23u IPv6 23132988 0t0 TCP *:mysql (LISTEN)

3307ポートインスタンスにログインし、パスワードを設定します

[root@mysql-node ~]# mysql -S /data/mysql3307/tmp/mysqld.sock
............
mysql> ALTER USER 'root'@'localhost' が '123456' によって識別されます。
クエリは正常、影響を受けた行は 0 行 (0.11 秒)
 
mysql> 権限をフラッシュします。
クエリは正常、影響を受けた行は 0 行 (0.11 秒)

ログアウトして、新しいパスワードでログインしてください

[root@mysql-node ~]# mysql -uroot -S /data/mysql3307/tmp/mysqld.sock -p123456  
.............
マイSQL>

同様に、3308ポートインスタンスにログインしてパスワードを設定します。

[root@mysql-node ~]# mysql -S /data/mysql3308/tmp/mysqld.sock
...........
mysql> ALTER USER 'root'@'localhost' が '123456' によって識別されます。
クエリは正常、影響を受けた行は 0 行 (0.13 秒)
 
mysql> 権限をフラッシュします。
クエリは正常、影響を受けた行は 0 行 (0.03 秒)

ログアウトして、新しいパスワードでログインしてください

[root@mysql-node ~]# mysql -uroot -S /data/mysql3308/tmp/mysqld.sock -p123456
.................
マイSQL>

3 つのポート インスタンス 3306、3307、および 3308 の起動コマンドは次のとおりです。

mysqld_safe --defaults-file=/data/mysql/conf/my.cnf &
mysqld_safe --defaults-file=/data/mysql3307/conf/my.cnf &
mysqld_safe --defaults-file=/data/mysql3308/conf/my.cnf &

ログインコマンドは次のとおりです。

mysql -uroot -S /data/mysql/tmp/mysqld.sock -p123456
mysql -uroot -S /data/mysql3307/tmp/mysqld.sock -p123456
mysql -uroot -S /data/mysql3308/tmp/mysqld.sock -p123456

ただし、繰り返しインストールの問題を解決するために、マルチインスタンスのインストール方法はスクリプトに特別に編集されています。必要な読者は、この公式アカウントのバックグラウンドでMySQL8に直接返信して、マルチインスタンスのインストールスクリプトを入手できます。

MySQL 8.0 の使用時に遭遇するいくつかの落とし穴

1) MySQL 8.0 では、ユーザーの作成と認証が以前とは異なります。厳密に言えば、異なるとは言えませんが、より厳格になったとしか言えません。MySQL 8.0 では、認証を行う前に、ユーザーを作成し (ユーザー作成時に @ を使用してアドレスを指定すると、この @! の後に指定したアドレスが認可の付与先アドレスになります。そうしないと、認可の付与でエラーが報告されます!)、パスワードを設定する必要があります。

mysql> 'kevin'@'%' を作成し、'123456' で識別します。
クエリは正常、影響を受けた行は 0 行 (0.04 秒)
 
mysql> grant オプションを使用して、*.* のすべての権限を 'kevin'@'%' に付与します。  
クエリは正常、影響を受けた行は 0 行 (0.04 秒)
 
mysql> '123456' で識別されるユーザー 'bobo'@'%' を作成します。  
クエリは正常、影響を受けた行は 0 行 (0.06 秒)
 
mysql> grant オプションを使用して、*.* のすべての権限を 'bobo'@'%' に付与します。
クエリは正常、影響を受けた行は 0 行 (0.03 秒)
 
mysql> 権限をフラッシュします。
クエリは正常、影響を受けた行は 0 行 (0.04 秒)
 
mysql> mysql.user からホスト、ユーザー、認証文字列を選択します。
+-----------+------------------+------------------------------------------------------------------------------------+
| ホスト | ユーザー | 認証文字列 |
+-----------+------------------+------------------------------------------------------------------------------------+
| % | ボボ | $A$005$1VY")q?G6<^X@-6LsXrPt5C0TwlTuvHbaOa3sYF0DKViIGoRPuCF8AzwiFcim1 |
| % | ケビン | $A$005$hy`U}ZB#R::rA8W0y2rmwgySqzv0rmR1eTeNDSaXfQPWIsrh7ytbVdi85 |
| localhost | mysql.infoschema | $A$005$これは無効な SALT とパスワードの組み合わせであり、決して使用してはいけません |
| localhost | mysql.session | $A$005$これは無効なソルトとパスワードの組み合わせであり、決して使用してはいけません |
| localhost | mysql.sys | $A$005$これは無効な SALT とパスワードの組み合わせであり、決して使用してはいけません |
| ローカルホスト | ルート | $A$005$/VO_y^7,]6;2qxggBLmJzhA0Qylu5/AHuRScZ/ykKedgZKh/6krOIzPs2 |
+-----------+------------------+------------------------------------------------------------------------------------+

MySQL 5.7 以前のバージョンの直接認証方式を引き続き使用すると、次のエラーが発生します。

mysql> '123456' で識別される 'shibo'@'%' に *.* のすべての権限を付与します。
エラー 1064 (42000): SQL 構文にエラーがあります。1 行目の 'identified by '123456'' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

2) デフォルトでは、Mysql8.0 はリモート ログインに root アカウントを使用できません。root アカウントはローカルにのみログインできます。

mysql> mysql.user からホスト、ユーザー、認証文字列を選択します。
+-----------+------------------+------------------------------------------------------------------------------------+
| ホスト | ユーザー | 認証文字列 |
+-----------+------------------+------------------------------------------------------------------------------------+
| % | ボボ | $A$005$1VY")q?G6<^X@-6LsXrPt5C0TwlTuvHbaOa3sYF0DKViIGoRPuCF8AzwiFcim1 |
| % | ケビン | $A$005$hy`U}ZB#R::rA8W0y2rmwgySqzv0rmR1eTeNDSaXfQPWIsrh7ytbVdi85 |
| localhost | mysql.infoschema | $A$005$これは無効な SALT とパスワードの組み合わせであり、決して使用してはいけません |
| localhost | mysql.session | $A$005$これは無効なソルトとパスワードの組み合わせであり、決して使用してはいけません |
| localhost | mysql.sys | $A$005$これは無効な SALT とパスワードの組み合わせであり、決して使用してはいけません |
| ローカルホスト | ルート | $A$005$/VO_y^7,]6;2qxggBLmJzhA0Qylu5/AHuRScZ/ykKedgZKh/6krOIzPs2 |
+-----------+------------------+------------------------------------------------------------------------------------+
セット内の 6 行 (0.00 秒)

リモートでログインする場合は、root アカウントの権限を更新する必要があります。

mysql> mysql.user を更新し、host='%' を設定し、user="root" にします。
クエリは正常、1 行が影響を受けました (0.10 秒)
一致した行: 1 変更された行: 1 警告: 0
 
mysql> 権限をフラッシュします。
クエリは正常、影響を受けた行は 0 行 (0.14 秒)
 
mysql> mysql.user からホスト、ユーザー、認証文字列を選択します。
+-----------+------------------+------------------------------------------------------------------------------------+
| ホスト | ユーザー | 認証文字列 |
+-----------+------------------+------------------------------------------------------------------------------------+
| % | ボボ | $A$005$1VY")q?G6<^X@-6LsXrPt5C0TwlTuvHbaOa3sYF0DKViIGoRPuCF8AzwiFcim1 |
| % | ケビン | $A$005$hy`U}ZB#R::rA8W0y2rmwgySqzv0rmR1eTeNDSaXfQPWIsrh7ytbVdi85 |
| % | ルート | $A$005$/VO_y^7,]6;2qxggBLmJzhA0Qylu5/AHuRScZ/ykKedgZKh/6krOIzPs2 |
| localhost | mysql.infoschema | $A$005$これは無効な SALT とパスワードの組み合わせであり、決して使用してはいけません |
| localhost | mysql.session | $A$005$これは無効なソルトとパスワードの組み合わせであり、決して使用してはいけません |
| localhost | mysql.sys | $A$005$これは無効な SALT とパスワードの組み合わせであり、決して使用してはいけません |
+-----------+------------------+------------------------------------------------------------------------------------+
セット内の 6 行 (0.00 秒)

この方法では、ルートアカウントを使用してmysql8.0データベースにリモートでログインできます。

ルート アカウントの権限を変更し、ルート アカウントがリモートでログインできるようにした後、Navicat を使用してリモートで mysql に接続すると、ポップアップ ウィンドウ エラーが表示されます。

ここに画像の説明を挿入

その理由は、MySQL 8 より前のバージョンでは暗号化ルールが mysql_native_password であり、MySQL 8 以降では暗号化ルールが caching_sha2_password であるためです。この問題を解決するには、次の 2 つの方法があります。

1. 1つは、Navicat ドライバーをアップグレードすることです。

2. 1 つは、mysql ユーザーのログイン パスワードの暗号化ルールを mysql_native_password に復元することです。ここでは、解決するために 2 番目の方法を選択します。

#暗号化ルールを変更するmysql> ALTER USER 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;    
クエリは正常、影響を受けた行は 0 行 (0.16 秒)
 
# ユーザーのパスワードを更新しますmysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
クエリは正常、影響を受けた行は 0 行 (0.08 秒)
 
#権限を更新mysql> FLUSH PRIVILEGES;
クエリは正常、影響を受けた行は 0 行 (0.03 秒)

これで問題は解決します。

1. sqlyog を使用してリンクすると、例外 2058 が発生します。このとき、mysql を変更する必要があります。コマンドラインから mysql にログインし (パスワードを変更する場合のログインと同じで、変更したパスワードを使用します)、次のコマンドを実行します: mysql > ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; ここで、password は変更したパスワードです。その後、SQLyog で再接続すると、接続が成功します。

2. エラー メッセージが「ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'」の場合、次のコマンドを使用します: mysql > ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
sqlyog がリンクされたときに 2058 例外が発生しました

デフォルトのエンコード方式を変更します。mysql8.0 のデフォルトのエンコード方式は utf8mb4 なので、使用時に変更する必要はありません。次のコマンドを使用して表示できます。

mysql > SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collat​​ion%';

utf8mb4 などの他のエンコード方式を変更する必要がある場合は、次の方法を使用できます。

MySQL 構成ファイル my.cnf を変更します。見つけたら、次の 3 つの部分に次の内容を追加してください。
[クライアント]
デフォルトの文字セット = utf8mb4
[mysql]
デフォルトの文字セット = utf8mb4
[mysqld]
文字セットクライアントハンドシェイク = FALSE
文字セットサーバー = utf8mb4
照合サーバー = utf8mb4_unicode_ci
init_connect = '名前をutf8mb4に設定'

次に、mysqld サービスを再起動します。

character_set_client (クライアント ソース データで使用される文字セット)
character_set_connection (接続レベルの文字セット)
character_set_database (現在選択されているデータベースのデフォルトの文字セット)
character_set_results (クエリ結果の文字セット)
character_set_server (内部操作のデフォルトの文字セット)

データベース接続パラメータ:

characterEncoding=utf8 は自動的に utf8mb4 として認識されます。このパラメータを省略して自動検出することもできます。
また、autoReconnect=true は必須です。

6) いくつかのパラメータ設定クエリコマンド

#MySQL での最大接続数を照会します。mysql> show global variables like 'max_conn%';
mysql> SELECT @@MAX_CONNECTIONS AS '最大接続数';
 
# 最大接続数を表示します。mysql> show global status like 'Max_used_connections';
 
# スロークエリログが有効になっているかどうか、およびログの場所を確認します。mysql> show variables like 'slow_query%';
 
# 遅いクエリのタイムアウト記録を表示します。logmysql> show variables like 'long_query_time';
 
# 作成され現在接続されているリンクの数を表示します。mysql> show status like 'Threads%';
 
# 現在のデータベース接続を表示します。mysql> show processlist;

# データベース構成を表示mysql> show variables like '%quer%'; 

参考リンク:

出典: https://www.cnblogs.com/kevingrace/p/10482469.html

CentOS での MySQL 8.0 のインストールとデプロイメント: https://mp.weixin.qq.com/s/OQaL0T-jT2xfsJBulau7sQ

https://blog.csdn.net/vv19910825/article/details/82979563

CentOS8 で MySQL 8.0 をインストールしてデプロイする方法についての記事はこれで終わりです。MySQL のインストールとデプロイに関するより詳しい内容については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL 高可用性クラスタの展開とフェイルオーバーの実装
  • Docker に MySQL をデプロイする例
  • Docker は 2003 年の問題を解決するために MySQL リモート接続を導入しました
  • MySQL8 ベースの docker-compose デプロイメント プロジェクトの実装
  • mysql-canal-rabbitmq のインストールと展開の非常に詳細なチュートリアル
  • MySQL MHA の高可用性構成とフェイルオーバーの詳細な導入手順
  • MySQL で MHA アーキテクチャのデプロイメントを構築する手順
  • MySQL Routerのインストールと展開

<<:  Vueプロジェクトでコンポーネントをカプセル化する簡単な手順

>>:  Nginx+SpringBoot による負荷分散の実装例

推薦する

MySQL の主キーがクエリを高速化するために数値を使用するか UUID を使用するかについての簡単な分析

実際の開発では、MySQL の主キーは重複できず、主キーが自動的にインクリメントされることがあります...

Angularの親子コンポーネント通信の詳細な説明

目次概要1. 入力および出力プロパティの概要2. 入力属性3. プロパティバインディングは親コンポー...

Vueのイベント処理とイベント修飾子の詳細な説明

<div id="ルート"> <h2>頑張れ、{{na...

DockerにRedisをインストールし、設定ファイルとして起動する詳細な説明

更新: 最近、サーバーがマイニング ウイルスによってハッキングされたことが判明しました。これは、おそ...

Docker Docker の保存場所を変更する コンテナイメージのサイズ制限を変更する操作

これは新しいバージョンではもう不可能なようで、推奨されません。そうでない場合は、ソフト リンクを直接...

MySQLはフィールドからカンマ区切りの値を取り出して新しいフィールドを形成します

1例: 図1のフィールドを図2に分割するには アカウントIDを選択、 サブストリングインデックス(サ...

Tomcat の構成と最適化ソリューションの詳細な説明

サービス.xml Server.xml 構成ファイルは、コンテナー全体を構成するために使用されます。...

count(1)、count(*)、count(列名)の実行の違いの詳細な説明

実施効果: 1. count(1) と count(*)テーブル内のデータ量が多い場合、テーブルを分...

Vue が学ぶべき知識ポイント: forEach() の使用

序文フロントエンド開発では、目的のコンテンツを取得するためにループをトラバースする必要がある状況に頻...

$remote_addr に基づく nginx フロントエンド配布方法の詳細な説明

要件は次のとおりです。ドメイン名の下に複数のサーバーがあります。現在、特定の地域をテストしています。...

MySQL マルチインスタンス構成のアプリケーションシナリオ

目次MySQL 複数インスタンスマルチインスタンスの概要マルチインスタンスとは何ですか?複数のインス...

グリッドはページのレイアウトプランです

<br /> 英語原文: http://desktoppub.about.com/od/...

ウェブページの読み込み速度を上げる簡単なヒント

Web ページの読み込み速度は、Web サイトの品質を評価するための重要な指標です。その理由は、ほと...

MySQL でスロークエリログ機能を有効にする方法

MySQL スロー クエリ ログは、問題のあるクエリを追跡するのに非常に役立ちます。現在のプログラム...

Mysql インデックスと Redis ジャンプテーブルについての簡単な説明

まとめインタビュー中、MySQL インデックスの問題について議論しているときに、B+ ツリー、B ツ...