Linux に MySQL 8.0.x をインストールするための完全な手順

Linux に MySQL 8.0.x をインストールするための完全な手順

マイグレーション

MySQL 入門

MySQL はもともとオープンソースのリレーショナル データベース管理システムでした。その最初の開発者はスウェーデンの会社 MySQL AB でしたが、2008 年に Sun Microsystems に買収されました。 2009 年に Oracle が Sun Microsystems を買収し、MySQL は Oracle 製品になりました。

これまで、MySQL は、高性能、低コスト、優れた信頼性により最も人気のあるオープンソース データベースとなり、インターネット上の中小規模の Web サイトで広く使用されています。 MySQL は成熟を続けており、Wikipedia、Google、Facebook などのより大規模な Web サイトやアプリケーションで徐々に使用されるようになっています。非常に人気のあるオープンソース ソフトウェア スタック LAMP の「M」は MySQL を指します。

しかし、Oracle に買収された後、Oracle は MySQL の商用バージョンの価格を大幅に引き上げ、別のフリーソフトウェア プロジェクトである OpenSolaris の開発をサポートしなくなりました。その結果、フリーソフトウェア コミュニティは、Oracle が MySQL Community Edition (MySQL の唯一の無料バージョン) のサポートを継続するかどうかについて懸念を抱いていました。MySQL の創設者 Michael Widenius は、MySQL をベースにしたブランチ プロジェクト MariaDB を設立しました。もともと MySQL を使用していた一部のオープンソース ソフトウェアは、徐々に MariaDB や他のデータベースに移行しています。例えば、Wikipediaは2013年にMySQLからMariaDBデータベースに移行することを公式に発表しました[6]。

リレーショナルデータベース

リレーショナルデータベース(英: Relational database)は、リレーショナルモデルに基づいて作成されたデータベースであり、集合代数などの数学的な概念と手法を使用してデータベース内のデータを処理し、現実世界のさまざまなエンティティとエンティティ間のさまざまな接続は、リレーショナル モデルによって表現されます。リレーショナル モデルは、1970 年にエドガー コッドによってコッドの 12 の法則とともに初めて提案されました。現在このモデルには批判もありますが、依然としてデータ保存の従来の標準となっています。標準データ クエリ言語 SQL は、リレーショナル データベースに基づく言語です。この言語は、リレーショナル データベース内のデータの取得と操作を実行します。

リレーショナル モデルは、リレーショナル データ構造、リレーショナル操作セット、リレーショナル整合性制約の 3 つの部分で構成されます。

MySQL の機能

MySQL は、次の機能を備えた広く使用されているデータベースです。

  • C および C++ で記述され、ソースコードの移植性を保証するために複数のコンパイラでテストされています。
  • AIX、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、OpenBSD、OS/2 をサポート
  • Wrap、Solaris、Windows およびその他のオペレーティング システム。
  • 複数のプログラミング言語用の API が提供されています。プログラミング言語には、C、C++、Python、Java、Perl、PHP、Eiffel、Ruby、Tcl などがあります。
  • CPUリソースを最大限に活用するためにマルチスレッドをサポート
  • クエリ速度を効果的に向上させる最適化されたSQLクエリアルゴリズム
  • クライアント サーバー ネットワーク環境でスタンドアロン アプリケーションとして、またはライブラリとして使用できます。
  • 他のソフトウェアに組み込んで多言語サポートを提供するため、中国語GB 2312、BIG5、日本語Shift_JISなどの一般的なエンコードをデータテーブル名やデータ列名として使用できます。
  • TCP/IP、ODBC、JDBCなどの複数のデータベース接続方法を提供します
  • データベース操作を管理、検査、最適化するための管理ツールを提供します
  • 数千万件のレコードを含む大規模なデータベースを処理できる

MySQL アプリケーション

Oracle、DB2、SQL Server などの大規模データベースと比較すると、MySQL には規模が小さい、機能が限られている (MySQL Cluster の機能と効率は比較的劣る) などの独自の欠点がありますが、これによって人気がまったく低下することはありません。一般の個人ユーザーや中小企業にとって、MySQL が提供する機能は十分すぎるほどであり、また、MySQL はオープンソースソフトウェアであるため、総所有コストを大幅に削減できます。 現在、インターネット上で人気の Web サイト アーキテクチャは LAMP (Linux+Apache+MySQL+PHP) です。これは、オペレーティング システムとして Linux、Web サーバーとして Apache、データベースとして MySQL、サーバー側スクリプト インタープリターとして PHP を使用します。 Linux + Apache + MySQL + PHP はすべて無料またはオープンソース ソフトウェア (FLOSS) なので、LAMP を使用すると、費用をかけずに安定した無料の Web サイト システムを構築できます。

