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ページを共有する方法

推薦する

SSHトンネルを使用してMySQLサーバーに接続する方法

序文場合によっては、データベースのイントラネット アドレスしか知らず、イントラネット経由で接続できな...

エージェントを介したzabbix監視プロセスとポートの詳細なプロセス

環境の紹介オペレーティングシステム: Centos 7.4 Zabbix バージョン: zabbix...

HTMLにおける絶対パスと相対パスの違いの分析

図に示すように: 1 つのページには多数のファイルが接続されているため、ファイルを参照するときには、...

Vue3 の動的コンポーネントはどのように機能しますか?

目次1. コンポーネントの登録1.1 グローバル登録1.2 グローバルコンポーネントの登録プロセス1...

JavaScript Reduceの詳しい説明

目次地図フィルターいくつかの毎インデックスを検索パイプ参考回答1. パラメータを受け入れる関数を返す...

Tencent Cloud 上で Hadoop 3.x 疑似クラスターを構築する方法を説明します

1. 環境整備CentOS Linux リリース 7.5.1804 (コア)インストールフォルダを作...

Win10 に Linux ubuntu-18.04 デュアル システムをインストールする (インストール ガイド)

コンピューターに Linux Ubuntu システムをインストールしました。初めてインストールしまし...

サイバーパンクスタイルのボタンを実現するためのHTML+CSS

まず効果を見てみましょう: 序文:このアイデアは、Bilibili のアップロード者 Steven ...

MySQL マスタースレーブレプリケーションの読み書き分離構造の詳細な説明

MySQL マスタースレーブ設定MySQL のマスター/スレーブ レプリケーションと読み取り/書き込...

Ubuntu 18.04 に VMware Tools をインストールする際のエラーを解決する

1. オンライン チュートリアルによると、Ubuntu 18.04 のインストールはまだ失敗します。...

入力ボックスのカーソルサイズの表示が一貫していない問題の解決方法

入力ボックス内のカーソルのサイズが一定ではありませんIE7とChromeの違いは非常に明白ですまず、...

CSS を使用して画像の下の空白を数ピクセル消去する方法の詳細な説明

最近、友人が私に質問をしました。ページをレイアウトすると、画像の下に 1 ~ 2 ピクセルの空白があ...

訪問者にあなたのウェブサイトを覚えてもらうための3つの便利なコード

訪問者があなたのウェブサイトを覚えておくのに役立つ3つの便利なコード。お気に入りに追加するためのヒン...

docker tagとdocker pushの使い方の詳しい説明

Dockerタグの詳しい説明docker tag コマンドの使い方と、ローカルイメージを daocl...

Dockerのプロセスとイメージを実行するための基本コマンドの詳細な説明

目次1. ワークフローを実行する2. ミラーリングの基本コマンド1. ワークフローを実行するDock...