チュートリアルシリーズMySQL シリーズ: 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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: ウェブサイトを黒、白、グレーにする4つのコードの詳細な説明
>>: ウェブサイト標準の検証方法を通じてFlashページを共有する方法
この記事では、MySQL データベースの一般的な操作テクニックをまとめます。ご参考までに、詳細は以下...
達成される効果は、固定ズームが 2 倍になり、マウスが左側の画像領域に入るとマスク レイヤーが表示さ...
SPA を構築する場合、多くの場合、特定のルートを保護する必要があります。たとえば、認証されたユーザ...
プロジェクトを実行すると、リアルタイム更新、広告アニメーションの連続表示などの要件に遭遇することは避...
GitHubアドレス、気に入ったらスターを付けてくださいプラグインのプレビューチュートリアル1. プ...
1: django-admin.py startproject プロジェクト名2: cd プロジェク...
ステップ1: サードパーティの信頼できるSSL証明書に署名するAlibaba Cloud で直接、無...
01. VMware Workstation Pro 15 のダウンロードダウンロード: VMwa...
<テンプレート> <div id="ルート"> <...
ブラウザがHTMLを読み込みレンダリングする順序1. IE は上から下へダウンロードし、上から下へレ...
目次1. 次のコードはwatchの簡単な使用法です2. 即時監視3. ハンドラメソッド4. 深い属性...
ページの自動スクロール効果は JavaScript で実現できますが、今日偶然、JS 制御なしでさま...
XML/HTML コードコンテンツをクリップボードにコピー<入力 id = "ユーザ...
序文データベースの実際の使用では、データの書き込みや読み取りを同時に行わないことが必要な状況によく遭...
いわゆるカスケード レプリケーションでは、マスター サーバーが 1 つのスレーブ サーバーにのみデー...