MySQL シリーズ II マルチインスタンス構成

MySQL シリーズ II マルチインスタンス構成

チュートリアルシリーズ

MySQL シリーズ: MySQL リレーショナル データベースの基本概念
MySQLシリーズのMariaDBサーバーのインストール
MySQL シリーズ 3 基礎
MySQL シリーズ 4 SQL 構文
MySQLシリーズ5つのビュー、ストアド関数、ストアドプロシージャ、トリガー
MySQL シリーズ 6 のユーザーと認証
MySQL シリーズ 7 MySQL ストレージ エンジン
MySQL シリーズ 8 MySQL サーバー変数
MySQL シリーズ 9 MySQL クエリ キャッシュとインデックス
MySQL シリーズ 10 同時実行制御を実装するための MySQL トランザクション分離
MySQL シリーズ 11 ログ
MySQL シリーズ 12 バックアップとリカバリ
MySQL シリーズ 13 MySQL レプリケーション
MySQL シリーズ 14 MySQL 高可用性実装
MySQLシリーズ15 MySQL共通設定とパフォーマンスストレステスト

MySQL マルチインスタンスとは何ですか?

簡単に言うと、MySQL マルチインスタンスとは、サーバー上で複数の異なるサービス ポート (3306、3307 など) を同時に開き、複数の MySQL サービス プロセスを同時に実行することです。これらのサービス プロセスは、異なるサービス ポートをリッスンする異なるソケットを通じてサービスを提供します。

これらの MySQL の複数のインスタンスは、異なる my.cnf (同じでも可) 構成ファイル、起動プログラム (同じでも可)、およびデータ ファイルを使用して、一連の MySQL インストール プログラムを共有します。サービスを提供する際、複数の MySQL インスタンスは論理的に互いに独立しているように見え、構成ファイル内の対応する設定に基づいて、サーバーから対応する量のハードウェア リソースを取得します。

例を挙げると、複数の MySQL インスタンスは、家の複数の寝室に相当します。各インスタンスは寝室とみなすことができ、サーバー全体は家です。サーバーのハードウェア リソース (CPU、メモリ、ディスク) とソフトウェア リソース (CentOS オペレーティング システム) は、家のバスルーム、キッチン、リビングルームとみなすことができ、これらは家の共有リソースです。北京の出稼ぎ労働者で、友達と一緒に家を借りているなら、もっとよく分かると思います。みんな一緒に暮らし、自分の寝室で休み、外出するときは必ず上記の公共資源を共有することになります。これにより、MySQL の複数のインスタンスについて十分に理解できるようになります。

実際、nginx、Apache、haproxy、redis など、多くのネットワーク サービスは複数のインスタンスを使用して構成できます。ポータルサイトで広く使用されています。

1 台の物理マシンに複数のテスト環境が必要な場合は、データベースの複数のインスタンスを構築する必要があります。複数のインスタンスは複数のプログラムを実行することを意味し、インスタンス間に影響を与えません。リスニング ポートが異なる必要があることに注意してください。

環境: CentOS7.5、MariaDB-10.2.15 バージョンをコンパイルしてインストール、ソフトウェアのインストール ディレクトリ: /app/mysql/

1) 実行ディレクトリ環境を作成する

[root@centos7 ~]# mkdir -p /mysqldb/{3306,3307,3308}/{etc,socket,pid,log,data,bin}
[root@centos7 ~]# chown -R mysql:mysql /mysqldb/

2) データベースを初期化する

[root@centos7 ~]# cd /app/mysql/
[root@centos7 mysql]# scripts/mysql_install_db --datadir=/mysqldb/3306/data/ --user=mysql --basedir=/app/mysql/ 
[root@centos7 mysql]# scripts/mysql_install_db --datadir=/mysqldb/3307/data/ --user=mysql --basedir=/app/mysql/
[root@centos7 mysql]# scripts/mysql_install_db --datadir=/mysqldb/3308/data/ --user=mysql --basedir=/app/mysql/

上記はコンパイルしてインストールしたものです。インストールディレクトリは /app/mysql/ です。ソフトウェアのインストールディレクトリに入り、初期化スクリプトを実行する必要があります。yum でインストールしたパッケージの場合は、mysql_install_db コマンドを直接実行するだけです。

3) 設定ファイルを提供し、必要に応じて変更する

[root@centos7 mysql]# cp support-files/my-huge.cnf /mysqldb/3306/etc/my.cnf
[root@centos7 mysql]# cp support-files/my-huge.cnf /mysqldb/3307/etc/my.cnf
[root@centos7 mysql]# cp support-files/my-huge.cnf /mysqldb/3308/etc/my.cnf
[root@centos7 mysqldb]# cd /mysqldb/
[root@centos7 mysqldb]# vim 3306/etc/my.cnf
[mysqld]
ポート = 3306
データディレクトリ = /mysqldb/3306/data
ソケット = /mysqldb/3306/socket/mysql.sock
[root@centos7 mysqldb]# vim 3307/etc/my.cnf #上記の設定例に従って変更します [root@centos7 mysqldb]# vim 3308/etc/my.cnf

