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で新しいユーザーを作成し、指定されたディレクトリへの権限を付与する

推薦する

Windows 7 の mysql6.x で中国語の文字化けが発生する問題に対する完璧な解決策

1. コマンドラインでMySQLサービスを停止します: net stop mysql stop my...

Vue の nextTick について話す

データが変更されても、DOM ビューはすぐには更新されません。変更直後にノードまたはその値を取得しよ...

WeChatアプレット開発で遭遇したことのない落とし穴のまとめ

目次getApp()ページエントリファイルの先頭に変数を定義しますwx.createSelector...

Ubuntu インストール cuda10.1 ドライバ実装手順

1. cuda10.1をダウンロードします。 NVIDIA 公式ウェブサイト リンク: https:...

Linux のよく使うコマンドの使い方を詳しく解説(第 2 回)———— テキストエディタのコマンド vi/vim

vi/vim の紹介どちらもマルチモード エディターです。違いは、vim が vi のアップグレー...

divとspanの違いと使い方

目次1. DIVとSPANの違いと特徴2. スパンタグの概要3. 拡大と改善4. 凡例の効果の実証例...

WebページでjQueryを参照する方法

CDN(コンテンツ配信ネットワーク)を通じて参照できます。 jQuery は Google と Mi...

Linux netstatコマンドの詳細な説明

目次Linux netstat コマンド1. TCP接続ステータスの詳細な説明2. コマンド形式3....

1つの記事でJSONPの原理と応用を理解する

目次JSONPとはJSONP 原則JSONP実装1. Ajaxでクロスドメインリクエストが行われると...

全画面ページのスクロール効果を実現するJavaScript

JavaScript DOM を読み終えた後、解釈型 JavaScript スクリプト言語に対する...

Linuxコマンドunzipの詳しい説明

目次1. 解凍コマンド1.1 構文1.2 オプション2. 例1. 解凍コマンドunzip コマンドは...

Centos8 システムの VMware インストール チュートリアル図 (中国語グラフィカル モード)

目次1. ソフトウェアとシステムイメージ2. 仮想マシンを作成する3. CentOS8をインストール...

ライフゲームの JavaScript 実装

目次コンセプト紹介論理的ルール完全なコード主な実装コンセプト紹介セルオートマトンとは、コンピュータの...

WeChat パブリック アカウントの録音ファイルを再生して保存します (amr ファイルを mp3 に変換)

目次オーディオトランスコーディングツール原理JAVE プロジェクトの問題このプロジェクトの特徴拡張機...

Vue3 の参照と参照の詳細

エディターは、Vue3のデータの関連する問題も共有します。次のような例を見てみましょう。 Vue.c...