MySLQ ストレージ エンジン

  • MySQL ストレージ エンジンの紹介

プラグイン ストレージ エンジンは、MySQL データベースの最も重要な機能の 1 つです。ユーザーは、アプリケーションのニーズに応じて、データベースの保存方法やインデックス作成方法、トランザクションを使用するかどうかなどを選択できます。 mySQL は、さまざまな分野のデータベース アプリケーションのニーズを満たすために、デフォルトで複数のストレージ エンジンをサポートしています。ユーザーは、さまざまなストレージ エンジンを選択して、柔軟なストレージを提供することで、アプリケーションの効率を向上させることができます。ユーザー設定をカスタマイズし、ニーズに応じて独自のストレージ エンジンを使用することで、最大限のカスタマイズ性を実現できます。

MySQL でよく使用されるストレージ エンジンは、MyISAM、InnoDB、MEMORY、および MERGE です。InnoDB はトランザクション セーフ テーブルを提供しますが、他のストレージ エンジンはトランザクション セーフではないテーブルです。

MyISAM は MySQL のデフォルトのストレージ エンジンです。 MyISAM はトランザクションや外部キーをサポートしていませんが、アクセス速度が速く、トランザクションの整合性を必要としません。

InnoDB ストレージ エンジンは、コミット、ロールバック、クラッシュ回復機能によりトランザクションの安全性を提供します。ただし、MyISAM ストレージ エンジンと比較すると、InnoDB は書き込み効率が低く、データとインデックスを保持するためにより多くのディスク領域を占有します。 MySQL でサポートされている唯一の外部キー ストレージ エンジンは InnoDB です。外部キーを作成する場合、添付テーブルには対応するインデックスが必要です。外部キーを作成すると、サブテーブルにも対応するインデックスが自動的に作成されます。

  • MySQL ストレージ エンジンの機能

主に、パフォーマンス、トランザクション、同時実行制御、参照整合性、キャッシュ、障害回復、バックアップと復元などに反映されます。

現在、最も普及しているストレージ エンジンは MyISAM と InnoDB であり、ほとんどの Web アプリケーションでは MyISAM が第一の選択肢となっています。 MyISAM と InnoDB の主な違いは、パフォーマンスとトランザクション制御です。

MyISAM は、初期の ISAM (Indexed Sequential Access Method) の拡張実装です。ISAM は、読み取り頻度が書き込み頻度よりはるかに多い状況に対応するように設計されています。そのため、ISAM およびそれ以降の MyISAM ではトランザクションのサポートは考慮されておらず、トランザクション レコードは必要ありません。ISAM のクエリ効率は非常に優れており、メモリをほとんど消費しません。

MyISAM は ISAM の利点を継承し、時代の変化に対応するための多数の実用的な新機能と関連ツールを提供します。たとえば、同時実行制御を考慮してテーブル レベルのロックが提供されます。

また、MyISAM はテーブルごとに独立したストレージ ファイル (MYD データ ファイルと MYI インデックス ファイル) を使用するため、バックアップとリカバリが非常に便利 (コピーして上書きするだけ) であり、オンライン リカバリもサポートされています。

したがって、アプリケーションがトランザクションを必要とせず、外部キーをサポートせず、基本的な CRUD (作成、削除、変更、クエリ) 操作のみを処理する場合は、MyISAM が最適な選択肢となります。

Linux (CentOS7.5_x86_64) に mysql8.0 をインストールする

# mysqlをダウンロード 

$ wget http://mirrors.163.com/mysql/Downloads/MySQL-8.0/mysql-8.0.13-el7-x86_64.tar.gz

# 解凍 $ mysql tar -zxvf mysql-8.0.4-rc-linux-glibc2.12-x86_64.tar.gz -C /usr/local

# フォルダ名を変更する $ mv mysql-8.0.4-rc-linux-glibc2.12-x86_64/mysql

デフォルトの設定ファイル $ vim/etc/my.cnf を追加します。

