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インデックスに関する重要な面接の質問をいくつか共有します

序文インデックスは、データベース内の 1 つ以上の列の値を並べ替え、データベースが効率的にデータを取...

Docker Alibaba Cloud RocketMQ 4.5.1 のデプロイプロセスの詳細な説明

検索ミラー docker 検索 rocketmq画像バージョンを表示他の画像を表示したい場合は、画像...

Linux システムでの virtuoso データベースの詳細なインストールと使用

最近、リンク データについていくつか調査していて、rdf データベースを使用する必要があったため、v...

Centos での Python のアップグレードと Mongodb ドライバーのインストールに関する問題

Python バージョンを確認します (python -V)。2.7 未満の場合は、アップグレードす...

Excel ファイルを MySQL データベースにインポートする方法

この記事では、ExcelファイルをMySQLデータベースにインポートする方法を参考までに紹介します。...

LinuxにComposerをインストールする方法

1. インストールスクリプト(composer-setup.php)を現在のディレクトリにダウンロー...

MySQLマスタースレーブデータベース構築方法の詳細な説明

この記事では、MySQL マスター/スレーブ データベースの構築方法について説明します。ご参考までに...

CSSの絶対と相対について

冒頭にこう書かれています:アブソリュートは言った。「親戚よ、私はあなたを私の人生で見たくない!」なぜ...

Linux システムで TCP 接続を作成するプロセスの紹介

目次LinuxでTCPを作成する手順サーバクライアントTCP確立プロセスサンプルコードLinuxでT...

まだ*を選択しますか?

アプリケーションが牛のように遅い理由は数多くあります。ネットワーク、システム アーキテクチャ、または...

Vueはショッピングカート決済機能をシミュレートします

この記事では、ショッピングカート決済機能を実現するためのVueの具体的なコードを例として紹介します。...

CSS3はシームレスなスクロールと手ぶれ防止を実現します

質問画像とテキストのシームレスなスクロールは、一般的に携帯電話では良い効果をもたらしますが、一部のモ...

Dockerコンテナのインポ​​ートとエクスポートに関するチュートリアル

背景Docker の人気は、コンテナの共有と移植が容易であることと密接に関係しています。ユーザーは、...

docker compose を使用して fastDFS ファイル サーバーを構築する方法

前回の記事では、docker compose を使用して FastDfs ファイル サーバーをインス...

Apache での ab パフォーマンス テスト結果を分析する

私はパフォーマンス テストを行うために常に Loadrunner を使用してきました。 Loadru...