4) サービス起動スクリプトを提供する

[root@centos7 ~]# cat mysqld #スクリプト例#!/bin/bash

port=3306 #現在のインスタンスのポート番号に変更する必要がありますmysql_user="root"
mysql_pwd=""
cmd_path="/app/mysql/bin" #インストールディレクトリ内のbin
mysql_basedir="/mysqldb" #インスタンスデータベースファイルが配置されているディレクトリmysql_sock="${mysql_basedir}/${port}/socket/mysql.sock"

関数_start_mysql()
{
    if [ ! -e "$mysql_sock" ];その後
      printf "MySQL を起動しています...\n"
      ${cmd_path}/mysqld_safe --defaults-file=${mysql_basedir}/${port}/etc/my.cnf &> /dev/null &
    それ以外
      printf "MySQL が実行中です...\n"
      出口
    フィ
}


関数_stop_mysql()
{
    if [ ! -e "$mysql_sock" ];その後
       printf "MySQL は停止しています...\n"
       出口
    それ以外
       printf "MySQL を停止しています...\n"
       ${cmd_path}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_sock} シャットダウン
   フィ
}


関数_restart_mysql()
{
    printf "MySQL を再起動しています...\n"
    関数_stop_mysql
    睡眠2
    関数_start_mysql
}

ケース$1
始める)
    関数_start_mysql
;;
停止)
    関数_stop_mysql
;;
再起動)
    関数_restart_mysql
;;
*)
    printf "使用方法: ${mysql_basedir}/${port}/bin/mysqld {start|stop|restart}\n"
エサック
[root@centos7 ~]# cp mysqld /mysqldb/3306/bin/
[root@centos7 ~]# cp mysqld /mysqldb/3307/bin/
[root@centos7 ~]# cp mysqld /mysqldb/3308/bin/
[root@centos7 ~]# vim /mysqldb/3306/bin/mysqld
ポート=3306
[root@centos7 ~]# vim /mysqldb/3307/bin/mysqld
ポート=3307
[root@centos7 ~]# vim /mysqldb/3308/bin/mysqld
ポート=3308

5) スクリプトファイルの権限を変更して、パスワードが他人に見られないようにする

[root@centos7 ~]# chmod 700 /mysqldb/3306/bin/mysqld 
[root@centos7 ~]# chmod 700 /mysqldb/3307/bin/mysqld  
[root@centos7 ~]# chmod 700 /mysqldb/3308/bin/mysqld 

6) サービスを開始する

[root@centos7 ~]# service mysqld stop #元のサービスが停止していることを確認し、ポート 3306 を解放します [root@centos7 ~]# /mysqldb/3306/bin/mysqld start #サービスを開始します [root@centos7 ~]# /mysqldb/3307/bin/mysqld start
[root@centos7 ~]# /mysqldb/3308/bin/mysqld を起動します
[root@centos7 ~]# ss -tnl #3つのインスタンスがリッスンしているポートがすべて開いていることがわかったら、サービスが正常に起動していることを意味します LISTEN 0 80 :::3306 :::*
聞く 0 80 :::3307 :::*
聞く 0 80 :::3308 :::*

7) 接続テスト

[root@centos7 ~]# mysql -S /mysqldb/3306/socket/mysql.sock #ソケットファイルを指定するには -S を使用します サーバーバージョン: 10.2.15-MariaDB-log ソース配布
MariaDB [(なし)]> show variables like '%port'; #ポートが3306かどうか確認
+---------------------+-------+
| 変数名 | 値 |
+---------------------+-------+
| 追加ポート | 0 |
| 大容量ファイルサポート | オン |
| ポート | 3306 |
| レポートポート | 3306 |
+---------------------+-------+
セット内の 4 行 (0.00 秒)

[root@centos7 ~]# mysql -S /mysqldb/3307/socket/mysql.sock # 再接続して3307と3308をテストします
サーバーバージョン: 10.2.15-MariaDB-log ソース配布
MariaDB [(なし)]> '%port' のような変数を表示します。
+---------------------+-------+
| 変数名 | 値 |
+---------------------+-------+
| 追加ポート | 0 |
| 大容量ファイルサポート | オン |
| ポート | 3307 |
| レポートポート | 3307 |
+---------------------+-------+
セット内の 4 行 (0.00 秒)

[root@centos7 ~]# mysql -S /mysqldb/3308/socket/mysql.sock
サーバーバージョン: 10.2.15-MariaDB-log ソース配布
MariaDB [(なし)]> '%port' のような変数を表示します。
+---------------------+-------+
| 変数名 | 値 |
+---------------------+-------+
| 追加ポート | 0 |
| 大容量ファイルサポート | オン |
| ポート | 3308 |
| レポートポート | 3308 |
+---------------------+-------+
セット内の 4 行 (0.00 秒)

複数のインスタンスが正常に構築されました。

8) このコマンドを使用してインスタンスを停止します