[クライアント]
ポート=3306
ソケット=/tmp/mysql.sock

[mysqld]
ポート=3306
ユーザー=mysql
ソケット=/tmp/mysql.sock
ベースディレクトリ=/usr/local/mysql
データディレクトリ=/usr/local/mysql/data


# mysqlグループを作成 $ groupadd mysql

# mysqlユーザーを作成 $ useradd -g mysql mysql

# mysqlデータディレクトリを作成 $ mkdir $MYSQL_HOME/data

# mysqlを初期化する 
$ /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/


# 初期化エラー bin/mysqld: 共有ライブラリのロード中にエラーが発生しました: libaio.so.1: 共有オブジェクトファイルを開けません: そのようなファイルまたはディレクトリはありません

# 解決策: yum install -y libaio

# 初期化エラー 2018-07-08T02:53:24.542370Z 0 [System] [MY-010116] /usr/local/mysql/bin/mysqld (mysqld 8.0.4-rc) がプロセス 17745 として起動しています...
mysqld: ファイル '/tmp/mysql/data/ibd35qXQ' を作成/書き込みできません (エラーコード: 13 - アクセス権が拒否されました)
2018-07-08T02:53:24.554816Z 1 [エラー] [MY-011066] InnoDB: 一時ファイルを作成できません。エラー番号: 13
2018-07-08T02:53:24.554856Z 1 [エラー] [MY-011066] InnoDB: InnoDB データベースの作成がエラー「一般エラー」により中止されました。再起動する前に、ibdata1 ファイルを削除する必要がある場合があります。
2018-07-08T02:53:24.555000Z 0 [エラー] [MY-010020] データ辞書の初期化に失敗しました。
2018-07-08T02:53:24.555033Z 0 [エラー] [MY-010119] 中止しています
2018-07-08T02:53:24.555919Z 0 [システム] [MY-010910] /usr/local/mysql/bin/mysqld: シャットダウンが完了しました。

# 解決策: /tmp/mysql のディレクトリ権限を変更します $ chown -R mysql:mysql /tmp/mysql


# 初期化成功 > 異常がなければ、ログは以下のようになります。MySQLがデフォルトでrootアカウントとパスワードを生成することがわかります: root@localhost:/TI(mjVAs1Ta

