MySQLののマルチインスタンスとは何ですか?
簡単に言えば、Mysqlのマルチインスタンスは、単一のサーバ上の異なるサービスポートのサービスを提供するために、さまざまなリスニングソケットを介して、サービスプロセスを同時に(例えば3306,3307)は、複数の異なるサービスのポートを開き、複数のMySQLサービスのプロセスを実行することです。
マルチインスタンスMsyqlの特徴:
これらは、設定ファイル(my.cnfファイル)のプログラムやデータファイルを起動を使用せずに、MySQLのMySQLのインストーラを共有しています。サービスを提供する際に、マルチインスタンスMySQLは別の論理だが、それらはコンフィギュレーションファイルに対応した設定値に応じてあり、サーバ応答は、ハードウェアリソースの数を取得します。
追加:
実際には、多くのWebサーバは、NginxはApacheのRedisのMemcacheのように、マルチインスタンス構成可能な複数のインスタンスを設定することができますが。
マルチロールインスタンスをのmysql:
1)サーバリソースの効率的な使用は、 単一のサーバがリソースを残り時間である場合、残りのリソースは、より多くのサービスを提供するという利点を取ることができ、そしてリソースが論理的な分離を達成することができます。 2)サーバーのリソースを節約 するとき、会社の財務の歪みが、独自のデータベースを必要とし、独立したサービスを提供しようとするが、すべての優れたマスター・スレーブレプリケーション、マルチインスタンスが必要です。 しかし、マルチインスタンス、ときに高い同時実行データベースインスタンスまたは完全なSQLクエリmysqlの欠点があり、お互いのリソースをつかむために問題があるでしょう。
MySQLの生産シナリオを例に、複数
1.金融株選択の企業
サーバのそれぞれが9-15に達することができるように、3台の9-15サーバは、クロスショットから分離コピーして、データのバックアップを作成し、インスタンスを展開し次のようながデータベース与える影響のみをインストールします。いわゆる独立性が相対的です。
2.同時アクセスは、大企業ではない
、SQL文の最適化をよりよく行うためにならば、それは、マルチインスタンスのアプリケーションに適しており、ビジネスのボリュームが大きすぎない場合には、サーバーのリソースは、基本的には廃棄物ですMySQLとより例は、技術の非常に価値のある使用が大幅にシステム資源の合理的な配分によって複雑にすることができますされるだろう、と良いサービスで、大きな問題がないでしょう。
3.ポータルMySQLのマルチインスタンスのアプリケーションのシナリオ
のような:Baiduの会社、IBMサーバー48コアCPUで、部門、メモリ96ギガバイト このような構成のサーバーは、インスタンス3-4を実行することがあり、シーナ複数のインスタンスのネットワークが使用されている、メモリは48Gについてです。
追加:シーナ単一のデータベース、ネットワークデータベースインスタンス1-4過半数、1-2までの大多数、大企業が機械以上かかるよう。また、シーナのウェブサイトは、一般的にインストールインストールと使用を調和させるためには、最適化した後、rpmパッケージを作るために、カスタマイズをコンパイルするために使用されるデータベースを、インストールします。DELL R510サーバは、CPU E5210 48Gメモリドライブは、12 * 300G SAS RAID10を行い、過半数です。
マルチ構成方式のMySQL例
1つのコンフィギュレーションファイル、単一インスタンスの展開シナリオよりプログラム起動
単一の構成ファイルに記載されたMySQLの公式文書を、プログラムの単一インスタンスのマルチインスタンスの展開は、このプログラムのために推奨されていない開始、知識ポイントと呼びます。次のように公式my.cnf設定ファイルの設定例は以下のとおりです。
【mysqld_multil] のmysqld =は/ usr / binに/ mysqld_safeを mysqladminの=は/ usr / binに/のmysqladminの ユーザのMySQL = [mysqld1】 ソケット= /var/lib/mysql/mysql.sockの ポート= 3306 、PIDファイル=の/ var / libに/のMySQL /mysql.pid DATADIR =の/ var / libに/ MySQLの/ ユーザー= MySQLの [mysqld2] ソケット= / MNT /データ/ DB1 /にmysql.sockの ポート= 3302 、PIDファイル= /mnt/data/db1/mysql.pid DATADIR = / MNT /データ/ DB1 / ユーザー= MySQLの スキップ名前解決 サーバID = 10 dafaultストレージエンジン= InnoDBは innodb_buffer_pool_size = 512M innodb_additional_mem_pool = 10M DEFAULT_CHARACTER_SET = UTF8 character_set_server = UTF8 #読み取り専用 リレーログ・スペース限界= 3G expire_logs_day = 20
コマンドを起動し、次のとおりです。mysqld_multi --config-file=/data/mysql/my_multi.cnf start 1,2
この方式では、不利な点は、カップリングには、均一な原則と運用・保守を開発し、結合を低減するために、設定ファイル、悪い管理、作業高すぎるです。
2.マルチプロファイルマルチブート展開計画
複数の設定ファイル、マルチスタート展開計画は、推奨されるソリューションです。ビューの次の設定例:
[MySQLの@ルート/]ツリー/データ /データ | - 3306 | | --data "データファイルの3306例== | | --my.cnf"設定ファイルの== 3306例 | | --mysql「= = 3306インスタンスの起動ファイル --3,307 | | --data "== 3307個のインスタンス・データ・ファイル | | --my.cnf" == 3307インスタンス構成 | | --mysql「== 3307インスタンスの起動ファイル
MySQLのマルチインスタンス構成プロセス。
1. Msyql必要な依存関係をインストールし たMySQLのインストールが必要なソフトウェアコンパイラ2. 3.インストールのMysql 4.設定し、複数のインスタンス 5.初期のMySQLデータベース 6.スタートのMySQL 7.ログのMySQL 8.トラブルシューティングの指示 開始から9ブートを
MySQLの複数インスタンスのデータベースのインストール
1. Msyql必要な依存関係をインストールします。
YUMのncurses-develののlibaio-develの-yインストールし ます。rpm -qaのncurses-develののlibaio-develの のlibaio-develの-0.3.107-10.e16x86_64 のncurses-develの-5.7-3.20090208.c16x86_64を
データベース:
サーバー名ホストのIPアドレス C3-MySQLデータベース172.16.1.52/24 DB02
2. MySQLのコンパイルに必要なソフトウェアをインストールします
LS -lh cmakeの-2.8.8.tar.gz タールXFのcmakeの-2.8.8.tar.gz CDのcmakeの-2.8.8 ./configureを gmakeの gmakeをインストール cmakeの は/ usr / local / binに/ cmakeのの CDを../
それとも、yumを(yumをインストールを推奨)をインストールし使用することができますyum install cmake -y
インストールMySQLを起動します3.
#mysqlユーザを作成します。 useraddのmysqlの-s / sbinに/ nologinに-M 上記のID MySQLの言及 ダウンロードパスを入力するように#を CD /ホーム/ Oldboy /ツール のwget http://downloads.mysql.com/archives/get/file/mysql-5.5を。 32.tar.gz
MySQLのソースパッケージとバイナリパッケージ名
MySQLのソフトウェアの名前 (ここでインストールパッケージを使用されるように)Msyqlソースインストールパッケージのmysql-5.5.32.tar.gz MySQLのバイナリパッケージのmysql-5.5.32-linuxの-x86_64.tar.gz
#インストールパッケージを解凍します
タールXFのmysql-5.5.32.tar.gzの CDのmysql-5.5.32 [ルート@ DB02のmysql-5.5.32]#のcmakeの。-DCMAKE_INSTALL_PREFIX = /アプリケーション/ MySQLの-5.5.32 \ -DMYSQL_DATADIR = /アプリケーション/ MySQLの-5.5.32 /データ\ -DMYSQL_UNIX_ADDR = /アプリケーション/ MySQLの-5.5.32 / TMP /にmysql.sock \ -DDEFAULT_CHARSET = UTF8 \ - DDEFAULT_COLLATION = utf8_general_ci \ -DEXTRA_CHARSETS = GBK、GB2312、UTF8、ASCII \ -DENABLED_LOCAL_INFILE = ON \ -DWITH_INNOBASE_STORAGE_ENGINE = 1 \ -DWITH_FEDERATED_STORAGE_ENGINE = 1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE = 1 \ -DWITHOUT_EXAMPLE_STORAGE_ENGINE = 1 \ -DWITHOUT_PARTITION_STORAGE_ENGINE = 1 \ -DWITH_FAST_MUTEXES = 1 \ 同梱-DWITH_ZLIB = \ -DENABLED_LOCAL_INFILE = 1 \ -DWITH_READLINE = 1 \ -DWITH_EMBEDDED_SERVER = 1 \ -DWITH_DEBUG = 0 [ルート@ DB02のmysql-5.5.32]#作る&&作るインストールし ます。[root @のDB02のmysql-5.5.32]#LN -s /application/mysql-5.5.32/ /アプリケーション/ mysqlの [ルート@ DB02 mysqlの-5.5.32]#のCD /アプリケーション/ mysqlの [ルート@ DB02のmysql]#LSは ビンのデータが含まれ、LIBのmysql-テストスクリプトのsql-ベンチ COPYINGドキュメントINSTALL-BINARY男のREADMEを共有のサポート、ファイル
複数のインスタンスを設定します
[ルート@ DB02のMySQLの]#ます。mkdir -p /データ/ {3306,3307} /データ [ルート@ DB02〜]#ツリー/データ/ /データ/ ├──3306 ├──│データ │├──のmy.cnf │└──mysqlの └──3307の ├──データ ├──my.cnfの └──mysqlの 4つのディレクトリ、ファイル4
3306フォルダ説明:
#### vimのmy.cnfファイル####
[クライアント] ポート= 3306 ソケット= /data/3306/mysql.sock [MySQLの】 なし自動焼き直し [mysqldを】 ユーザ= MySQLの ポート= 3306 ソケット= /data/3306/mysql.sock BASEDIR = /アプリケーション/ MySQLの DATADIR = /データ/ 3306 /データ open_files_limit = 1024 back_log = 600 MAX_CONNECTIONS = 800 てmax_connect_errors = 3000 table_cacheの= 614 外部ロック= FALSE のmax_allowed_packet = 8M sort_buffer_size = 1M join_buffer_size = 1M thread_cache_size = 100 thread_concurrency = 2 query_cache_size = 2M query_cache_limit = 1M query_cache_min_res_unitの= 2K #default_table_type = InnoDBの thread_stack = 192K #transaction_isolation = READ-COMMITTED tmp_table_size = 2M max_heap_table_size = 2M long_query_time = 1 #log_long_format #ログ・エラー= /data/3306/error.log #対数スロークエリ= /データ/ 3306 /スロー.logの PIDファイル= /data/3306/mysql.pid ログ-binが= /データ/ 3306 / mysqlのビン リレーログ= /データ/ 3306 /リレービン リレー-ログ情報ファイル= /データ/ 3306 /relay-log.info binlog_cache_size = 1M max_binlog_cache_size = 1M max_binlog_size = 2M expire_logs_days = 7 key_buffer_sizeは= 16M read_buffer_size = 1M read_rnd_buffer_size = 1M bulk_insert_buffer_size = 1M #myisam_sort_buffer_size = 1M #myisam_max_sort_file_size = 10G #myisam_max_extra_sort_file_size = 10Gの #myisam_repair_threads = 1 #myisam_recover はlower_case_table_names = 1 スキップ-名前解決 スレーブ・エラーをスキップ= 1032,1062 複製-無視-DB = mysqlの サーバー-ID = 1 innodb_additional_mem_pool_size = 4M innodb_buffer_pool_size = 32M innodb_data_file_path = ibdata1と:128M:自動拡張 innodb_file_io_threads = 4 innodb_thread_concurrency = 8 innodb_flush_log_at_trx_commit = 2 innodb_log_buffer_size = 2M innodb_log_file_size = 4M innodb_log_files_in_group = 3 innodb_file_per_tableを= 0 innodb_max_dirty_pages_pct = 90 innodb_lock_wait_timeout = 120 [mysqldumpを】 クイック のmax_allowed_packet = 2M [mysqld_safeを】 対数誤差= /データ/ 3306 / mysql_oldboy3306.errの PIDファイル= /データ/ 3306 / mysqld.pid
#### Vimのmysqlの####
#!/ binに/ shの ############################################ ####は、 2016年12月9日にliuliyaによって作成されたスクリプト#この #oldboyのQQを:865205026 #siteます。http://www.liuliya.com ################ ################################ #init ポート= 3306 mysql_user = "ルート" MYSQL_PWD = "oldboy" CmdPath =」 /アプリケーション/ mysqlの/ binに」 mysql_sock = "/データ/ $ {ポート} /mysql.sock" #startup関数 function_start_mysql() { [あれば!-e "$のmysql_sock"];その後 のprintfは、 "MySQLの... \ n個の開始" / binに/のsh $ {CmdPath} / mysqld_safeを--defaults-ファイル= /データ/ $ {ポート} /my.cnf 2>&1> / dev / null& #STOP関数 #STOP機能 function_stop_mysql() function_stop_mysql() { { [あれば!-e "$のmysql_sock"];その後、 printfの"MySQLが停止されています... \ n"は 終了し 、他 のprintf "ストーピングMySQLの... \ n"は $ {CmdPath} / mysqladminの-u $ {} mysql_user -p $ {} MYSQL_PWD -S /data/${port}/mysql.sockシャットダウン Fiの } #restart関数 function_restart_mysql() { printfの"再起動のMySQL ... \ n"は function_stop_mysqlの 睡眠2 function_start_mysql } の場合$ 1 スタート) function_start_mysql ;; ストップ) function_stop_mysql ;; [あれば!-e "$のmysql_sock"];その後、 printfの"MySQLが停止されています... \ n"は 終了し 、他 のprintf "ストーピングMySQLの... \ n"は $ {CmdPath} / mysqladminの-u $ {} mysql_user -p $ {} MYSQL_PWD -S /data/${port}/mysql.sockシャットダウン Fiの } #restart関数 function_restart_mysql() { printfの"再起動のMySQL ... \ n"は function_stop_mysqlの 睡眠2 function_start_mysql } の場合$ 1 スタート) function_start_mysql ;; ストップ) function_stop_mysqlの 再起動) function_restart_mysql ;; *) のprintf "使い方:/データ/ $ {ポート} / mysqlの{開始|停止|再起動} \ n"は ESAC
3307フォルダ説明:
####のvimのmy.cnf
[クライアント] ポート= 3307 ソケット= /data/3307/mysql.sock [MySQLの】 なし自動焼き直し [mysqldを】 ユーザ= MySQLの ポート= 3307 ソケット= /data/3307/mysql.sock BASEDIR = /アプリケーション/ MySQLの DATADIR = /データ/ 3307 /データ open_files_limit = 1024 back_log = 600 MAX_CONNECTIONS = 800 てmax_connect_errors = 3000 table_cacheの= 614 外部ロック= FALSE のmax_allowed_packet = 8M sort_buffer_size = 1M join_buffer_size = 1M thread_cache_size = 100 thread_concurrency = 2 query_cache_size = 2M query_cache_limit = 1M query_cache_min_res_unitの= 2K #default_table_type = InnoDBの thread_stack = 192K #transaction_isolation = READ-COMMITTED tmp_table_size = 2M max_heap_table_size = 2M #long_query_time = 1 #log_long_format #対数誤差= /data/3307/error.log #対数スロークエリ= /データ/3307/slow.log PIDファイル= /data/3307/mysql.pid #ログ・ビン= /データ/ 3307 / mysqlのビン リレーログ= /データ/ 3307 /リレービン リレー-ログ情報ファイル= /data/3307/relay-log.info binlog_cache_size = 1M max_binlog_cache_size = 1M max_binlog_size = 2M expire_logs_days = 7 key_buffer_sizeは= 16M read_buffer_size = 1M read_rnd_buffer_size = 1M bulk_insert_buffer_size = 1M #myisam_sort_buffer_size = 1M #myisam_max_sort_file_size = 10G #myisam_max_extra_sort_file_size = 10Gの #myisam_repair_threads = 1 #myisam_recover はlower_case_table_names = 1 スキップ-名前解決 スレーブ・エラーをスキップ= 1032,1062 複製-無視-DB = mysqlの サーバー-ID = 3 innodb_additional_mem_pool_size = 4M innodb_buffer_pool_size = 32M innodb_data_file_path = ibdata1と:128M:自動拡張 innodb_file_io_threads = 4 innodb_thread_concurrency = 8 innodb_flush_log_at_trx_commit = 2 innodb_log_buffer_size = 2M innodb_log_file_size = 4M innodb_log_files_in_group = 3 innodb_file_per_tableを= 0 innodb_max_dirty_pages_pct = 90 innodb_lock_wait_timeout = 120 [mysqldumpを] 素早い するmax_allowed_packet = 2M [mysqld_safeを] ログインエラー= /データ/ 3307 / mysql_oldboy3307.errの PIDファイル= /データ/ 3307 / mysqld.pid
#### Vimのmysqlの####
#!/ binに/ shの ############################################ ####は、 2016年12月9日にliuliyaによって作成されたスクリプト#この #oldboyのQQを:865205026 #siteます。http://www.liuliya.com ################ ################################ #init ポート= 3307 mysql_user = "ルート" MYSQL_PWD = "oldboy" CmdPath =」 /アプリケーション/ mysqlの/ binに」 mysql_sock = "/データ/ $ {ポート} /mysql.sock" #startup関数 function_start_mysql() { [あれば!-e "$のmysql_sock"];その後 のprintfは、 "MySQLの... \ n個の開始" / binに/のsh $ {CmdPath} / mysqld_safeを--defaults-ファイル= /データ/ $ {ポート} /my.cnf 2>&1> / dev / null& 終了 ;; #STOP関数 function_stop_mysql() { [あれば!-e "$のmysql_sock"];その後、 printfの"MySQLが停止されています... \ n"は 終了し 、他 のprintf "ストーピングMySQLの... \ n"は $ {CmdPath} / mysqladminの-u $ {} mysql_user -p $ {} MYSQL_PWD -S /data/${port}/mysql.sockシャットダウン Fiの } #restart関数 function_restart_mysql() { printfの"再起動のMySQL ... \ n"は function_stop_mysqlの 睡眠2 function_start_mysql } の場合$ 1 スタート) function_start_mysql ;; ストップ) function_stop_mysqlの 再起動) function_restart_mysql ;; *) のprintf "使い方:/データ/ $ {ポート} / mysqlの{開始|停止|再起動} \ n"は ESAC
#MySQLの実行許可増加するコマンドを起動するfind /data -type f -name "mysql"|xargs chmod +x
グループ/データディレクトリされた#変更をchwon -R mysql.mysql /data/
5. MySQLデータベースを初期化する(mysqlのライブラリとその管理テーブルをロード)
[ルート@のDB02〜]#のCD /アプリケーション/ mysqlの/スクリプト/ [ルート@ DB02スクリプト]#件のls mysql_install_dbの
#3306は、インスタンスの初期化[root@db02 scripts]# ./mysql_install_db --basedir=/application/mysql --datadir=/data/3306/data --user=mysql
に成功実績のリターン2 OK
#3307のインスタンスの初期化[root@db02 scripts]# ./mysql_install_db --basedir=/application/mysql --datadir=/data/3307/data --user=mysql
を返す2つの実証済みの成功OK
6.スタートのMysql
[ルート@のDB02スクリプト]#/データ/ 3306 / mysqlの開始 [ルート@のDB02スクリプト]#/データ/ 3307 / mysqlの開始
#のビューポートnetstat -lntup|grep 330
#mysqlの設定環境変数cp /application/mysql/bin/* /usr/local/sbin/
#ビューの環境変数echo $PATH
7.ログのmysql(靴下を開発する必要があります)
mysqlの-S /data/3306/mysql.sock mysqlの-S /data/3307/mysql.sock
8.トラブルシューティング手順
1. [ログの表示cat mysql_oldboy3306.err
、示されていない対応するポートMsyql例を開始するために発見された場合2.、サービスはいくつかの他のWebより遅いMySQLを起動し、少しの検査では、数秒待ってください。
PS:常に良い習慣ですが、また、マスターになるための唯一の方法は、ログを実行しているサービスを確認してください。
開始から9ブート
固有のコマンド:
エコー"// MySQLのインスタンスmutil" >>は/ etc / rc.localに エコー"/データ/ 3306 / mysqlの開始" >>は/ etc / rc.localに エコー"/データ/ 3307 / mysqlの開始" >>は/ etc / rcの。地元
どのようにMySQLインスタンスを追加するには
、コマンドの特定のセットを:
ます。mkdir -p /データ/ 3308 /データ \ CP /data/3306/my.cnf /データ/ 3308 / \ CP /データ/ 3306 / mysqlの/データ/ 3308 / CD 3308 / SED -iさん/ 3306/3308 / G」/data/3308/my.cnf SED -iの/サーバID = 1 /サーバID = 8 / G '/data/3308/my.cnf SED -i 'S / 3308分の3306 / G' /データ/ 3308 /のMySQL のchown -R mysql.mysql /データ/ 3308 のchmod 700 /データ/ 3308 / MySQLの
#MySQLデータベースインスタンスの初期化3308
[ルート@のDB02〜]#のCD /アプリケーション/ mysqlの/スクリプト/
#3306は、インスタンスの初期化し[root@db02 scripts]# ./mysql_install_db --basedir=/application/mysql --datadir=/data/3308/data --user=mysql
、データベース・インスタンスを起動するために#3308を/data/3308/mysql start