[root@centos7 ~]# /mysqldb/3306/bin/mysqld を停止します

9) 最後のステップ: ルートユーザーのパスワードを追加します~

[root@centos7 ~]# mysql -S /mysqldb/3307/socket/mysql.sock 
サーバーバージョン: 10.2.15-MariaDB-log ソース配布

MariaDB [(なし)]> update mysql.user set password=PASSWORD("your_password") where user='root';
クエリは正常、4 行が影響を受けました (0.00 秒)
MariaDB [(なし)]> 権限をフラッシュします。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
MariaDB [(なし)]> mysql.user からユーザー、ホスト、パスワードを選択します。
+------+-----------+--------------------------------------------------------+
| ユーザー | ホスト | パスワード |
+------+-----------+--------------------------------------------------------+
| ルート | ローカルホスト | *9E72259BA9214F692A85B240647C4D95B0F2E08B |
| ルート | centos7 | *9E72259BA9214F692A85B240647C4D95B0F2E08B |
| ルート | 127.0.0.1 | *9E72259BA9214F692A85B240647C4D95B0F2E08B |
| ルート | ::1 | *9E72259BA9214F692A85B240647C4D95B0F2E08B |
| | ローカルホスト | |
| | centos7 | |
+------+-----------+--------------------------------------------------------+
セット内の 6 行 (0.00 秒)

[root@centos7 ~]# mysql -S /mysqldb/3307/socket/mysql.sock -uroot -p'your_password' #パスワードを指定して再度ログインすればOK~

最後に、サービスの起動に失敗しないように、bin/mysqldスクリプトファイルにパスワードを追加します。

これで、MySQL シリーズ 2 マルチインスタンス構成に関するこの記事は終了です。MySQL マルチインスタンス構成の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQLデータベース入門:マルチインスタンス構成方法の詳しい説明
  • MySQL マルチインスタンス構成ソリューション
  • mysqld_multi を使用して単一のマシンに複数のインスタンスをデプロイする方法に関する MySQL チュートリアル
  • MySQLの導入と1台のマシンでのマルチインスタンス導入を迅速に実装
  • MySQLマルチインスタンスインストールに基づく詳細な分析

<<:  ウェブサイトを黒、白、グレーにする4つのコードの詳細な説明

>>:  ウェブサイト標準の検証方法を通じてFlashページを共有する方法

推薦する

MySQLデータベースの共通操作スキルのまとめ

この記事では、MySQL データベースの一般的な操作テクニックをまとめます。ご参考までに、詳細は以下...

Vue3.0 手書き拡大鏡効果

達成される効果は、固定ズームが 2 倍になり、マウスが左側の画像領域に入るとマスク レイヤーが表示さ...

1 つの記事で Vue ミドルウェア パイプラインを学ぶ

SPA を構築する場合、多くの場合、特定のルートを保護する必要があります。たとえば、認証されたユーザ...

Vueはシンプルなタイマーコンポーネントを実装します

プロジェクトを実行すると、リアルタイム更新、広告アニメーションの連続表示などの要件に遭遇することは避...

ユニアプリプロジェクトでのウォーターフォールレイアウトの実装

GitHubアドレス、気に入ったらスターを付けてくださいプラグインのプレビューチュートリアル1. プ...

Django プロジェクトを作成して MySQL に接続する方法

1: django-admin.py startproject プロジェクト名2: cd プロジェク...

Alibaba Cloud Nginx はドメイン名アクセス プロジェクトを実装するために https を設定します (グラフィック チュートリアル)

ステップ1: サードパーティの信頼できるSSL証明書に署名するAlibaba Cloud で直接、無...

VMware Workstation 15 Pro インストール ガイド (初心者向け)

01. VMware Workstation Pro 15 のダウンロードダウンロード: VMwa...

VueのTodoListケースの詳しい説明

<テンプレート> <div id="ルート"> <...

HTMLページの読み込みと解析プロセスの詳細な紹介

ブラウザがHTMLを読み込みレンダリングする順序1. IE は上から下へダウンロードし、上から下へレ...

VUEウォッチリスナーの基本的な使い方の詳しい説明

目次1. 次のコードはwatchの簡単な使用法です2. 即時監視3. ハンドラメソッド4. 深い属性...

HTML タグ マーキーはさまざまなスクロール効果を実現します (JS 制御なし)

ページの自動スクロール効果は JavaScript で実現できますが、今日偶然、JS 制御なしでさま...

h5入力ボックスプロンプト+通常のテキストボックスプロンプトを実装する方法

XML/HTML コードコンテンツをクリップボードにコピー<入力 id = "ユーザ...

MySQL における楽観的ロック、悲観的ロック、MVCC の包括的な分析

序文データベースの実際の使用では、データの書き込みや読み取りを同時に行わないことが必要な状況によく遭...

MySQLカスケードレプリケーションの実装方法の例

いわゆるカスケード レプリケーションでは、マスター サーバーが 1 つのスレーブ サーバーにのみデー...