[root@localhost mysql]# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
2019-01-29T10:19:34.023997Z 0 [システム] [MY-013169] [サーバー] /usr/local/mysql/bin/mysqld (mysqld 8.0.13) プロセス 4240 としてサーバーの初期化が進行中です
2019-01-29T10:19:39.764895Z 5 [注記] [MY-010454] [サーバー] root@localhost の一時パスワードが生成されました: /TI(mjVAs1Ta
2019-01-29T10:19:43.041419Z 0 [システム] [MY-013170] [サーバー] /usr/local/mysql/bin/mysqld (mysqld 8.0.13) サーバーの初期化が完了しました

# mysql 起動ファイルをシステム初期化ディレクトリにコピーします $ cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld


# mysqlサーバーを起動します $ service mysqld start

基本的なMySQL操作

# mysqlクライアントを使用してmysqlに接続する
$ /usr/local/mysql/bin/mysql -u ルート -p パスワード

mysql のデフォルトの初期化パスワードを変更します> alter user 'root'@'localhost' identified by 'root';

# ユーザーを作成する CREATE USER 'ユーザー名'@'ホスト名' INDENTIFIED BY 'ユーザーパスワード'
> 'jack' によって識別されるユーザー 'jack'@'localhost' を作成します。

# 権限を付与する 'ユーザー名'@'ログイン ホスト' に database.table に対する権限を付与します ['ユーザー パスワード' で識別されます];
> *.* 上のレプリケーションスレーブを 'jack'@'localhost' に付与します。

# 更新 # $ 権限をフラッシュします。 

# リモート接続できるように root ユーザーを変更します> update mysql.user set host='%' where user='root';

# mysql で使用されるユーザーを表示します> select user,host from mysql.user;

# docker mysql apt-get update の最大接続数を変更する
apt-get で vim をインストール
vim /etc/mysql/mysql.conf.d/mysqld.cnf
最大接続数=1000

> mysql_native_password で識別されるユーザー 'root'@'%' を 'root' によって変更します。

MySQL クラスタ マスタースレーブ レプリケーション

インストール済みのMySQLサーバーを2つ準備する

# メインサービスを設定し、次の設定を追加します $ vim /etc/my.cnf

# ノードの一意の ID 値 server-id=1

# バイナリログを有効にする log-bin=mysql-bin

# 指定されたログ形式は mixed|row|statement です。Mixed が推奨されます。
binlog 形式 = 混合

# ステップ値の自動増加。通常、マスターMySQLサーバーがn台ある場合は、nを入力します(オプション構成)
自動増分_増分=2 

# 開始値。通常は、n 番目のマスター MySQL を入力します。これは最初のマスターMySQLです(オプション構成)
自動増分オフセット=1 

# mysqlライブラリを無視する(オプション設定)
binlog-ignore=mysql 

# information_schema ライブラリを無視する (オプション)
binlog-ignore=情報スキーマ 

# 同期するデータベース、デフォルトではすべてのデータベース(オプション構成)
複製するDB=db1


# スレーブノード構成 # ノードの一意の ID 値 server-id=2

# バイナリログを有効にする log-bin=mysql-bin

# ステップ値の自動増加。通常、マスターMySQLサーバーがn台ある場合は、nを入力します(オプション構成)
自動増分_増分=2

# 開始値。通常は、n 番目のマスター MySQL を入力します。これは最初のマスターMySQLです(オプション構成)
自動増分オフセット=2

# 同期するデータベース、デフォルトではすべてのデータベース(オプション構成)
複製するDB=db1


# マスターのステータス、特に現在のログと場所を確認します> show master status;
+------------------+----------+--------------+------------------+------------------+
| ファイル | 位置 | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+------------------+
| mysql-bin.000004 | 1608 | | | |
+------------------+----------+--------------+------------------+------------------+

# スレーブノードで次のコマンドを実行します。master_log_fileはshow master statusのfileの値に対応し、master_log_posはpositionの値に対応することに注意してください。>マスターを次のように変更します。
マスターホスト='192.168.79.15',
マスターユーザー='root'、
マスターパスワード='root'、
マスターログファイル='mysql-bin.000009',
マスターログ位置=0;

# スレーブステータスの開始(マスターの変更の監視を開始)
> スレーブを起動します。

# スレーブのステータスを確認する> show slave status\G

************************** 1. 行 ****************************
    Slave_IO_State: マスターがイベントを送信するのを待機中
     マスターホスト: 192.168.79.15
     マスターユーザー: ルート
     マスターポート: 3306
    接続再試行: 60
    マスターログファイル:mysql-bin.000009
   読み取りマスターログ位置: 863
    リレーログファイル: node-6-relay-bin.000002
    リレーログ位置: 500
  リレーマスターログファイル: mysql-bin.000009
    スレーブIO実行中: はい
   スレーブSQL実行中: はい
    レプリケート_Do_DB: 
   レプリケート_無視_DB: 
   テーブルの複製: 
  無視テーブルを複製: 
  Replicate_Wild_Do_Table: 
 Replicate_Wild_Ignore_Table: 
     最終エラー番号: 0
     最終エラー: 
     スキップカウンタ: 0
   実行マスターログポジション: 863
    リレーログスペース: 709
    Until_Condition: なし
    ログファイルまで: 
    ログ位置まで: 0
   マスターSSL許可: いいえ
   マスターSSLCAファイル: 
   マスターSSLCAパス: 
    マスターSSL証明書: 
   マスターSSL暗号: 
    マスターSSLキー: 
  マスターより遅れている秒数: 0
Master_SSL_Verify_Server_Cert: いいえ
    最終IOエラー番号: 0
    最後のIOエラー: 
    最終SQLエラー番号: 0
    最後のSQLエラー: 
 Replicate_Ignore_Server_Ids: 
    マスターサーバーID: 1
     マスター_UUID: 6291c709-23af-11e9-99fb-000c29071862
    マスター情報ファイル: mysql.slave_master_info
     SQL_遅延: 0
   SQL_残り遅延: NULL
  Slave_SQL_Running_State: スレーブはすべてのリレーログを読み取りました。さらに更新を待機しています。
   マスター再試行回数: 86400
     マスターバインド: 
  最終IOエラータイムスタンプ: 
  最終SQLエラータイムスタンプ: 
    マスターSSL証明書: 
   マスターSSLCrlパス: 
   取得済み_Gtid_Set: 
   実行されたGtidセット: 
    自動位置: 0
   Replicate_Rewrite_DB: 
     チャンネル名: 
   マスター TLS バージョン: 
  マスター公開キーパス: 
  マスター公開キーの取得: 0

# Slave_IO_Running: Yes と Slave_SQL_Running: Yes の両方が yes の場合、マスター スレーブ レプリケーションが正常であることを意味します。# スレーブ ステータスをリセットします。
$ スレーブをリセットします。

#スレーブ状態を一時停止します。
$ スレーブを停止します。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。

以下もご興味があるかもしれません:
  • Ubuntu 18.04 (Linux) に MySQL をインストールする方法
  • Linux での MySQL 8.0 インストール チュートリアル
  • Linux 上の MySQL 5.7.18 の無料インストール版に関する詳細なチュートリアル
  • Linux (Ubuntu) での MySQL 5.6.28 のインストールと設定のチュートリアル
  • Linux での MySQL 5.7.18 yum のアンインストールからインストールまでのプロセスの図
  • Oracle Linux 6.8 に MySQL 5.7.17 をインストールするための詳細なチュートリアル
  • YUM を使用して Linux (CentOS 7) に MySQL 5.7.18 をインストールする方法の詳細なチュートリアル
  • Ubuntu 18.04にMySQL 5.7をインストールする
  • Linux yum コマンドを使用して mysql8.0 をインストールする方法の詳細なチュートリアル
  • MySQL 8.0.15 のインストールと設定のグラフィックチュートリアルと Linux でのパスワード変更

<<:  elementui の el-popover スタイルの変更が有効にならない問題の解決策

>>:  Linuxで新しいユーザーを作成し、指定されたディレクトリへの権限を付与する

推薦する

CentOS 7 パスワードを忘れた場合の解決プロセス図

必要Windows システムでも Linux システムでも、さまざまな理由でパスワードを忘れてしまう...

Linux\Nginx 環境での仮想ドメイン名の設定とテスト検証

Nginx 仮想ドメイン名設定を使用すると、ドメイン名を購入せずに特定のドメイン名を介してローカル ...

mysql5.7.18 解凍バージョンで mysql サービスを起動します

mysql5.7.18の解凍版はmysqlサービスを起動します。具体的な内容は以下のとおりです。 1...

HTML のテキストエリアの改行問題の概要

最近、Textrea に転送したときに、データが本当に行ごとに保存できるかどうかという問題に遭遇しま...

Mac 環境での Nginx 構成とローカル静的リソースへのアクセスの実装

ローカル開発では、直接アクセスできない静的ファイル リソースのデバッグが必要になる場合があります。こ...

Linux 環境の Apache で https サービスを有効にする方法の詳細な説明

この記事では、Linux 環境の Apache で https サービスを有効にする方法について説明...

docker で php+nginx+swoole+mysql+redis 環境を構築する方法

オペレーティングシステム: Alibaba Cloud ESC インスタンス centos7.4ソフ...

Ubuntu環境でのSSHの詳細なインストールと使用

SSH は Secure Shell の略で、安全な伝送プロトコルです。Ubuntu クライアントは...

相同性とクロスドメイン、jsonp(関数カプセル化)、CORS原則の詳細な分析

目次同一起源ポリシーAjax リクエストの制限: Ajaxは自身のサーバーにのみリクエストを送信でき...

CSS でテキストシャドウと要素シャドウ効果を使用する

テキストシャドウの紹介CSSでは、 text-shadowプロパティを使用してテキストの影を設定しま...

Taobao の商品画像切り替え効果を実現する JavaScript

JavaScriptの服装アルバム切り替え効果(Taobao商品画像切り替えに似ています)、参考ま...

Docker5フル機能の港湾倉庫構築プロセス

Harbor は、Docker イメージを保存および配布するためのエンタープライズ レベルのレジスト...

Nginx+tomcat ロードバランシングクラスタの実装方法

実験環境は以下のとおりですここでは、4 台のサーバー (1 台の nginx、負荷用の 2 台の t...

MySQL ストアド プロシージャの in、out、inout パラメータの例と概要

ストアドプロシージャ1. ストアドプロシージャを作成し、グローバル変数を表示する mysql>...

MySQLのビューとインデックスの使い方と違いの詳細な説明

MySQL ビュー簡単に言えば、MySQL ビューは SELECT コマンドを定義するためのショート...